logo

Estimer la valeur sigma

C'est ici que vous poserez vos question sur mon logiciel de traitements d'images

Estimer la valeur sigma

Messagede bassouma » 22 Avr 2012, 22:23

salut à tous :)

pour débruiter une image, je ne connais pas son niveau de bruit, alors je dois estimer la valeur de sigma du bruit ,dans le cas particulier où j'ajoute le bruit et que je connais sigma, la valeur estimée doit être très proche de la valeur réelle ( que j' ajoutée):

ainsi j'ai procédé comme suit, je prend l'image, je lui ajoute du bruit de variance sigma , puis je débruite. le code ci dessous présente le débruitage par ondelette.

Code: Tout sélectionner
%charger l'image
im=imread('\Hoffman.jpg');
im=rgb2gray(im);
im=double(im);

%bruiter l'image Hoffman par un bruit gaussien
n = size(im,1);
sigma = 20;       
x = im + sigma*randn(size(im));

% 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);
NBpixel = size(im,1) * size(im,2);
lamda =sqrt( 2 * log(NBpixel));
th = sigma * lamda;

% De-noise image using global thresholding option.
xd = wdencmp('gbl',x,'bior4.4',1,th,sorh,keepapp)


Mais dans le cas réel ou les images sont de nature bruitées, j'ai pas pu estimer la valeur de sigma,

Pouvez vous m'aider à trouver la valeur estimer, sachant que quand sigma estimé doit etre proche de sigma dans mon cas d'exemple.

Merci d'avance
bassouma
 
Messages: 18
Inscription: 31 Jan 2012, 23:20

Re: Estimer la valeur sigma

Messagede Tibo » 23 Avr 2012, 12:56

Bonjour,
ce que tu essayes de faire est plus compliqué que l'exemple que tu donnes. En effet, tu cherches à estimer le bruit qui existe dans l'image, mais pour ça il te faut une meilleur définition du bruit. Si tu simplifies le bruit à un bruit Gaussien de variance Sigma, alors tu seras loin de la réalité (dans une photo, le bruit est rarement gaussien).

Pour ce qui est de ton exemple, si tu veux retrouver une valeur pas trop éloignée de ton sigma d'origine, voila la marche à suivre:

Code: Tout sélectionner
%charger l'image
im=imread('\Hoffman.jpg');
im=rgb2gray(im);
im=double(im);

%bruiter l'image Hoffman par un bruit gaussien
n = size(im,1);
sigma = 20;       
x = im + sigma*randn(size(im));

%jusqu'ici, tout va bien : on estime les paramètres
[thr,sorh,keepapp] = ddencmp('den','wv',x);
NBpixel = size(im,1) * size(im,2);

% De-noise image using global thresholding option.
%ATTENTION : ici on utilise thr car on part de l'hypothèse qu'on ne connait pas sigma!
xd = wdencmp('gbl',x,'bior4.4',2,thr,sorh,keepapp);

%Maintenant que l'on a le signal débruité, on peut alors calculer la différence
diff = reshape( xd-x, 1, size(im,1)*size(im,2) );

%puis estimer la variance de cette différence:
variance = var( diff );
sqrt( variance )

Et voila!

D'autres question?
Tibo
Administrateur du site
 
Messages: 147
Inscription: 26 Mar 2008, 13:58

Re: Estimer la valeur sigma

Messagede bassouma » 23 Avr 2012, 13:11

oui, je veux bien afficher la valeur de sigma estimé mais je ne sais pas comment pour la comparer à celle ajoutée.
bassouma
 
Messages: 18
Inscription: 31 Jan 2012, 23:20

Re: Estimer la valeur sigma

Messagede Tibo » 23 Avr 2012, 13:14

Ba la variance du bruit que tu a ajouté est égale à 20 (c'est la valeur de sigma, voir le code) et la variance estimée est stocké dans la variable variance. Donc pour afficher la différence, il te suffit de faire:
Code: Tout sélectionner
sigma - sqrt( variance )


Ca te donnera un chiffre. Plus il sera proche de 0, et meilleur sera ton estimation!
Tibo
Administrateur du site
 
Messages: 147
Inscription: 26 Mar 2008, 13:58

Re: Estimer la valeur sigma

Messagede bassouma » 23 Avr 2012, 13:24

merci pour votre réponse, mais nous n'avons pas stocké la valeur estimé dans la variable variance de la code précédent, en plus je dois trouvé sigma trés proche de sigma estimé.
bassouma
 
Messages: 18
Inscription: 31 Jan 2012, 23:20

Re: Estimer la valeur sigma

Messagede Tibo » 23 Avr 2012, 13:37

Désolé, je ne comprend pas ce que tu veux dire par "nous n'avons pas stocké la valeur estimé dans la variable variance de la code précédent"

Merci de préciser...
Tibo
Administrateur du site
 
Messages: 147
Inscription: 26 Mar 2008, 13:58

Re: Estimer la valeur sigma

Messagede bassouma » 23 Avr 2012, 13:40

petite question SVP; pourquoi vous avez enlevez ces deux lignes:
lamda =sqrt( 2 * log(NBpixel));
th = sigma * lamda;

en fait ca correspondent au seuil de donoho que j'ai appliqué pour faire le débruitage,
N'hézitez pas à me répondre SVP :)
bassouma
 
Messages: 18
Inscription: 31 Jan 2012, 23:20

Re: Estimer la valeur sigma

Messagede bassouma » 23 Avr 2012, 13:44

Tibo a écrit:Désolé, je ne comprend pas ce que tu veux dire par "nous n'avons pas stocké la valeur estimé dans la variable variance de la code précédent"

Merci de préciser...


moi j'ai essayé d'afficher les deux variable de sigma et de sigma estimée pour les comparer(ils doivent etre trés proches)

mais quand j'ai mis l'instruction suivante :sigma - sqrt( variance );

j'obtients le message d'erreur suivant :Undefined function or variable 'variance'.

c'est que la variable 'variance' n'est pas définie dans le corps du programme.
bassouma
 
Messages: 18
Inscription: 31 Jan 2012, 23:20

Re: Estimer la valeur sigma

Messagede Tibo » 23 Avr 2012, 13:50

Si tu as bien executé le code que je t'ai donné plus haut, tu verras que variance est bien définie...
Tibo
Administrateur du site
 
Messages: 147
Inscription: 26 Mar 2008, 13:58

Re: Estimer la valeur sigma

Messagede bassouma » 23 Avr 2012, 20:51

merci oui ca fonctionne, mais pour l'estimateur j'ai trouvé que le meilleur c la médiane , je décompose en un seul niveau, je prend la moyenne de H, V, D et je dévise par 0.6745
mon code est composé des étapes suivantes:
- lire une image
- ajoute un bruit
- décompose en un seul niveau
- estima la valeur de sigma

Je vous fournie le code source de la fonction d'estimation de sigma que j'ai décrit ci haut:
Code: Tout sélectionner
function sigmaEstimate=EstimSigma(I,y)

[nrow,ncol]=size(I);

I=double(I);

nb=log2(ncol)-1;

wc=I;

sigmaEstimate=0;

for i=1:nrow

wc(i,1:ncol)=FWT_PO(wc(i,1:ncol),nb,y);

end

twc(1:ncol,1:nrow)=wc(1:nrow, 1:ncol)';

for i=1:ncol

twc(i,1:nrow)=FWT_PO(twc(i,1:nrow),nb,y);

end

wc(1:nrow,1:ncol)=twc(1:ncol,1:nrow)';

Abswc=abs(wc);

%estimation de la médiane sur le carré des hautes fréquences horizontales

%et basses fréquences verticales

S1=[];

for i=1:nrow/2

S1=[S1,Abswc(i,ncol/2+1:ncol)];

end

M1=median(S1);

%estimation de la médiane sur le carré des basses fréquences horizontales

%et hautes fréquences verticales

S2=[];

for i=nrow/2+1:nrow

S2=[S2,Abswc(i,1:ncol/2)];


end

M2=median(S2);

%estimation de la médiane sur le carré des hautes fréquences horizontales

%et hautes fréquences verticales

S3=[];

for i=nrow/2+1:nrow

S3=[S3,Abswc(i,ncol/2+1:ncol)];

end

M3=median(S3);

%Moyenne des médiane :

M=(M1+M2+M3)/3;

sigmaEstimate=M/0.6745;


ainsi que le code source de la fonction qmf:
Code: Tout sélectionner
function y = qmf(x,p)
%QMF    Quadrature mirror filter.
%   Y = QMF(X,P) changes the signs of the even index entries
%   of the reversed vector filter coefficients X if P is even.
%   If P is odd the same holds for odd index entries.
%
%   Y = QMF(X) is equivalent to Y = QMF(X,0).

%   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
%   Last Revision: 13-May-2003.
%   Copyright 1995-2004 The MathWorks, Inc.
% $Revision: 1.10.4.2 $

% Check arguments.
if nargin == 1 , p = 0; end
if (p~=fix(p)) ||(p<0)
    error('Invalid input argument: p')
end

% Compute quadrature mirror filter.
y = x(end:-1:1);
first = 2-rem(p,2);
y(first:2:end) = -y(first:2:end);



ainsi je peux vous monter le code pour l'estimation de la valeur de sigma:
Code: Tout sélectionner
%%%lecture de l'image
im=imread('C:\Users\user\Desktop\ACTIVITEMULTI\base_originale\Hoffman.jpg');
im=rgb2gray(im);
im=double(im);

%Ajout du bruit
n = size(im,1);
sigma = 10;       
x = im + sigma*randn(size(im));

%Décomposer en un seul niveau de bruit
[thr,sorh,keepapp] = ddencmp('den','wv',x);
NBpixel = size(im,1) * size(im,2);
xd = wdencmp('gbl',x,'bior4.4',1,thr,sorh,keepapp);

%%estimer la valeur de sigma

y = qmf(x);
sigmaEstimate=EstimSigma(x,y);


Mais ca fonctionne pas, ca ne donne aucun résultat, le programme reste en état d'exécution !!! sans aucun indice :|

Pouvez vous me commenté ou m'aidé SVP.
bassouma
 
Messages: 18
Inscription: 31 Jan 2012, 23:20

Suivante

Retourner vers Logiciel de traitement d'images

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

cron
Hit-Parade des sites francophones