|
回复 地板 wmx_1919 的帖子
如果直接运行%装入原始图像
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],[64,64],'distinct');
%进行余弦反变换
I2=blkproc(B2,[8 8],'P1*x*P2',T',T);
%显示压缩后的图像
figure(4);
imshow(I2);
会出错。。
应改为:
B2=col2im(coe,[8,8],[m,n],'distinct');
我运行后 大小也不同,你是怎么解决的 |
|