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

    
% 基于DWT的图像自适应增强 (电子学报1999.vol.27,No.9)

clear all;
% B = double(imread('LENNA.bmp'));%gray21.tiff
B = double(imread('lena.bmp'));%gray21.tiff
A = B(:,:,1);
%ff=[1,1,1;,1,1,1;1,1,1]/9;
%A = imfilter(A,ff,'replicate');
s = size(A); s1 = s(1,1); s2 = s(1,2);
figure,imshow(A/256);
%noise = randn(size(A));
%PSF = fspecial('motion',6,0);
%Blurred = imfilter(I,PSF,'circular');
%A = A + noise;

% (1) -------------对图像A作小波变换------------------------
h = sqrt(2)*[-1/8,1/4,3/4,1/4,-1/8]; %
g = sqrt(2)*[0,0,-1/4,1/2,-1/4];
%h=sqrt(2)*[0.02674876,-0.01686412,-0.07822327,0.26686412,0.6029492,0.26686412,-0.07822327,-0.01686412,0.02674876];
%g=sqrt(2)*[0.0456359,-0.02877176,-0.2956359,0.5575435,-0.2956359,-0.02877176,0.0456359];

DEPTH = 4; % 小波分解的层数
b = 0.2; c = 5; 
a = 1/(1/(1+exp(c*(b-1)))-1/(1+exp(c*(1+b))));
k = 1; ALL = A;
while (k <= DEPTH)
    [ALL,ALH,AHL,AHH] = MyDWT2(ALL,h,g);

    M = max(max(ALH)); ALH = ALH/M;
    ALH = a*(1./(1+exp(c*(b-ALH)))-1./(1+exp(c*(b+ALH))));
    ALH = M*ALH;
    
    M = max(max(AHL)); AHL = AHL/M;
    AHL = a*(1./(1+exp(c*(b-AHL)))-1./(1+exp(c*(b+AHL))));
    AHL = M*AHL;   
    
    M = max(max(AHH)); AHH = AHH/M;
    AHH = a*(1./(1+exp(c*(b-AHH)))-1./(1+exp(c*(b+AHH))));
    AHH = M*AHH;
    
    s1 = s1/2; s2 = s2/2;
    B(1:s1,1:s2) = ALL; 
    B(1:s1,s2+1:2*s2) = ALH;
    B(s1+1:2*s1,1:s2) = AHL; B(s1+1:2*s1,s2+1:2*s2) = AHH;
    
    ALH = zeros(s1,s2);
    AHL = zeros(s1,s2);AHH = zeros(s1,s2);
    
    k = k+1;
end

h1 = sqrt(2)*[1/4,1/2,1/4];
g1 = sqrt(2)*[-1/8,-1/4,3/4,-1/4,-1/8,0,0];
k = k-1;
while (k >= 1)
    if ( k==DEPTH )
        ALL = B(1:s1,1:s2);
    end
    ALH = B(1:s1,s2+1:2*s2); AHL = B(s1+1:2*s1,1:s2); AHH = B(s1+1:2*s1,s2+1:2*s2);
    ALL = MyDWT2(ALL,ALH,AHL,AHH,h1,g1);
    s1 = s1*2; s2 = s2*2;
    k = k-1;
end

A0=ALL;
figure,imshow(A0/256);