gusucode.com > 二进小波和非线性变换的图像增强matlab源码程序 > MyDWT2.m

    function [ALL,ALH,AHL,AHH] = MyDWT2(A,h,g)
%   MyDWT2 Single-level discrete 2-D wavelet transform.
%   DWT2 performs a single-level 2-D wavelet decomposition
%   with respect to wavelet filters (h g).
%
%   [CA,CH,CV,CD] = DWT2(X,Lo_D,Hi_D) computes the 2-D wavelet
%   decomposition as above given these filters as input:
%   h is the decomposition low-pass filter.
%   g is the decomposition high-pass filter.
%   h and g must be the same length.
%
%   size(ALL) = size(ALH) = size(AHL) = size(AHH) = 1/2 Size(A)


lh = length(h);lg = length(g);
sA = size(A);s1 = sA(1,1); s2 = sA(1,2);
sizeEXTh = (lh-1)/2; sizeEXTg=(lg-1)/2;
sizeKEPT = 2*ceil(sA/2);

%对A作周期延拓:边界两边分别增加sizeEXTh行和sizeEXTg列,对原图象分别用h,g作行滤波,得到AL和AH

y = wextend('2D','per',A,[0,sizeEXTh]);
AL = wconv('row',y,h); 
AL = wkeep(AL,sA);%figure,imshow(AL/256);
y = wextend('2D','per',A,[0,sizeEXTg]);
AH = wconv('row',y,g); 
AH = wkeep(AH,sA); 

%对行变换的结果AL和AH再分别用h,g作列变换,得到
y = wextend('2D','per',AL,[sizeEXTh,0]);
ALL = wconv('col',y,h);ALL = wkeep(ALL,sizeKEPT);
y = wextend('2D','per',AL,[sizeEXTg,0]);
ALH = wconv('col',y,g);ALH = wkeep(ALH,sizeKEPT);% x方向的高频细节
y = wextend('2D','per',AH,[sizeEXTh,0]);
AHL = wconv('col',y,h);AHL = wkeep(AHL,sizeKEPT);% y方向的高频细节
y = wextend('2D','per',AH,[sizeEXTg,0]);
AHH =wconv('col',y,g);AHH = wkeep(AHH,sizeKEPT);

ALL = dyaddown(ALL,'c',1);%取偶数列
ALL = dyaddown(ALL,'r',1);%取偶数行
ALH = dyaddown(ALH,'c',1);
ALH = dyaddown(ALH,'r',1);%
AHL = dyaddown(AHL,'c',1);%
AHL = dyaddown(AHL,'r',1);
AHH = dyaddown(AHH,'c',1);%
AHH = dyaddown(AHH,'r',1);%