实验三 基于DCT编码的JPEG压缩
来源:互联网 发布:基础c语言代码实例 编辑:程序博客网 时间:2024/06/07 14:35
一. 实验目的与要求
1. 进一步熟悉DCT的概念和原理;
2. 利用DCT变换编码方法进行图像压缩,提高信息传输的有效性及通信质量。
3. 掌握对灰度和彩色图像作离散余弦变换和反变换的方法;
4. 能选择适当的量化间隔、阈值和区域进行编码;
二、实验环境
Windows+matlab
三、实验原理
变换编码是通过变换来解除或减弱信源符号间的相关性,再将变换后的样值进行量化,或采用对于独立信源符号的编码方法,以达到压缩码率的目的。离散余弦变换(DCT for Discrete Cosine Transform)是与傅里叶变换相关的一种变换,它类似于离散傅里叶变换(DFT for Discrete Fourier Transform),但是只使用实数基于DCT(离散余弦变换)压缩编码算法是有失真的压缩编码,如图1-1为DCT变换编码原理图。
在编码过程中,首先将输入图像分解为8×8大小的数据块,然后用正向二维DCT把每个块转变成64个DCT系数值,其中左上角第一个数值是直流(DC)系数,即8×8空域图像子块的平均值,其余的63个是交流(AC)系数,接下来对DCT系数进行量化,最后将变换得到的量化的DCT系数进行编码和传送,这样就完成了图像的压缩过程。
四、实验内容和步骤
1. 随机选取一整幅图像进行DCT变换,编写程序显示灰度图像、反余弦变换恢复图、DCT变换图、余弦变换系数图、变换谱三维彩色图。该方法出发点是对整幅图像进行DCT变换,主要应用MATLAB的图像处理工具箱中的基于FFT的有大量输入的快速算法进行处理的dct2函数。
clcclearA=imread('D:\x.jpg');I=rgb2gray(A);DCT=dct2(I); %余弦变化DCT(abs(DCT)<10)=0; %把变换矩阵中小于10的值置换为0,然后用idct2重构IDCT=idct2(DCT);subplot(2,2,1),imshow(I);title('灰度图像')subplot(2,2,2),imshow(IDCT,[0 255]);title('反余弦变换恢复图')subplot(2,2,3),imshow(DCT);title('DCT变换')subplot(2,2,4),imshow(log(abs(DCT)),[]);title('余弦变换系数');figure,mesh(DCT);title('变换谱三维彩色图')
- 随机选取一幅图像先将图像分解为8*8或16*16个数据块,然后分别对分解后的每个数据小方块进行DCT变换。编写程序,对图像进行压缩,参考程序如下所示。该方法的出发点是先将图像分解为8*8或16*16个数据块,然后分别对分解后的每个数据小方块进行DCT变换,主要应用MATLAB的图像处理工具箱中dctmtx函数返回DCT变换矩阵,而后进行相关处理。
clcclearA=imread('D:\x.jpg');I=rgb2gray(A);I=im2double(I);%将图像转换为双精度格式T=dctmtx(8);%返回一个8*8的DCT变换矩阵B=blkproc(I,[8 8],'P1*x*P2',T,T');%对原图像进行DCT变换mask=[0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1];%保留了10个DCT系数重构图像B2=blkproc(B,[8 8],'P1.*x',mask);%数据压缩,丢弃右下角高频数据I2=blkproc(B2,[8 8],'P1*x*P2',T',T);%进行DCT反变换,得到压缩后的图像subplot(1,2,1),imshow(I)title('原始图像')subplot(1,2,2),imshow(I2)title('压缩图像1')disp('压缩后图像I2的大小');whos('I2');disp('压缩前图像A的大小');whos('A');disp('压缩后图像I的大小');whos('I');
五、实验结果与分析
1.分析“反余弦变换恢复图”与原始图像的区别,分析DCT系数的分布规律,列出实验结果。
2. 分别列出保留左上角3、10、32、54个DCT系数的压缩图像,分析其压缩效果。列出左上角3、10个DCT系数为0其他数据为1的压缩图像,分析其实验结果。
- 实验三 基于DCT编码的JPEG压缩
- 基于DCT的JPEG图像压缩编码过程及举例
- 基于DCT变换的数字图像分层压缩编码
- 基于Matlab的DCT(离散余弦变换)的JPEG图像压缩
- JPEG压缩过程 DCT算法
- JPEG压缩原理(DCT)
- JPEG的DCT压缩原理,谁能通俗易懂解释一下?
- JPEG编码中的DCT与量化
- 图象的压缩编码,JPEG压缩编码标准-续
- 基于JPEG压缩编码的数据压缩算法的研究与实现
- jpeg图像的压缩编码与解码
- VS2010实现opencv基于DCT的图像压缩
- 基于DCT的图像压缩及Matlab实现
- VS2010实现opencv基于DCT的图像压缩
- JPEG压缩编码过程
- JPEG压缩编码过程
- JPEG压缩编码过程
- JPEG压缩编码算法
- c++控制台程序实现定时器
- 多数据源 读写分离
- Linux环境下使用eclipse开发C++动态链接库程序
- 使用Android Studio 查找并删除无用的资源文件(包括drawable里面)
- Linux改变文件属性与权限命令
- 实验三 基于DCT编码的JPEG压缩
- BTree,B-Tree,B+Tree,B*Tree都是什么
- C++11 threads, locks and condition variables
- 关于抽象类的使用方法
- 欢迎使用CSDN-markdown编辑器
- c++调用python
- log4j
- 对于概率论数字特征的理解
- 南宁市二手房铁路公积金贷款流程(二)