www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/wdcbm2.m

    function [thr,nkeep] = wdcbm2(c,s,alpha,m)
%WDCBM2 Thresholds for wavelet 2-D using Birge-Massart strategy.
%   [THR,NKEEP] = WDCBM2(C,S,ALPHA,M) returns level-dependent 
%   thresholds THR and numbers of coefficients to be kept NKEEP,
%   for de-noising or compression. THR is obtained using a wavelet 
%   coefficients selection rule based on Birge-Massart strategy.
%
%   [C,S] is the wavelet decomposition structure of the image
%   to be denoised or compressed, at level j = size(S,1)-2.
%   ALPHA and M must be real numbers greater than 1.  
%
%   THR is a matrix 3 by j, THR(:,i) contains the level
%   dependent thresholds in the three orientations
%   horizontal, diagonal and vertical, for level i.
%   NKEEP is a vector of length j, NKEEP(i) 
%   contains the number of coefficients to be kept at level i. 
%
%   j, M and ALPHA define the strategy:
%   - at level j+1 (and coarser levels), everything is kept.
%   - for level i from 1 to j, the n_i largest coefficients
%   are kept with n_i = M/(j+2-i)^ALPHA. 
%
%   Typically ALPHA = 1.5 for compression and ALPHA = 3 for de-noising.
%   A default value for M is M = prod(S(1,:)) the number of 
%   the coarsest approximation coefficients, since the previous 
%   formula leads for i = j+1, to n_(j+1) = M = prod(S(1,:)).
%   Recommended values for M are from prod(S(1,:)) to 6*prod(S(1,:)).
%
%   WDCBM2(C,S,ALPHA) is equivalent to WDCBM2(C,S,ALPHA,PROD(S(1,:))). 
%
%   See also WDENCMP, WPDENCMP.

%   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 25-Apr-98.
%   Last Revision: 20-Dec-2010.
%   Copyright 1995-2010 The MathWorks, Inc.

% Check arguments.
nbIn = nargin;
if nbIn < 3
    error(message('Wavelet:FunctionInput:NotEnough_ArgNum'));
end
if errargt(mfilename,alpha-1,'rep'),
    error(message('Wavelet:FunctionArgVal:Invalid_ArgVal'));
end
if nbIn==4
    if errargt(mfilename,m-1,'rep')
        error(message('Wavelet:FunctionArgVal:Invalid_ArgVal'));
    end
else
    m = prod(s(1,:));
end
m = max(m,1);
J = size(s,1)-2;   % low frequency cutoff. 
thr = zeros(3,J);  
nkeep = zeros(1,J);  

% Wavelet coefficients selection.
for j=1:J
    % number of coefs to be kept.
    n = m/(J+2-j)^alpha;   
    n = min(round(n),prod(s(J-j+2,:)));
    % thresholds.
    if n == prod(s(J-j+2,:))
        thr(:,j) = zeros(3,1);
    else
        d = detcoef2('compact',c,s,j);
        d = sort(abs(d));
        thr(:,j) = ones(3,1)*d(end-n);
    end
    nkeep(j) = n;
end
if size(s,2)>2  % for true color images.
    nkeep = 3*nkeep;
end