目录
图像压缩与解压缩是一种重要的技术,可以有效地减少图像数据的存储空间和提高传输效率。二维小波变换是一种常用的图像压缩技术,它可以将图像转换为多尺度的小波系数,其中低频分量包含图像的大部分能量,而高频分量则包含图像的细节信息。通过对这些小波系数进行编码和传输,可以实现图像的压缩。解压缩时,通过对接收到的数据进行解码,并重构出原始图像。
1.二维小波变换
二维小波变换是一种频域变换方法,它将图像分解成多个频段,每个频段都对应着图像的一个特定方向上的局部特征。通过对这些频段的小波系数进行编码和传输,可以实现图像的压缩。具体来说,二维小波变换将图像分解成四个子带:水平低频子带、垂直低频子带、对角线低频子带和三个高频子带(水平高频子带、垂直高频子带、对角线高频子带)。其中,低频子带包含图像的大部分能量,而高频子带则包含图像的细节信息。
在进行图像压缩时,需要对这些小波系数进行编码和传输。一种常用的方法是采用离散余弦变换(DCT)对小波系数进行进一步变换,并对变换后的系数进行量化,从而得到一组近似的小波系数。这些近似的小波系数可以用来重构出原始图像。解压缩时,需要对接收到的数据进行解码,并重构出原始图像。具体来说,首先需要对接收到的数据进行解码,得到一组近似的小波系数;然后,利用这些近似的小波系数进行逆变换,得到重构的图像。
二维小波变换的基本原理如下:
小波变换是可逆的,进行小波分解得到的子图可通过组合重构原图,其实现原理如下:
二、PSNR评价图像小波变换重构后的恢复质量
PSNRPSNR全称为“Peak Signal-to-Noise Ratio”,中文意思即为峰值信噪比,是衡量图像质量的指标之一。PSNR是基于MSE(均方误差)定义,对给定一个大小为m*n的原始图像PSNR越大,表示图像恢复得越好。PSNR的计算公式如下:
总之,基于二维小波变化的图像压缩解压缩是一种有效的技术,可以实现图像的压缩和解压缩。通过对小波系数进行编码和传输和解码,可以有效地减少图像数据的存储空间和提高传输效率。PSNR是一种常用的评价图像恢复质量的指标,可以用来衡量恢复的图像质量。
三、MATLAB核心程序
小波变换:
function [dwc1,dwc2]=mydwt2(image,width,height)
dwc1=zeros(height,width);
dwc2=zeros(height,width);
h=[0.482962913145,0.836516303738,0.224143868042,-0.129409522551];
g=[-0.129409522551,-0.224143868042,0.836516303738,-0.482962913145];
image2=zeros(height,width+5);
image2(:,1)=image(:,1);
image2(:,2)=image(:,1);
image2(:,width+3)=image(:,width);
image2(:,width+4)=image(:,width);
image2(:,width+5)=image(:,width);
image2(:,3:width+2)=image(:,:);
for i=1:height
for j=1:width
sum=h(1)*image2(i,j+2)+h(2)*image2(i,j+3)+h(3)*image2(i,j+4)+h(4)*image2(i,j+5);
dwc1(i,j)=sum;
end
end
for i=1:height
for j=1:width
sum=g(1)*image2(i,j)+g(2)*image2(i,j+1)+g(3)*image2(i,j+2)+g(4)*image2(i,j+3);
dwc2(i,j)=sum;
end
end
end
3061
小波重构:
function [idwc]=myidwt2(L,H,width,height)
idwc1=zeros(height,width);
idwc2=zeros(height,width);
% h=[0.482962913145,0.836516303738,0.224143868042,-0.129409522551];
% g=[-0.129409522551,-0.224143868042,0.836516303738,-0.482962913145];
h=[-0.129409522551,0.224143868042,0.836516303738,0.482962913145];
g=[-0.482962913145,0.836516303738,-0.224143868042,-0.129409522551];
image2=zeros(height,width+3);
% image2(:,1)=L(:,1);
% image2(:,2)=L(:,1);
% image2(:,3)=L(:,1);
image2(:,1)=0;
image2(:,2)=0;
image2(:,3)=0;
image2(:,4:width+3)=L(:,:);
for i=1:height
for j=1:width
sum=h(1)*image2(i,j)+h(2)*image2(i,j+1)+h(3)*image2(i,j+2)+h(4)*image2(i,j+3);
idwc1(i,j)=sum;
end
end
image2=zeros(height,width+3);
%image2(:,1)=H(:,1);
image2(:,1)=0;
image2(:,width+2)=H(:,width);
image2(:,width+3)=H(:,width);
image2(:,2:width+1)=H(:,:);
for i=1:height
for j=1:width
sum=g(1)*image2(i,j)+g(2)*image2(i,j+1)+g(3)*image2(i,j+2)+g(4)*image2(i,3);
idwc2(i,j)=sum;
end
end
idwc=idwc1+idwc2;
end
四、MATLAB仿真结果
原图:
小波变换
小波重构
PSNR:70db