由于图像是二维信号,二维小波变换应用到图像处理的基本思路是把小波变换有一维推广到二维。
下面是离散二维(harr)小波变换MATLAB代码的实现:
clear;clc;
%%%%%%%%%%测试图像只能是方形图像,长宽像素一样。
f=imread('Lena.jpg');%%读取图像数据,图像在当前所在的路径下
d=size(f);
if length(d)>2
f=rgb2gray((f));%%%%%%%%如果是彩色图像则转化为灰度图
end
T=d(1);
SUB_T=T/2;
% 2.进行二维小波分解
l=wfilters('db10','l'); % db10(消失矩为10)低通分解滤波器冲击响应(长度为20)
L=T-length(l);
l_zeros=[l,zeros(1,L)]; % 矩阵行数与输入图像一致,为2的整数幂
h=wfilters('db10','h'); % db10(消失矩为10)高通分解滤波器冲击响应(长度为20)
h_zeros=[h,zeros(1,L)]; % 矩阵行数与输入图像一致,为2的整数幂
for i=1:T; % 列变换
row(1:SUB_T,i)=dyaddown( ifft( fft(l_zeros).*fft(f(:,i)') ) ).'; % 圆周卷积<->FFT
row(SUB_T+1:T,i)=dyaddown( ifft( fft(h_zeros).*fft(f(:,i)') ) ).'; % 圆周卷积<->FFT
end;
for j=1:T; % 行变换
line(j,1:S