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);
%装入原始图像
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);