声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1363|回复: 4

[图像处理] 利用DCT对图像进行压缩

[复制链接]
发表于 2009-5-12 15:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

%装入原始图像
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');
%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],[256,256],'distinct');
%进行余弦反变换
I2=blkproc(B2,[8 8],'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,[8 8],'P1*x*P2',T,T');

[ 本帖最后由 ChaChing 于 2009-5-14 21:19 编辑 ]
回复
分享到:

使用道具 举报

发表于 2009-5-12 16:13 | 显示全部楼层
不要用 求救 这样的题目,改一下标题
把DCTcoe=blkproc(Sig,[8 8],'P1*x*P2',T,T');改成DCTcoe=blkproc(Sig(:,:,1),[8 8],'P1*x*P2',T,T');试试。
用lena图像试了试,处理的SIg应该是二维的,看一下你的Sig变量

评分

2

查看全部评分

 楼主| 发表于 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,[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);

这是书上的程序,谢谢了

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

评分

1

查看全部评分

 楼主| 发表于 2009-5-15 10:20 | 显示全部楼层

回复 沙发 friendchj 的帖子

恩,知道了,现在问题解决了,谢谢了!!就是图片大小没对,在程序改了下大小就OK了
发表于 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,[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');

我运行后 大小也不同,你是怎么解决的
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-30 09:23 , Processed in 0.061306 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表