www.pudn.com > ShearLab-1.1.zip > instruction.m, change:2013-03-20,size:5980b

```
%%%%%%%%%%%%%%%%%%%%  Instruction for the shearlet transform and its inverse %%%%%%%%%%%%%%%%%%%%%%%%

%(NOTE) One of routines in this pacakge needs to be complied through MEX - 'atrousc.c' (from contourlet toolbox).
% I have included precomplied code for this for Windows XP. If your working
% platform is NOT Windows, please compile 'atrousc.c' by simply typing
% 'mex atrous.c' on matlab command mode.

%From now on, I assume that scale j = 0,1,...,L where j = 0 corresponds to low frequency and j = 1...L
%correspond to coarse to fine scales.  Also, a parameter ndir = [n(1),..n(j)...,n(L)] determines
%the number of shear parameters (number of directions) across scales j.
%For each scale j, shear parameters run k = -2^(n(j)-2)...2^(n(j)-2), which gives 2^(n(j)-1)+1 directions for each cone
%(vertical and horizontal cones).---> Total number of directions is 2*(2^(n(j)-1)+1) = 2^(n(j))+2 for each scale j.

shear=shearing_filters_Myer(m,ndir,N);
% generating shearing filters for each scale.
% shear : cell array of shearing (wedge shaped) filters where dshear{j}(:,:,k) is a shearing filter for scale
% j and shear parameter k.
% m : size of shearing filters across scales.
% m = [m(1),...,m(j),...,m(L)] ---> size of shearing filter is m(j) by m(j) at scale j.
% ndir : number of shearing filters across scales.
% ndir = [n(1),...,n(j),...,n(L)] ---> 2^(n(j))+2 shearing filters  will be produced at scale j.
%
% (NOTE) To have better frequency localization, it is recommended that m(j)
% should be divisible by 2^(n(j)-1)+1 and m(j) <= N (size of the input image).
% For examle, ndir = [3 3 4 4] --->
% m = [5*(any positive integer), 5*(any positive integer), 9*(any positive integer), 9*(any positive integer)] where
% all entries m(j) <= N.
%
% N : size of the input image (N by N).
%
% For example, 'shear=shearing_filters_Myer([70 70 9*17 9*17],[3 3 4 4],512)' will produce
% 10 shearing filters (70 by 70) at scale j = 1 (coarse scale) ---> shear{1}(:,:,k) where k = 1,...,10.
% 10 shearing filters (70 by 70) at scale j = 2 ---> shear{2}(:,:,k) where k = 1,...,10.
% 18 shearing filters (153 by 153) at scale j = 3 ---> shear{3}(:,:,k) where k = 1,...,18.
% 18 shearing filters (153 by 153) at scale j = 4 (fine scale) ---> shear{4}(:,:,k) where k = 1,...,18.

E = com_norm(pfilt,size(img),shear);
% E : l^2 norm of shearlet for each scale j and shear parameter k --->
%     each entry of the output matrix E is given by E(j,k).
% pfilt : name of LP filter ---> simply set 'pfilt = 'maxflat' (or '9-7').
% size(img) : size of the input image where 'img' is the input image.
% shear : shearing filters obtained by 'shearing_filters_Myer'.

d=shear_trans(img,pfilt,shear); %forward shearlet transform.
% d : cell array of the shearlet coefficients.
% With N by N input image and shearing filters 'shear' obtained as above, we have
% d{0} : low frequency part N by N
% d{1} : 2^(n(1))+2 arrays (N by N) of the shearlet coefficients for shear parameters
%        k = -2^(n(1)-1)...2^(n(1)-1) and scale j = 1 (coarse scale).
% ....
% d{L} :  2^(n(L))+2 arrays (N by N) of the shearlet coefficients for shear parameters
%        k = -2^(n(L)-1)...2^(n(L)-1) and scale j = L (fine scale).
%
% Here, each entry of d is given by d{j}(n1,n2,k) ---> j : scale, k : shear parameter,
% and n1&n2 : translation.
%
% img : input image (N by N).
% pfilt : name of LP filter ---> simply let pfilt = 'maxflat' or pfilt = '9-7'.
% shear : shearing filters obtained as above.

c = thresh(d,lambda,2,E,sc,0); % threshold the shearlet coefficients d.

% c : thresholded shearlet coeff (Hard Thresholding).
% d : shearlet coeff
% lambda & sc : thresholding parameters where lamabda can be any positive number and
% sc = [sc(0),sc(1),...sc(j),...,sc(L)] with positive entry sc(j) for each scale j .
% (NOTE) length of 'sc' should be L+1 where j = L is the finest scale and j = 0 corresonds to
% low frequency.
%
% This function performs Hard-Threshodling as follows :
% For each shearlet coefficient d{j}(n1,n2,k),
% (case 1) set d{j}(n1,n2,k) = 0 if |d{j}(n1,n2,k)|/E(j,k) < sc(j)*lambda
% (case 2) keep d{j}(n1,n2,k) if |d{j}(n1,n2,k)|/E(j,k) >= sc(j)*lambda
% Here, E(j,k) is l^2 norm of shearlet for each scale j ans shear parameter k (obtained by 'com_norm').

x = inverse_shear(c,pfilt,shear); % inverse shearlet transform.

% x : reconstructed image.
% c : shearlet coeff.
% pfilt : name of LP filter ---> simply set pfilt = 'maxflat' or '9-7'.
% shear : shearing filters obtained by 'shearing_filters_Myer'.

%%%%%%%%%%%%%%%%%% simple image denoising with the shearlet transform %%%%%%%%%%%%%%%%%%%%%%%

%Input data : 512 by 512 noisy image (gray scale 0-255) ---> nimg : 512 by 512 noisy image .
%Noise type : Gaussian noise (standard deviation is 30).

%First, compute shearing filters

shear =shearing_filters_Myer([30 30 30 30],[2 2 3 3],512);
% This produces 6 shearing filters (30 by 30) at scale j = 1
%               6 shearing filters (30 by 30) at scale j = 2
%               10 shearing filters (30 by 30) at scale j = 3
%               10 shearing filters (30 by 30) at scale j = 4

% Compute l^2 norm of shearlets
E = com_norm('maxflat',size(nimg),shear);

% NOTE) One could save precomputed 'shear' (cell array of shearing filters) and 'E' (l^2 norm of shearlets)
%       for future use

% With these pre-computed shearlet filters and l^2 of shearlets, compute the
% shearlet transform and its inverse.

d=shear_trans(nimg,'maxflat',shear);

% Hard_Thresholding

c = thresh(d,30,2,E,[3 2.6 2.6 2.6 3.5],0);
% Here, 'sc' does not have to be [3 2.6 2.6 2.6 3.5] and one can choose any other possibility.

% Image reconstruction with the thresholded coeff.

x = inverse_shear(c,'maxflat',shear);
```