www.pudn.com > whmt1.rar > hdenoise.m
function [y]=hdenoise(x,h,option,ES,PS,MU,SI,type)
% function [y]=hdenoise(x,h,option,ES,PS,MU,SI,type)
%
% Author: H. Choi
% Last modified 12/22/1998
%
% WARNING: this function uses mdwt(), midwt() functions
% in the Rice Wavelet Matlab Toolbox
% Installation of Rice Wavelet Toolbox recommened.
% Or, you need to have mdwt() and midwt() routines
% that produce 2-D DWT in the same format.
% (See README file included in the package)
%
% input:
% x : noisy image
% normalization of pixel values to [0,1] recommended
% to avoid numerical overflow in HMT training.
%
% h : wavelet filter
% option : length 3 vector (optional)
% option(1) : epsilon : convergence test threshold for training
% (default = 1e-4)
% option(2) : M : number of mixture densities (default = 2)
% option(3) : level
% (default = 5 if x is larger than 256x256)
% (maximum possible value otherwise)
% option(4) : Whether to save trained HMT model
% 0 -> do not save model
% 1 -> save ES,PS,MU,SI as hmtmodel.mat
%
% ES, PS, MU, SI : HMT model parameters (optional)
% if omitted, HMT training is performed to obtain
% parameters. If these are provided, option argument
% is required (set it to [] for default.
% Other incomplete specification of option
% resorts to default values.)
%
% type : type of HMT model specified by ES,PS,MU,SI
% 0 -> the model is for noiselss image
% 1 -> the model is for noisy image (default)
%
% output: y (denoised image)
%
% Examples:
% (1) y=hdenoise(x,h);
% denoise image x using wavelet filter h with full HMT
% training with 2 state mixture and default level and epsilon.
%
% (2) y=hdenoise(x,h,option);
% same as (1) except using epsilon, M, level specified by option.
%
% (3) y=hdenoise(x,h,option,ES,PS,MU,SI);
% denoise image x using HMT model specified by ES,PS,MU,SI
% the first two arguments of option are ignored. HMT model
% is for noisy image.
%
% (4) y=hdenoise(x,h,[],ES,PS,MU,SI);
% denoise image x using HMT model specified by ES,PS,MU,SI
% using default value for level. The model is for noisy image
%
% (5) y=hdenoise(x,h,[],ES,PS,MU,SI,0);
% denoise image x using HMT model specified by ES,PS,MU,SI
% using default value for level. The model is for noiseless
% image.
if (nargin <2)
error('You should provide at least two arguements: x and h');
end;
if (nargin >3 & nargin < 7)
error('Insufficient number of input arguments');
end;
if (nargin < 8)
type = 1;
end;
w = Idwt2(x,h); %compute wavelet transform
P = size(x,1);
level = log2(P);
if (level>8)
tmp = 4;
else
tmp = 1;
end;
if (nargin < 4) % HMT not specified
if (nargin < 3) %option not specified. use default values
option = [1e-4 2 tmp 0];
end;
% if option is incompletely specified, used default values
[nx ny]=size(option);
if (nx*ny ~= 4)
option = [1e-4 2 tmp 0];
end;
% train HMT model to obtain ES,PS,MU,SI
disp('Please wait: this step takes 15+ minutes for 512x512 images');
[ES,PS,MU,SI]=hmttrain(w,option(2),option(1));
if (option(4) == 1)
save hmtmodel ES PS MU SI;
end;
end;
%incomplete option resorts to default setting
[nx ny]=size(option);
if (nx*ny ~= 4)
option = [1e-4 2 tmp 0];
end;
%denoise image
if (type)
[yw]=hmtdeno(w,option(3),ES,PS,MU,SI);
else
[yw]=hmtdeno0(w,option(3),ES,PS,MU,SI);
end;
y = Iidwt2(yw,h);