PDA

查看完整版本 : [MATLAB图像处理] 求助


blood
2010-07-08, 17:06
这个程序为什么压缩后的图像出不来?其中的压缩比和图像的像素怎么算的,每次改了压缩比应该出来新图形的!请高手帮一下,必要的话,把你载入的图发给我,我在做一下,研究一下!!

%装入原始图像
Sig=imread('G:\untitled.tif');
%设置压缩比
rat=4;
Sig=im2double(Sig);
%显示原始图像
figure(1);
imshow(Sig);
%计算离散余弦变换
%分块处理
T=dctmtx(8);
%DCTcoe=blkproc(Sig,[8 8],'P1*x*P2',T,T');
DCTcoe=blkproc(Sig(:,:,1),[8 8],'P1*x*P2',T,T');
%T和T转置是DCT函数P1*X*P2的参数
%得到DCT系数矩阵
coeVar=im2col(DCTcoe,[8,8],'distinct');
coe=coeVar;
[Y,Ind]=sort(coeVar);
%求出DCT系数排列矩阵Y的大小
[m n]=size(coeVar);
%按照压缩比保留系数
Snum=64-64/rat;
for i=1:n
coe(Ind(1:Snum),i)=0;
end
%重新排列系数块
B2=col2im(coe,[8,8],[m,n],'distinct');
%进行余弦反变换
I2=blkproc(B2,[8 8],'P1*x*P2',T',T);
%显示压缩后的图像
figure(4);
imshow(I2);

yhcode
2010-07-08, 19:26
你这个程序注释有问题,首先你要了解一个概念,什么是压缩比?压缩比是指原始数据量与压缩后数据量的比值,程序里的rate只不过是个阈值,不同的rate下DCT系数保留部分不同,如果要压缩的话,还需要对DCT系数进行编码。你这个程序在不同rate下给出的图像只不过是质量有些变化。