DCT变换浅析-应用于图像压缩
来源:互联网 发布:点赞数据库 编辑:程序博客网 时间:2024/06/03 17:59
http://blog.csdn.net/timebomb/article/details/5996225
DCT实际就是把信号源的数据内容转换到另一种信号空间,在这种新的信号空间中更加容易理解、编码压缩。并且能够逆变换会原来的数据。
具体原理如图:
其中我们有时候是用0---(N-1)的,但是一般图像都是已8*8为块结构的,图像处理单元是块,所以这里就直接用的0---7.8*8产生64个信源数据,进行DCT变换后产生64个系数F(u,v)---一般资料介绍的64系数一直让我不明白终于知道怎么回事了,公式可以转化为矩阵形式,如上图中的矩阵形式公式所示,
所以一般就产生了变换矩阵T如下图:
如果信源数据S为:
则将变换矩阵与信源数据相乘,得到64系数
结果:
这里公式应该是Y = T*S*T'
很明显的可以发现问题,信号源的数据相差不大,可以参看第二个图,相差无几。但是在64系数中(第四个图)发现了较大的差距,(u,v)较小的时候相差很大当u,v逐渐变大的时候相差却变的越来越小。看DCT的原理图(第一个图),u,v都是在cos中的,所以他可以控制函数的周期的(系数的倒数是周期),周期的倒数就是频率。在第四个图中因为是矩阵,所以越靠近左上角的u,v越小,相应的周期越大,则频率越低。所以说左上角的代表的是低频部分,右下角代表的是高频部分。可以看出高频部分变化小,可以量化掉,进行失真量化,因为对图像的影响小嘛,进行量化。
量化后:
然后采用什么游程编码啊,“之”字形的具体使用的字节就少了。起到了压缩的作用,当解码后,虽然有一定的失真,但是大的方面变化不大。
具体的量化原理理解与解释可以参见下图:
a图是对残差图像进行的统计,横轴为残差值,纵轴为残差值为x的点数,可以看到,大部分的预测都是比较好的接近了原始数据(因为大部分擦差值集中在0的附近)。如果单纯的这样对残差图像进行编码需要2的9次方(因为有500多个差值么)个即需要9bit,但是统计发现集中在-10~5的差值占了总体的95%以上,所以可以进行合理的分解,-10~5分别分配一个数值,剩下的左边一个右边一个(说的是C图,b图示等分的),一共需要16个(我觉得是17个呢,但反正少了)也就是4个bit就可以解决问题了,充分证明了压缩的功效。
- DCT变换浅析-应用于图像压缩
- 图像压缩-从DCT到小波变换
- DCT变换在图像压缩中的实现
- 【opencv】【图像压缩】opencv下的DCT变换压缩图像
- 图像DCT变换
- 二维图像的DCT变换
- matlab实现图像DCT变换
- 图像变换(离散余弦变换DCT)
- OpenCV实现基于8*8块DCT变换的图像压缩
- 基于Matlab的DCT(离散余弦变换)的JPEG图像压缩
- MATLAB应用于图像压缩编码
- OpenCV 区域编码和阈值编码实现图像压缩(8*8DCT变换,保留50%的系数)
- 图像压缩-从DCT到小波: 纵览
- DCT简单图像压缩的OpenCV实现
- 仿射变换应用于图像匹配
- DCT变换
- DCT变换
- DCT变换
- MATLAB特征提取代码
- 马士兵JAVA学习路线图(二) 数据库与web篇
- 调试Release发布版程序的Crash错误(转)
- Linux与Windows中map类erase方法的差异
- oracle设置自动增长列
- DCT变换浅析-应用于图像压缩
- (总结)Nginx配置文件nginx.conf中文详解GOOD
- Intent中的四个重要属性——Action、Data、Category、Extras
- qml sql Offline Storage
- linux 修改UART0为正常的UART
- ORACLE (不同用户)(不同表)数据导出和导入
- 杂的
- 数据库性能优化杂谈
- oracle中将number类型毫秒值转为时间类型