matlab实现离散余弦变换压缩(JPEG压缩原理)
JPEG图像压缩算法:
输入图像被分成8*8或16*16的小块,然后对每一小块进行二维DCT(离散余弦变换)变换,变换后的系数量化、编码并传输;
JPEG文件解码量化了的DCT系数,对每一块计算二维逆DCT变换,最后把结果块拼接成一个完整的图像。在DCT变换后舍弃那些不严重影响图像重构的接近0的系数。
DCT变换的特点是变换后图像大部分能量集中在左上角,因为左上放映原图像低频部分数据,右下反映原图像高频部分数据。而图像的能量通常集中在低频部分。
实例程序:
function Jpeg
I=imread('D:\MATLAB7\toolbox\images\imdemos\cameraman.tif');
%该图片在安装matlab的目录中找,原图为灰度图象
I=im2double(I);%图像存储类型转换
T=dctmtx(8);%离散余弦变换矩阵
B=blkproc(I,[8 8],'P1*x*P2',T,T');
%对原图像进行DCT变换
mask=[1 1 1 1 0 0 0 0
1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0];
B2=blkproc(B,[8 8],'P1.*x',mask);
%数据压缩,丢弃右下角高频数据
I2=blkproc(B2,[8 8],'P1*x*P2',T',T);
%进行DCT反变换,得到压缩后的图像
imshow(I)
title('原始图像')
figure;
imshow(I2)
title('压缩后的图像')
加载中,请稍候......