DCT与DWT对图像处理的matlab仿真
精品文档---下载后可任意编辑 DCT和DWT的MATLAB仿真 实验目的 学习DCT变换基本原理; 掌握DCT变换的特性; 理解DCT变换在图像图理中的应用; 学习DWT变换基本原理; 掌握DWT变换的特性; 理解DWT变换在图像图理中的应用。 实验内容及结果 离散余弦变换(DCT) 对lena、camenaman、bird三幅灰度图像做DCT变换。 原始图像 (1)l图1-1: 图1-1 DCT 系数 (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。 Cameraman和bird的DCT变换处理方式与lena基本相同,因此对于这两幅图像只附上其处理结果,具体过程及对结果分析不再赘述。 原始图像像 (1)cameraman原始图像如图1-4。 图1-4 DCT系数 (2)系数图如图1-5。 图1-5 (3)计算左上角16*16个像素的能量分布百分比,得 energy_percent=94.83%。 原始图像 压缩后的图像 (4)对比原始图像和压缩后的图像,如图1-6。 图1-6 计算峰值信噪比,得 PSNR=+33.79 dB。 原始图像 (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的原始图像如下图2-1。 图2-1 近似值系数 水平细节系数 垂直细节系数 对角细节系数 (2)对图像进行一级分解,图像被分解为2*2个空间分布的小波系数:近似值系数、水平细节系数、垂直细节系数和对角细节系数。如图2-2。 观察对比这4个子带,小波系数的分布特点是越往低频子带系数值越大,包涵的图像信息越多,对视觉比较重要,如近似值系数。越往高频子带系数值越小,包涵的图像信息越少,对视觉来说不太重要。因此,可只保留低频子带,从而实现图像压缩。 (3)计算系数能量比。保留低频子带系数,计算其占的能量百分比为 energy_percent=99.50%。 可见,低频子带占了绝大部分能量。 原始图像 重构图像 (4)用低频子带系数重构图像,并与原图像对比,如下所示。 图2-3 将由低频子带重构的图像与原图像对比,可以发现视觉效果非常好,计算两幅图的峰值信噪比,得 PSNR=+34.99 dB。 对于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。 原始图像 (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 ); figure(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 ); figure(1);imshow(a);title( 原