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);%