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});