barryyan2007
2009-02-05, 11:22
我所用的是wdencmp函数对图像进行压缩,但是根据所写的程序,生成的图像只有一些小点,程序如下:
load whale
whos;
subplot(1,2,1);
image(X);
colormap(map);
title('原始图像');
%用db3小波对图像X进行2层分解
[c,l]=wavedec2(X,2,'db3');
%全局阈值
[thr,sorh,keepapp]=ddencmp('cmp','wv',X);
%压缩处理:对所有高频系数进行同样的阈值量化处理
[Xcmp,cxc,lxc,perf0,perfl2]=wdencmp('gbl',c,l,'db3',2,thr,sorh,keepapp);
%在这里将double型的Xcmp转为uint8型的X4
X4=im2uint8(Xcmp);
%将压缩后的图像与原始图像比较
subplot(1,2,2);
image(X4);
colormap(map);
title('压缩后的图像');
%显示相关系数
disp('小波分解系数中为0的系数个数百分比');
perf0
disp('压缩后保留能量百分比');
perfl2
当中有一段程序如下
%在这里将double型的Xcmp转为uint8型的X4
X4=im2uint8(Xcmp);
%将压缩后的图像与原始图像比较
subplot(1,2,2);
image(X4);
本来书上是直接
subplot(1,2,2);
image(Xcmp);
这样的话图像显示为马赛克,我想可能是double型的缘故,所以我将它改为和原始图像一样的uint8型,但是结果还是现实很多小点点,没能压缩,我从command window看到只有X和X4是uint8型,其他都是double型,难道都要改成一致?还望高手指教,哪里出现问题,谢谢。
load whale
whos;
subplot(1,2,1);
image(X);
colormap(map);
title('原始图像');
%用db3小波对图像X进行2层分解
[c,l]=wavedec2(X,2,'db3');
%全局阈值
[thr,sorh,keepapp]=ddencmp('cmp','wv',X);
%压缩处理:对所有高频系数进行同样的阈值量化处理
[Xcmp,cxc,lxc,perf0,perfl2]=wdencmp('gbl',c,l,'db3',2,thr,sorh,keepapp);
%在这里将double型的Xcmp转为uint8型的X4
X4=im2uint8(Xcmp);
%将压缩后的图像与原始图像比较
subplot(1,2,2);
image(X4);
colormap(map);
title('压缩后的图像');
%显示相关系数
disp('小波分解系数中为0的系数个数百分比');
perf0
disp('压缩后保留能量百分比');
perfl2
当中有一段程序如下
%在这里将double型的Xcmp转为uint8型的X4
X4=im2uint8(Xcmp);
%将压缩后的图像与原始图像比较
subplot(1,2,2);
image(X4);
本来书上是直接
subplot(1,2,2);
image(Xcmp);
这样的话图像显示为马赛克,我想可能是double型的缘故,所以我将它改为和原始图像一样的uint8型,但是结果还是现实很多小点点,没能压缩,我从command window看到只有X和X4是uint8型,其他都是double型,难道都要改成一致?还望高手指教,哪里出现问题,谢谢。