Débruitage en curvelet

Fermé
tchichik - Modifié par tchichik le 4/03/2012 à 22:46
Bonjour,

j'ai appliqué les paquets d'ondelettes sur l'image de huffman pour débruitage,
Ensuite j'ai essayé d'appliquer l'outil curvelet en conservant le meme seuil que je j'avais choisie avec les ondelettes pour une étude comparative.(ondelettes et curvelettes)

Le seuil que je l'ai appliqué est :
% Find default values. In this case fixed form threshold  
% is used with estimation of level noise, thresholding  
% mode is soft and the approximation coefficients are   
% kept.  

[thr,sorh,keepapp] = ddencmp('den','wv',x);  

val_thr=thr-10:0.01:thr+30;  
for i=val_thr  
% De-noise image using global thresholding option.  
xd = wdencmp('gbl',x,'bior4.4',2,i,sorh,keepapp); 



j'ai trouvé le programme de curvelet sur le net, j'ai essayé de le faire adapté à mon cas d'étude, mais je l'ai trouvé qu'il applique un autre seuil et je n'ai pas pu réussie à le faire exécuter, le code est le suivant :

X=imread('C:\Users\user\Desktop\ACTIVITEMULTI\base_originale\Hoffman.jpg');  
X=rgb2gray(X);   
X=double(X);  
% Generate noisy image.  
%init = 2055615866; randn('seed',init);   
%x = X + 15*randn(size(X));  
%bruiter l'image par un bruit gaussien  
sigma =0.05 * ( max(max(X))-min(min(X)) );  
x = X + sigma*randn(size(X));  

subplot(221), colormap gray , imagesc(X), title('Original Image')  
subplot(222), colormap gray , imagesc(x), title('Noisy Image')  

%forward curvelet transform  
disp('Take curvelet transform: fdct_usfft');  
C = fdct_usfft(x,0);  

%generate curvelet image (a complex array)  
img = fdct_usfft_dispcoef(C);  
subplot(223), colormap gray , imagesc(abs(img)), title('Curvelet Image')  

%figure;  
%colormap gray;  
%imagesc(abs(img));  

%%%%%%%%%%%%%%%%comment je vais faire pour ce seuilllllllll%%%%%%%%  

% Get threshold value  
<gras>pctg=0.1;  
cfs =[];  
for s=1:length(C)  
  for w=1:length(C{s})  
    cfs = [cfs; abs(C{s}{w}(:))];  
  end  
end  
cfs = sort(cfs); cfs = cfs(end:-1:1);  
nb = round(pctg*length(cfs));  
cutoff = cfs(nb);  

% Set small coefficients to zero  
for s=1:length(C)  
  for w=1:length(C{s})  
    C{s}{w} = C{s}{w} .* (abs(C{s}{w})>cutoff);  
  end  
end</gras>  

disp('Take inverse curvelet transform: ifdct_usfft');  
tic; Y = ifdct_usfft(C,0); toc;  


figure;  
colormap gray;  
imagesc(abs(Y));  





j'ai fais l'exécution mais le message d'erreur suivant est généré.
??? Undefined function or method 'fdct_usfft_mex' for input arguments of type 'double'.

Error in ==> fdct_usfft at 20
C = fdct_usfft_mex(m,n,nbscales, nbangles_coarse, allcurvelets, double(x));

Error in ==> curvelet at 32
C = fdct_usfft(x,0);

je peux fous fournir le code de la fonction fdct_usfft:
function C = fdct_usfft(X,isreal)  

% fdct_usfft - Forward curvelet transform  
%  
% Input  
%     X         Image  
%     isreal    Type of transform  
%                   0: complex  
%                   1: real  
% Output  
%     C         Curvelet coefficients  
%  

  [m,n] = size(X);  
  nbscales = floor(log2(min(m,n)))-3;  
  nbangles_coarse = 16;  
  allcurvelets = 0;  
    
  %call mex function  
  C = fdct_usfft_mex(m,n,nbscales, nbangles_coarse, allcurvelets, double(X));  
    
  if(isreal)  
    C = fdct_usfft_c2r(C);  
  end


ainsi que le code de la fonction

function C = fdct_usfft_c2r(C)  
% fdct_usfft_c2r - transform complex curvelet coefficients to real coefficients  
  nbs = length(C);  
  C{1}{1} = real(C{1}{1});  
  for s=2:nbs  
    nw = length(C{s});  
    for w=1:nw/2  
      A = C{s}{w};      %B = C{s}{w+nw/2};  
      C{s}{w} = sqrt(2) * real(A);      C{s}{w+nw/2} = sqrt(2) * imag(A);  
    end  
  end  
  C{nbs}{1} = real(C{nbs}{1});


j'espère que vous pouvez m'aider :)

Merci d'avance.