Bonjour, je veux calculer la norme euclidienne de 2 pixels.
chaque pixel est un vecteur constitué des composantes R(rouge) , V(vert) et B (bleu).
Merciii
Bonjour, je veux calculer la norme euclidienne de 2 pixels.
chaque pixel est un vecteur constitué des composantes R(rouge) , V(vert) et B (bleu).
Merciii
Bonjour,
as-tu essayé de coder quelque chose? Ou bloques-tu exactement?
Bonjour, merci de votre réponse,
J'essaye d’implémenter le filtre médian vectoriel . Le pixel est alors considéré comme un vecteur (à trois composantes dans le cas des images couleurs) et le traitement opère sur ces vecteurs.
Ce filtre est basé sur un ordre de vecteurs . La sortie de ce type de filtre est définie comme le vecteur de plus faible rang selon un ordre réduit basé sur les distances entre couleurs.
Dans le cas simple cette distance est la norme euclidienne.
Donc je veux écrire une fonction dist:
dist(X,Y)= sqrt( (Rx-Ry)^2 + ( Vx-Vy)^2 + ( Bx-By)^2
Mercii ^^
Tu as l'air d'avoir tous les éléments pour faire ton code, donc je repose mes questions :
as-tu essayé de coder quelque chose? Ou bloques-tu exactement?
Bonjour,effectivement j'ai tous les éléments!
la commande "pdist" permet de calculer cette distance . mais elle prend en input une seule matrice X: pdist(X,'Minkowski',p), alors que moi je cherche de calculer entre 2 vecteurs , voici mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 clear all;close all; A=imread('C:\Program Files\MATLAB\R2009a\toolbox\FausseClrs.jpg'); %figure,imshow(A);title('IMAGE WITHOUT NOISE'); I=imnoise(A,'salt & pepper'); %figure,imshow(Ib);title('IMAGE WITH SALT AND PEPPER NOISE'); [n,m,p]=size(I); If=zeros(size(I)); for a= 2:n-1 for b=2:m-1 win=I(a-1:a+1,b-1:b+1,:); winT=reshape(win,1,9,3); for i=1:9 D(i)= dist(winT(1,i,:),winT(1,1,:))+dist(winT(1,i,:),winT(1,2,:))+dist(winT(1,i,:),winT(1,3,:))+dist(winT(1,i,:),winT(1,4,:))+dist(winT(1,i,:),winT(1,5,:))+dist(winT(1,i,:),winT(1,6,:))+dist(winT(1,i,:),winT(1,7,:))+dist(winT(1,i,:),winT(1,8,:))+dist(winT(1,i,:),winT(1,9,:)); end [lemin,lindice] = min(D); If(a,b)=win(lindice); end end If=uint8(If); figure,imshow(If);title('IMAGE AFTER MEDIAN FILTERING');
au niveau de la fonction "dist", je sais pas koi ecriiire :/
Mercii d'avance
Tu peux utiliser la fonction norm pour calculer la norme euclidienne, par exemple :
Le code pourra être optimisé car tu effectues plusieurs fois les mêmes calculs et dans ta boucle, tu calcules la norme d'un élément avec lui-même, ce qui donnera obligatoirement zéro.
Code : Sélectionner tout - Visualiser dans une fenêtre à part norm(winT(1,i,:)-winT(1,1,:))
Salut, Merci beaucoup pour la réponse, j'obtiens l'erreur suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ??? Undefined function or method 'norm' for input arguments of type 'uint8'. Error in ==> VMF_Final at 17 D(i)= norm(winT(1,i,:),winT(1,1,:))+norm(winT(1,i,:),winT(1,2,:))+norm(winT(1,i,:),norm(1,3,:))+norm(winT(1,i,:),norm(1,4,:))+norm(winT(1,i,:),winT(1,5,:))+norm(winT(1,i,:),winT(1,6,:))+no
j'aimerai bien optimiser le code, vous pouvez me proposer des idées??
Pour comprendre le message d'erreur, voir la:
http://matlab.developpez.com/faq-err...unction_method
Il faut donc mettre par exemple :
Et tu auras une deuxième erreur, tu as mal recopié l'exemple que je t'ai donné.
Code : Sélectionner tout - Visualiser dans une fenêtre à part I=double(imnoise(A,'salt & pepper'));
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager