dt_LAWMLShrink.m
上传用户:sla11nk8
上传日期:2013-03-09
资源大小:21k
文件大小:2k
源码类别:

其他

开发平台:

Matlab

  1. function y = dt_LAWMLShrink(x)
  2. % Local Adaptive Image Denoising Algorithm
  3. % Usage :%        y = dt_LAWMLShrink(x)
  4. % INPUT :%        x - a noisy image
  5. % OUTPUT :%        y - the corresponding denoised image
  6. % Set the windowsize and the corresponding filter
  7. windowsize  = 7;
  8. windowfilt = ones(1,windowsize)/windowsize;
  9. % Number of Stages
  10. J = 6;
  11. I=sqrt(-1);
  12. % symmetric extension
  13. L = length(x); % length of the original image.
  14. N = L+2^J;     % length after extension.
  15. x = symextend(x,2^(J-1));
  16. % Forward dual-tree DWT
  17. % Either FSfarras or AntonB function can be used to compute the stage 1 filters  
  18. [Faf, Fsf] = FSfarras;
  19. %[Faf, Fsf] = AntonB;
  20. [af, sf] = dualfilt1;
  21. W = cplxdual2D(x, J, Faf, af);
  22. %W = normcoef(W,J,nor);%-------------------------
  23. % Noise variance estimation using robust median estimator..
  24. tmp = W{1}{1}{1}{1};
  25. Nsig = median(abs(tmp(:)))/0.6745;
  26. for scale = 1:J-1
  27.     for dir = 1:2
  28.         for dir1 = 1:3            
  29.             % Noisy complex coefficients
  30.             %Real part
  31.             Y_coef_real = W{scale}{1}{dir}{dir1};
  32.             % imaginary part
  33.             Y_coef_imag = W{scale}{2}{dir}{dir1};
  34.                                    
  35.             % Signal variance estimation
  36.             Wsig = conv2(windowfilt,windowfilt,(Y_coef_real).^2,'same');%---用Gauss分布的ML估计系数方差----
  37.             Ssig = sqrt(max(Wsig-Nsig.^2,eps));          
  38.             Y_coef = Y_coef_real+I*Y_coef_imag;
  39.             
  40.             Y_coef = LAWMLShrink(Y_coef,Ssig,Nsig);
  41.             
  42.             W{scale}{1}{dir}{dir1} = real(Y_coef);
  43.             W{scale}{2}{dir}{dir1} = imag(Y_coef);
  44.             
  45.         end
  46.     end
  47. end
  48. % Inverse Transform
  49. %W = unnormcoef(W,J,nor);------------------
  50. y = icplxdual2D(W, J, Fsf, sf);
  51. % Extract the image
  52. ind = 2^(J-1)+1:2^(J-1)+L;
  53. y = y(ind,ind);