wmx_1919 发表于 2009-5-12 15:35

利用DCT对图像进行压缩

书上的代码敲进去 ,如下,但是结果没对,不知道为甚,枪手知道下咯

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


出错提示如下:
??? Subscripted assignment dimension mismatch.
Error in ==> blkproc at 89
aa(border(1)+(1:ma),border(2)+(1:na)) = a;
Error in ==> example2 at 12
DCTcoe=blkproc(Sig,,'P1*x*P2',T,T');

[ 本帖最后由 ChaChing 于 2009-5-14 21:19 编辑 ]

friendchj 发表于 2009-5-12 16:13

不要用 求救 这样的题目,改一下标题
把DCTcoe=blkproc(Sig,,'P1*x*P2',T,T');改成DCTcoe=blkproc(Sig(:,:,1),,'P1*x*P2',T,T');试试。
用lena图像试了试,处理的SIg应该是二维的,看一下你的Sig变量

wmx_1919 发表于 2009-5-14 12:21

利用DCT对图像进行压缩 对 图像有什么要求啊?

基于MATLAB的数字图像处理,要求用DCT对图像进行压缩,程序有了,只是运行不对,老师说跟我选的照片有关系,要根据图像的像素啊 大小啊那些来写程序,但是我又不懂,有谁能帮帮我啊!谢谢咯~~~
程序如下:
%装入原始图像
Sig=imread('G:\untitled.tif');
%设置压缩比
rat=4;
Sig=im2double(Sig);
%显示原始图像
figure(1);
imshow(Sig);
%计算离散余弦变换
%分块处理
T=dctmtx(8);
%DCTcoe=blkproc(Sig,,'P1*x*P2',T,T');
DCTcoe=blkproc(Sig(:,:,1),,'P1*x*P2',T,T');
%T和T转置是DCT函数P1*X*P2的参数
%得到DCT系数矩阵
coeVar=im2col(DCTcoe,,'distinct');
coe=coeVar;
=sort(coeVar);
%求出DCT系数排列矩阵Y的大小
=size(coeVar);
%按照压缩比保留系数
Snum=64-64/rat;
for i=1:n
    coe(Ind(1:Snum),i)=0;
end
%重新排列系数块
B2=col2im(coe,,,'distinct');
%进行余弦反变换
I2=blkproc(B2,,'P1*x*P2',T',T);
%显示压缩后的图像
figure(4);
imshow(I2);

这是书上的程序,谢谢了

[ 本帖最后由 wmx_1919 于 2009-5-14 19:39 编辑 ]

wmx_1919 发表于 2009-5-15 10:20

回复 沙发 friendchj 的帖子

恩,知道了,现在问题解决了,谢谢了!!就是图片大小没对,在程序改了下大小就OK了

tiandan_1986 发表于 2009-6-23 18:11

回复 地板 wmx_1919 的帖子

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

我运行后 大小也不同,你是怎么解决的
页: [1]
查看完整版本: 利用DCT对图像进行压缩