Bonjour
Je sais que ce sujet a déja plus ou moins été abordé mais mon cas a des nuances: il s'agit de calculer la distance euclidienne entre les pixels des régions voisines d'une image bitmap convertie en matrice. Ces régions sont représentées par des numéros (labels) de 1 a N (dans mon code N est désigné par la variable number). Donc ici il s'agira de déterminer la distance di, entre les pixels des régions 1 et 2, 2 et 3,..., number -1 et number. Pour chaque couple de régions je retiens la plus petite distance min(d), ce qui me permettra apres de regrouper les régions selon que leurs distances minimales soient plus ou moins grandes.
le code:
Je ne suis vraiment pas un expert en matlab, donc je demande votre indulgence si vous constatez de grossieres erreurs.
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 function proxym(filename); img = imread(filename); bw=(img); bw=~bw; [Labeling,number]=bwlabel(bw) p = 0; q = 0; for Label_number = 1 : number %number est le nombre de regions count= 1; %Scan de limage de gauche a droite for x = 1 : 256 for y = 1 : 256 %lecture de la premiere region labelisée et extraction des coordonnées des % pixels if (bw(x,y)==Label_number) Array_Label_number([x count])=x; Array_Label_number([y count])=y; % lecture de la region suivante else Array_Label_number([x count+1])=x; Array_Label_number([y count+1])=y; p = x; q = y; end count = count+1; d = distance(x,y,p,q); end end edismin = min(d); disp('Component:'); disp(Label_number); disp(edismin); % % disp(count); end
La fonction distance calcule la distance euclidienne entre 2 pixels en prenant comme parametres les coordonnées des pixels:
Merci de vos conseils et suggestions!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 function Dist = distance(m,n,o,p) x1=m; y1=n; x2=o; y2=p; Dist=((x1-x2)^2+(y1-y2)^2)^0.5; end
Partager