JPEG编码

  jpeg整个的编码过程实现:

       第一步:8*8的源图像数据变为范围为 -128~127  

       第二步:对转换范围后的数据进行DCT变换 ,并四舍五入取接近的整数,公式为FDCT变换公式。一共得到 64个 DCT  变换系数。u=0且v=0  时,称为DC系数,是64个图像采样平均值。剩下的63个系数称为AC系数。

       第三步:对这64个DCT变换系数根据亮度量化表和色度量化表进行量化。

       第四步:对量化后的系数进行采用zig-zag(“Z”字形)扫描,然后对量化后的DC系数进行 DPCM 编码,对量化后的AC系数进行行程编码。

       第五步:对DPCM编码后的DC系数和行程编码后的AC系数继续进行熵编码,最后得到压缩后的图像数据

       DCT变换过程

       FDCT变换公式:

      每个8*8二维源图像采集数据块,实际上是64点离散信号,该信号是空间二维参数x和y的函数。离散余弦的变换的的每个变换系数值由64个输入信号唯一确定。在频域平面上变换系数是二维频域变量u和v的函数。对应于u=0,v=0的系数,称作直流分量,即DC系数,其余63个系数称作AC系数,即交流分量。

           

      图像基础知识

      在图像处理中,为了利用人的视角特性,从而降低数据量,通常把 RGB 空间表示的彩色图像变换到其他色彩空间。

      现在常用的色彩空间变换有三种:YIQ,YUV 和 YCrCb。

      每一种色彩空间都产生一种亮度分量信号和两种色度分量信号,而每一种变换使用的参数都是为了适应某种类型的显示设备。

     YIQ:用于NTSC彩色电视制式

     YUV:用于PAL和SECAM彩色电视制式

     YCbCr:用于计算机显示器

     这三种彩色空间变换都会产生一种亮度分量信号和两种色度分量信号,然后把这些信号单独存储,显示的时候一起显示。

     JPEG编码过程框图如下:

 

   量化表是控制 JPEG 压缩比的关键,这个步骤除掉了一些高频量;另一个重要原因是所有图片的点与点之间会有一个色彩过渡的过程,大量的图像信息被包含在低频率中,经过量化处理后,在高频率段,将出现大量连续的零。

     

作者:绿茶叶 
出处:http://www.cnblogs.com/greenteaone/ 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载:http://www.cnblogs.com/greenteaone/archive/2010/06/13/1757714.html

时间: 2025-01-02 15:33:15

JPEG编码的相关文章

求JPEG编码源码

问题描述 我的JPEG编码C#源码,生成的jpeg文件有点失真,显得比较粗糙,不知道哪里位有更好源码的可以分享? 解决方案 解决方案二:我也再找..................

JAVA对JPEG图片进行处理

在某些网站,我们往往需要上传一些图片资料.但随着高分辨率DC的普及,上传的图片容量会很大,比如300万象素DC出来的文件基本不下 600K. 为了管理方便,大家可能不愿意每次都用ACDsee修改它,而直接上传到服务器.但是这种做法在客户端看来就没有那么轻松了,对于拨号上网的用户简直是一场恶梦,虽然你可以在图片区域设置wide和high! 问题的解决之道来了!我们可以在类中处理一张大图,并缩小它. 前提是需要JDK1.4,这样才能进行处理.按以下方法做: import java.io.File;

嵌入式Linux基于framebuffer的jpeg格式本地LCD屏显示

在基于Linux的视频监控采集系统中,摄像头采集到的一帧视频图像数据一般都是经过硬件自动压缩成jpeg格式的,然后再保存到摄像头设备的缓冲区.如果要把采集到的jpeg格式显示在本地LCD屏上,由于我们的Linux系统没有移植任何GUI系统,就要考虑以下方面:1. 将jpeg格式解压缩为位图格式,也就是jpeg解码. 2. 将解码出来的位图格式输出到本地的LCD屏上. 在Linux系统下是通过写入帧缓冲(framebuffer)来实现的. 3. framebuffer相当于为LCD设备提供一个统一

嵌入式 视频编码(H264)

这几天在编写视频录制模块,所以,闲暇之余,又粗粗的整理了一下,主要是API,以备不时之用        摄像头获取的模拟信号通过经芯片处理(我们使用的是CX25825),将模拟信号转成数字信号,产生标准的ITU 656 YUV格式的数字信号以帧为单位送到编码卡上的DSP和内存中.分别供视频实时预览.移动侦测处理以及编码等使用.其中编码的作用是将编码卡内存中的YUV数据送到H264编码器中,进过H.264编码产生压缩好的码流,送到主机内存中,供录像或网络传输使用.编码模块完成各个协议编码,协调 M

一个.net 压缩位图至JPEG的实例代码_实用技巧

首先准备一张位图图像source.bmp,将它保存在bmp.aspx同一目录中 复制代码 代码如下:         <%@ Page language="c#" %>     <%@ Import Namespace="System.Drawing" %>     <%@ Import Namespace="System.Drawing.Imaging" %>         <script langu

嵌入式Linux中基于framebuffer设备的jpeg格式在本地LCD屏显示

在基于Linux的视频监控采集系统中,摄像头采集到的一帧视频图像数据一般都是经过硬件自动压缩成jpeg格式的,然后再保存到摄像头设备的缓冲区.如果要把采集到的jpeg格式显示在本地LCD屏上,由于我们的Linux系统没有移植任何GUI系统,就要考虑以下方面: 1. 将jpeg格式解压缩为位图格式,也就是jpeg解码. 2. 将解码出来的位图格式输出到本地的LCD屏上. 在Linux系统下是通过写入帧缓冲(framebuffer)来实现的. 3. framebuffer相当于为LCD设备提供一个统

pdf-用Java实现 对PDF文件大小的控制。

问题描述 用Java实现 对PDF文件大小的控制. 20C 如题,通过代码可以将现有的PDF,比如100m大小的文件缩小到80m不是压缩成zip或者rar.在网上找了很多,一点代码都没有可以参考的.求大神指点 解决方案 压缩pdf文件的思路主要是删除pdf中冗余的,不显示的内容,比如脚本.注释.书签.多媒体文件.嵌入的ttf字体等等.以及改变图片的分辨率.说白了,不是什么样的pdf都能精简,也不是想精简到什么程度就能精简到什么程度.我让你产生一个10kb的pdf,装一部三国演义,这可能么? 解决

怎样使用Java Servlet动态生成图片详解

servlet|动态|详解 在Web应用中,经常需要动态生成图片,比如实时股市行情,各种统计图等等,这种情况下,图片只能在服务器内存中动态生成并发送给用户,然后在浏览器中显示出来. 本质上,浏览器向服务器请求静态图片如JPEG时,服务器返回的仍然是标准的http响应,只不过http头的contentType不是text/html,而是image/jpeg而已,因此,我们在Servlet中只要设置好contentType,然后发送图像的数据流,浏览器就能正确解析并显示出图片. 在Java中,jav

JSP上传图片并生成缩略图

js|上传|上传图片|缩略图 本例子使用了jspsmart组件进行上传,这里可以免费下载该组件www.jspsmart.com下载解压后,将jar包复制到 \WEB-INF\lib 目录后重启服务器,jspsmart即可正常使用了 1.uploadimage.jsp <%@ page contentType="text/html;charset=gb2312" language="java" import="java.io.*,java.awt.Im