Main Content


Thresholds for wavelet 2-D using Birgé-Massart strategy


[THR,NKEEP] = wdcbm2(C,S,ALPHA,M)


[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 the Birgé-Massart strategy.

[C,S] is the wavelet decomposition structure of the image to be de-noised 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 ni largest coefficients are kept with ni = / (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 length of the coarsest approximation coefficients, since the previous formula leads for i = j+1, to nj+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,:))).


% Load original image.
load detfingr; 
nbc = size(map,1);

% Perform a wavelet decomposition of the image
% at level 3 using sym4.
wname = 'sym4'; lev = 3;
[c,s] = wavedec2(X,lev,wname);

% Use wdcbm2 for selecting level dependent thresholds  
% for image compression using the adviced parameters.
alpha = 1.5; m = 2.7*prod(s(1,:));
[thr,nkeep] = wdcbm2(c,s,alpha,m)

thr =
   21.4814   46.8354   40.7907
   21.4814   46.8354   40.7907
   21.4814   46.8354   40.7907

nkeep =
         624         961        1765

% Use wdencmp for compressing the image using the above
% thresholds with hard thresholding.
[xd,cxd,sxd,perf0,perfl2] = ...

% Plot original and compressed images.
subplot(221), image(wcodemat(X,nbc)),
title('Original image')
subplot(222), image(wcodemat(xd,nbc)),
title('Compressed image')
xlab1 = ['2-norm rec.: ',num2str(perfl2)];
xlab2 = [' %  -- zero cfs: ',num2str(perf0), ' %'];
xlabel([xlab1 xlab2]);


Birgé, L.; P. Massart (1997). “From model selection to adaptive estimation,” in D. Pollard (ed), Festchrift for L. Le Cam, Springer, pp. 55–88.

See Also


Introduced before R2006a