问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

基于dct的jpeg编码方法有哪些步骤

发布网友 发布时间:2022-04-21 06:31

我来回答

1个回答

热心网友 时间:2023-07-04 18:45

一.JPEG压缩过程

JPEG压缩分四个步骤实现:
1.颜色模式转换及采样;
2.DCT变换;
3.量化;
4.编码。
二.
1.颜色模式转换及采样 RGB色彩系统是我们最常用的表示颜色的方式。JPEG采用的是YCbCr色彩系统。想要用JPEG基本压缩法处理全彩色图像,得先把RGB颜色模式图像数据,转换为YCbCr颜色模式的数据。Y代表亮度,Cb和Cr则代表色度、饱和度。通过下列计算公式可完成数据转换。 Y=0.2990R+0.5870G+0.1140B Cb=-0.1687R-0.3313G+0.5000B+128 Cr=0.5000R-0.4187G-0.0813B+128 人类的眼晴对低频的数据比对高频的数据具有更高的敏感度,事实上,人类的眼睛对亮度的改变也比对色彩的改变要敏感得多,也就是说Y成份的数据是比较重要的。既然Cb成份和Cr成份的数据比较相对不重要,就可以只取部分数据来处理。以增加压缩的比例。JPEG通常有两种采样方式:YUV411和YUV422,它们所代表的意义是Y、Cb和Cr三个成份的数据取样比例。
2.DCT变换 DCT变换的全称是离散余弦变换(Discrete Cosine Transform),是指将一组光强数据转换成频率数据,以便得知强度变化的情形。若对高频的数据做些修饰,再转回原来形式的数据时,显然与原始数据有些差异,但是人类的眼睛却是不容易辨认出来。 压缩时,将原始图像数据分成8*8数据单元矩阵,例如亮度值的第一个矩阵内容如下:
JPEG将整个亮度矩阵与色度Cb矩阵,饱和度Cr矩阵,视为一个基本单元称作MCU。每个MCU所包含的矩阵数量不得超过10个。例如,行和列采样的比例皆为4:2:2,则每个MCU将包含四个亮度矩阵,一个色度矩阵及一个饱和度矩阵。 当图像数据分成一个8*8矩阵后,还必须将每个数值减去128,然后一一代入DCT变换公式中,即可达到DCT变换的目的。图像数据值必须减去128,是因为DCT转换公式所接受的数字范围是在-128到+127之间。 DCT变换公式:
x,y代表图像数据矩阵内某个数值的坐标位置f(x,y)代表图像数据矩阵内的数个数值u,v代表DCT变换后矩阵内某个数值的坐标位置F(u,v)代表DCT变换后矩阵内的某个数值 u=0 且 v=0 c(u)c(v)=1/1.414 u>0 或 v>0 c(u)c(v)=1 经过DCT变换后的矩阵数据自然数为频率系数,这些系数以F(0,0)的值最大,称为DC,其余的63个频率系数则多半是一些接近于0的正负浮点数,一概称之为AC。
3、量化 图像数据转换为频率系数后,还得接受一项量化程序,才能进入编码阶段。量化阶段需要两个8*8矩阵数据,一个是专门处理亮度的频率系数,另一个则是针对色度的频率系数,将频率系数除以量化矩阵的值,取得与商数最近的整数,即完成量化。 当频率系数经过量化后,将频率系数由浮点数转变为整数,这才便于执行最后的编码。不过,经过量化阶段后,所有数据只保留整数近似值,也就再度损失了一些数据内容,JPEG提供的量化表如下:

4、编码 Huffman编码无专利权问题,成为JPEG最常用的编码方式,Huffman编码通常是以完整的MCU来进行的。 编码时,每个矩阵数据的DC值与63个AC值,将分别使用不同的Huffman编码表,而亮度与色度也需要不同的Huffman编码表,所以一共需要四个编码表,才能顺利地完成JPEG编码工作。 DC编码 DC是彩采用差值脉冲编码调制的差值编码法,也就是在同一个图像分量中取得每个DC值与前一个DC值的差值来编码。DC采用差值脉冲编码的主要原因是由于在连续色调的图像中,其差值多半比原值小,对差值进行编码所需的位数,会比对原值进行编码所需的位数少许多。例如差值为5,它的二进制表示值为101,如果差值为-5,则先改为正整数5,再将其二进制转换成1的补数即可。所谓1的补数,就是将每个Bit若值为0,便改成1;Bit为1,则变成0。差值5应保留的位数为3,下表即列出差值所应保留的Bit数与差值内容的对照。
在差值前端另外加入一些差值的霍夫曼码值,例如亮度差值为5(101)的位数为3,则霍夫曼码值应该是100,两者连接在一起即为100101。下列两份表格分别是亮度和色度DC差值的编码表。根据这两份表格内容,即可为DC差值加上霍夫曼码值,完成DC的编码工作。
AC编码 AC编码方式与DC略有不同,在AC编码之前,首先得将63个AC值按Zig-zag排序,即按照下图箭头所指示的顺序串联起来。
63个AC值排列好的,将AC系数转换成中间符号,中间符号表示为RRRR/SSSS,RRRR是指第非零的AC之前,其值为0的AC个数,SSSS是指AC值所需的位数,AC系数的范围与SSSS的对应关系与DC差值Bits数与差值内容对照表相似。 如果连续为0的AC个数大于15,则用15/0来表示连续的16个0,15/0称为ZRL(Zero Rum Length),而(0/0)称为EOB(Enel of Block)用来表示其后所剩余的AC系数皆等于0,以中间符号值作为索引值,从相应的AC编码表中找出适当的霍夫曼码值,再与AC值相连即可。 例如某一组亮度的中间符为5/3,AC值为4,首先以5/3为索引值,从亮度AC的Huffman编码表中找到1111111110011110霍夫曼码值,于是加上原来100(4)即是用来取[5,4]的Huffman编码1111111110011110100,[5,4]表示AC值为4的前面有5个零。 由于亮度AC,色度AC霍夫曼编码表比较长,在此省略去,有兴趣者可参阅相关书籍。 实现上述四个步骤,即完成一幅图像的JPEG压缩。 参考资料[1] 林福宗 《图像文件格式(上)——Windows 编程》,清华大学出版社, 1996年[2] 李振辉、李仁各编著,《探索图像文件的奥秘》,清华大学出版社,1996年[3] 黎洪松、成实译《JPEG静止数据压缩标准》,学苑出版社,1996年

希望有点帮助
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...分?普通话不好没事吧?我现在东营工作,这边有没有短期的培训... “腾马培训”的公务员面试辅导有实战模拟吗? 北京腾马顺通物流有限公司是骗人的吗?在木樨园那一带 vivonex屏幕是多大的 vivoNEX配置是怎么样的 衣服被染色了怎么能恢复? 描写关于旅行的唯美句子 关于旅行的文艺句子 旅行简短文艺句子出去玩的心情发朋友圈 麻辣捞面怎么做? 南京市有哪些私立高中 JPEG是矢量图像压缩编码标准? 请问jpg编码方式是什么? 关于JPEG压缩编码技术的解释 ps只能解码像素不超过32767的jpeg编码的图像,怎么办 JPEG是用于什么 的编码标准?静态图像还是视频图像 JPG是什么格式 JPEG编码标准的编码过程 JPEG是什么编码压缩技术 有谁知道,JPEG压缩编码算法的主要步骤 11808m是多少内存 怎样用手机设置门禁卡 360路由器手机设置 怎么把360路由器设置成第2个路由器? 怎么把360路由器设置成第2个路由器 如何用手机设置360路由器的wisp万能中继功能 两台360路由器怎么无线桥接? 手机如何设定第二个路由器 两台360p1安全路由器怎么设置 手机上怎么设置360路由器上连另一个360路由器 128mb的储存卡多大 有谁知道,JPEG压缩编码算法的主要步骤 jpeg是什么格式? jpg文件格式详细说明及编解码方法 JPEG是()图像压缩编码标准 简述JPEG静态图象压缩编码的过程及其实现技术 JPEG压缩编码中对于图像进行8×8分块:为什么不对于整个图像而是对于分块图像分别进行编码? 梦见长着白胡子的小男孩是什么预?兆 梦见生下就长有白色胡子的小男孩,请高人帮忙解一下 梦见长出白胡子,死人说不能扒 梦见陌生女孩长好多根白胡子是怎么回事? 我是出马仙梦见一个白胡,我一摸它变成了小女孩儿? 404 Not Found 梦见白胡子老人救我儿子 梦见又生个男孩 梦见白胡子白头发老人让我生孩子 梦见自己长了一根白胡子是什么意思? 我出生的头一天晚上我爸梦见一个白胡子道士给他送孩子模样跟我出生一样 梦见白胡子老人给儿子一碗饭? 手机内存卡128等于多少个g 魔兽争霸3冰封王座的完整剧情?