DCT与DWT对图像处理的matlab仿真
数字图像处理实验报告DCT和DWT的MATLAB仿真实验目的学习DCT变换基本原理;掌握DCT变换的特性;理解DCT变换在图像图理中的应用;学习DWT变换基本原理;掌握DWT变换的特性;理解DWT变换在图像图理中的应用。实验内容及结果离散余弦变换(DCT)对lena、camenaman、bird三幅灰度图像做DCT变换。 1、lena.tif原始图像(1)lena.tif原始图像如图1-1:图1-1DCT 系数(2)对整幅图像直接进行DCT变换,得系数图如图1-2。图1-2观察系数图,会发现经过DCT变换后,能量分布不均匀,左上角低频部分系数值高,右下角高频部分系数值低,这表明图像能量主要集中在低频上。(3)为了定量分析系数能量分布情况,取系数矩阵左上角16*16个相素,计算其能量在整个矩阵中占的百分比。经计算,得能量百分比为energy_percent=96.32%。可见低频部分能量在整幅图中占的比重是非常大的。原始图像压缩后的图像(4)由以上分析可以得出,高频成分能量在图中占的比重很小,它反映的是图像的细节,因此,可丢掉高频信息,实现数据压缩。在具体实现上,对图像进行8*8分块DCT变换,并只保留每个分块系数左上角10个系数(共64个系数),重构图像并对比。对比如图1-3。图1-3对比原图和压缩后的图像,可以看出,保留10个像素值重构图像仍然较好,视觉效果可以接受。计算原始图像和压缩后的图像的峰值信噪比(PSNR),得PSNR=+35.01 dB。2、cameraman.tifCameraman和bird的DCT变换处理方式与lena基本相同,因此对于这两幅图像只附上其处理结果,具体过程及对结果分析不再赘述。原始图像像(1)cameraman原始图像如图1-4。 图1-4DCT系数(2)系数图如图1-5。图1-5(3)计算左上角16*16个像素的能量分布百分比,得energy_percent=94.83%。原始图像压缩后的图像(4)对比原始图像和压缩后的图像,如图1-6。图1-6计算峰值信噪比,得PSNR=+33.79 dB。3、bird.tif原始图像(1)bird原始图像如图1-7。图1-7(2)系数图如图1-8。DCT系数图1-8(3)计算左上角16*16个像素的能量百分比,得energy_percent=97.19%。原始图像压缩后的图像(4)对比原如图像和压缩后的图像,如图1-9。图1-9计算峰值信噪比,得PSNR=+33.91 dB。二、离散小波变换(DWT)仍然采用lena、cameraman、bird这三幅图像进行离散小波变换。采用的小波为哈尔小波(haar)。1、lena.tif原始图像(1)lena的原始图像如下图2-1。图2-1近似值系数水平细节系数垂直细节系数对角细节系数(2)对图像进行一级分解,图像被分解为2*2个空间分布的小波系数:近似值系数、水平细节系数、垂直细节系数和对角细节系数。如图2-2。观察对比这4个子带,小波系数的分布特点是越往低频子带系数值越大,包涵的图像信息越多,对视觉比较重要,如近似值系数。越往高频子带系数值越小,包涵的图像信息越少,对视觉来说不太重要。因此,可只保留低频子带,从而实现图像压缩。(3)计算系数能量比。保留低频子带系数,计算其占的能量百分比为energy_percent=99.50%。可见,低频子带占了绝大部分能量。原始图像重构图像(4)用低频子带系数重构图像,并与原图像对比,如下所示。图2-3将由低频子带重构的图像与原图像对比,可以发现视觉效果非常好,计算两幅图的峰值信噪比,得PSNR=+34.99 dB。2、cameraman.tif对于cameraman和bird两幅图像,只附上实验结果,具体过程不再赘述。原始图像像(1)caemraman原始图像如图2-4。图2-4近似值系数水平细系数垂直细节系数对角细节系数(2)一级分解各子带如图2-5。图2-5(3)计算低频子带系数能量比,得energy_percent=98.98%。(4)对比原始图像和重构图像,如下图2-6所示。原始图像重构图像图2-6计算峰值信噪比,得PSNR=+34.63 dB。3、bird.tif原始图像(1)bird原始图像如下图2-7所示。图2-7(2)一级分解各子带系数如图2-8所示。近似值系数水平细节系数垂直细节系数对角细节系数图2-8(3)计算低频子带系数能量比,得energy_percent=99.235。原始图像重构图像(4)对比原始图像和重构图像,如下图2-9所示。图2-9计算峰值信噪比,得PSNR=+34.06 dB。附录1 DCT源代码clear;clc%读取并显示原图像i1=imread('lena.tif'); %其他两幅图像需将此处改为cameraman.tif和bird.tiffigure(1);imshow(i1);title('原始图像') %进行DCT变换并显示DCT系数图j=dct2(i1);figure(2);imshow(log(abs(j),);title('DCT 系数');colormap(jet(64); %分析DCT系数能量分布情况a=zeros(size(i1);a(1:16,1:16)=1;e1=(abs(j).*a).2;e2=abs(j).2;c1=sum(sum(e1,1),2);c2=sum(sum(e2,1),2);energy_percent=c1/c2 %对图像进行分块DCT变换fun1=dct2;k=blkproc(i1,8 8,fun1);%数据压缩,丢弃高频数据T=1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; l=blkproc(k,8 8,'P1.*x',T); fun2=idct2; i2=blkproc(l,8 8,fun2); %对比原始图像与压缩后的图像,并求panr i2=(i2)/255; i2=im2uint8(i2); figure(3); subplot(1,2,1);imshow(i1);title('原始图像'); subplot(1,2,2);imshow(i2);title('压缩后的图像'); psnr(i1,i2);附录2 DWT源代码clear%读取并显示原始图像a=imread('lena.tif'); %其他两幅图像需将此处改为cameraman.tif和bird.tiffigure(1);imshow(a);title('原始图像') %进行一级小波变换;采用haar小波w='haar'ca1,ch1,cv1,cd1=dwt2(a,w);a1=upcoef2('a',ca1,w,1);h1=upcoef2('h',ch1,w,1);v1=upcoef2('v',cv1,w,1);d1=upcoef2('d',cd1,w,1); %显示各部分系数figure(2);subplot(2,2,1);imshow(a1,);title('近似值系数')subplot(2,2,2);imshow(ch1,0,30);title('水平细节系数')subplot(2,2,3);imshow(cv1,0,30);title('垂直细节系数')subplot(2,2,4);imshow(cd1,0,30);title('对角细节系数') %计算系数能量分布情况m=abs(a1).2;n=abs(a1.2+h1.2+v1.2+d1.2);energy_percent=sum(sum(m,1),2)/sum(sum(n,1),2) %只保留近似值系数,对比原始图像和重构的图像a1=(a1)/255;a1=im2uint8(a1);figure(3);subplot(1,2,1);imshow(a);title('原始图像')subplot(1,2,2);imshow(a1);title('重构图像')psnr(a,a1);附录3 PSNR计算函数function psnr=psnr(a,b)c=b-a;MSE=mean(mean(c.2);psnr=10*log10(2552/MSE);disp(sprintf('PSNR=+%5.2f dB',psnr);17