Débruitage par seuillage en ondelettes

Résolu/Fermé
tchichik Messages postés 2 Date d'inscription dimanche 11 décembre 2011 Statut Membre Dernière intervention 12 décembre 2011 - 11 déc. 2011 à 21:11
 tchichik - 6 mars 2012 à 21:48
Bonjour,
salut à tous

mon objectif est d'appliquer la transformation en ondelettes sur l'image bruité, ensuite appliquer l'opération de seuillage,

ci-aprés mon code en matlab:

clear all;close all;clc;
%Charger et bruiter une image
C1=double(imread('C:\Users\user\Desktop\ACTIVITEMULTI\activité_1.jpg'));
I=rgb2gray(C1/255);
n = size(I,1);
sigma = 0.06 * (max(I()-min(I());
In = I + sigma*randn(n);
subplot(1,2,1);
imagesc(I); axis image; axis off;
subplot(1,2,2);
imagesc(In); axis image; axis off;
colormap gray(256);

%Transformée en ondelettes orthogonale 2D et seuillage
% Transformée en ondelettes 2D
Iw = FWT2_PO(I,Jmin,qmf);
IwT = Iw; IwT = Iw .* (abs(Iw)>T);
I_ond = IWT2_PO(IwT,Jmin,qmf); % transformée inverse
% dessines des transformée originale et seuillées
subplot(1,2,1);
plot_wavelet(Iw, Jmin); colormap gray(256);
subplot(1,2,2);
plot_wavelet(IwT, Jmin); colormap gray(256);

Mais je n'arrive pas à simuler mon code j'obtiens l'erreur suivante:
??? Error using ==> plus
Matrix dimensions must agree.

Error in ==> debruitond at 7
In = I + sigma*randn(n);

j'essaye de terminer la taille de mon image I en tapant size(I)

ans =

105 71

JE serais reconnaissante si quelqu'un peux me déterminer l'erreur.


3 réponses

SALUT :)

j'ai arrivé a trouvé mon ondelette adéquate ci joint mon code
%Load original image. 

X=imread(['base_originale\I' num2str(2) '.jpg']);
X=rgb2gray(X); 
X=double(X);

% Generate noisy image.

sigma =0.1 * ( max(max(X))-min(min(X)) );
x = X + sigma*randn(size(X));


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


% De-noise image using global thresholding option.
xd = wdencmp('gbl',x,'Coif4',1,i,sorh,keepapp);

%figure,image(wcodemat(X)), title('Original Image');
%figure,image(wcodemat(xd)), title('De-Noised Image');

colormap(pink(255)), sm = size(X,1);
subplot(221), image(wcodemat(X,sm)), title('Original Image')
subplot(222), image(wcodemat(x,sm)), title('Noisy Image')
subplot(223), image(wcodemat(xd,sm)), title('De-Noised Image')



mon code est exécutable mais l'affichage des images n'est pas en niveau de gris

autre chose il me donne les axes (des x et des y) numérotés.

Alors comment je peux avoir un affichage en Niveau de gris et les axes non numérotés?

Merci d'avance.
1
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
29 déc. 2011 à 11:20
Tes images seraient elles roses ? À mon avis le problème vient du colormap. Essai un truc dans le genre de colormap(grey())
0
oui les images sont rosées, j'ai essayé le truc de colormap(grey()) mais ca n'a pas marché.
0
merci le problème est résolu
0
Bonjour,

SVP j'ai besoin du code matlab pour la décompositionn en curvelet.

je serais reconnaissante si vous pouvez m'aidé

Mercii d'avance.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
12 déc. 2011 à 09:57
Salut.
Je pense que ton erreur vient de l'utilisation des min et des max. Ces fonction retournent des vecteurs lorsque tu fournis des matrices.
Or, j'ai l'impression que tu veux que sigma soit un réel. De même, es tu sur que ton image est carré ?
0
salut,
merci pour la réponse,

pour moi je cherche o faire bruité mes images par un bruit gaussien de variance variable par exemple sigma=10, 20 ou 3O puis appliqué les ondelettes en matière de débruitage tel que les ondelettes de symlet, de coifflet, de daubechies orthogonales et biorthogonale.

Pour mon image je vous ai fournie sa dimension (105, 71), elle doit etre 256 256 par exemple??

de toute facon je serais reconnaissante si vous me répondez encore une fois pour fixer d'ou vient l'erreur exactement ou si vous me prososez une autre mthode pour ce faire.
Merci
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
12 déc. 2011 à 12:29
déjà il y a le problème des min max.
ensuite, il y a le problème du randn.
In = I + sigma*randn(n); 

Là tu dit que ta matrice In c'est la matrice I plus sigma fois randn(n). Or randn te renvoi une matrice de n*n, et tu ne peux pas additionner des matrices qui ont des tailles différentes ! il faut donc dimensionné correctement ta matrice de nombres aléatoires. Essai ça :
m=size(I,2);
In = I + sigma*randn(n,m); 

si sigma est bien un scalaire, il ne devrait pas y avoir de souci.
0
tchichik Messages postés 2 Date d'inscription dimanche 11 décembre 2011 Statut Membre Dernière intervention 12 décembre 2011
12 déc. 2011 à 19:51
salut,

j'ai l'essayé mais j'ai obtenu la meme erreur :

??? Error using ==> sigma at 81
Not enough input arguments.

Error in ==> debruitond at 7
In = I + sigma*randn(n,m);


j'ai essayé de faire l'instruction suivante
In = I + 10*randn(size(I));

j'ai obtenu l'image originale avec celle bruité par un bruit gaussien, mais les détails de l'image obtenue(bruité) sont disparus totalement comparé à sa version originale, mais quand je prend une petite valeur de l'ordre de 0.1 ou 0.2
je peux visualiser le bruit ajouté et à partir de de la valeur 0.3 l'image devient trop bruité.

et j'ai eu une erreur au niveau du code de la Transformée en ondelettes orthogonale 2D:

??? Undefined function or variable 'Jmin'.

Error in ==> debruitond at 17
Iw = FWT2_PO(I,Jmin,qmf);


Pouvez vous me dire si l'instruction d'ajout de bruit: In = I + sigma*randn(n,m);
est valide ou pas càd que je peux la retenir dans la suite .

d'ou viens l'erreur pour la fonction de débruitage.

Merci.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
13 déc. 2011 à 08:16
As tu vérifier la dimension de sigma ? Pour moi le problème vient de là, de ta mauvaise utilisation des min et des max (je te l'ai déjà dit, deux fois, mais tu ne m'a pas fais de retour).
Pour tes ondelettes, je ne connais pas ces fonctions, donc je ne serai te dire. Mais le message d'erreur est explicite : il attend un Jmin avec quelque chose dedans.
0
Bonjour,

Au début j'ai utilisé le code

sigma = 0.06 * (max(I()-min(I());
In = I + sigma*randn(n);


Mais j'aurais des problèmes avec les min et les max, alors j'ai changé la valeur de sigma en utilisant l'instruction suivante tout cours :
In = I + 0.1*randn(size(I));

Dans ce cas sigma vaut 0.1, ca marche comme j'avais dis mais quand je prend une valeur de sigma supérieur à 0.3 par exemple l'image sera trop bruité.

Pouvez vous me proposez un code matlab qui permet d'ajouter un bruit gaussien de variance variable par exemple sigma=10, 20 ou 3O puis faire appliqué les ondelettes en matière de débruitage tel que les ondelettes de symlet, de coifflet, de daubechies orthogonales et biorthogonale?

Merci pour votre aide.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
13 déc. 2011 à 08:42
T'es un boulet. Je t'ai expliqué dans le premier message comment utiliser les min et max. max d'une matrice te donne un vecteur, max d'un vecteur te donne un scalaire. Donc :
sigma = 0.06 * ( max(max(I))-min(min(I)) );
0