slt à tous;
voila, j'ai un objet (une forme) convexe (image binaire) et j'aimerai caculer le grand axe et le petit axe de l'objet, si orientez moi vers un algorithme qui réalise ce calcul, et merci
slt à tous;
voila, j'ai un objet (une forme) convexe (image binaire) et j'aimerai caculer le grand axe et le petit axe de l'objet, si orientez moi vers un algorithme qui réalise ce calcul, et merci
ca dépend un peu comment est placé ton objet,
S'il est placé tjs à l'horizontale, il te sufft de projetter horizontalement et verticalement ta forme sur les axe et tu trouveras la longueur de tes deux axes.
Bonjour,
Une réponse toute simple : il te suffit de calculer les moments à l'ordre 2 de ta forme.
Les valeurs propres du tenseur d'inertie correspondent aux valeurs correspondent au grand axe et au petit axe de ta forme.
Tu ne devrais pas avoir trop de mal pour trouver les formules.
L'analyse en composantes principales est aussi une possibilité.
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
Consignes aux jeunes padawans : une image vaut 1000 mots !
- Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
- Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
- ton poste tu dois marquer quand la bonne réponse tu as obtenu.
slt; tout ce que vous me dites est correcte mais ce que je veux c'est les formules pour bien comprendre, et merci à tous
C'est ton jour de chance, je viens de remettre au propre un bout de code qui fait l'ACP d'une image binaire.
Code java : 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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 public double[] binaryPCA(boolean[][] image, int width, int height) { // compute sum of x,x2,y,y2,x*y of marked pixels double sum_x=0, sum_x2=0, sum_y=0, sum_y2=0, sum_xy=0, count=0; for(int y=0;y<height;y++) { for(int x=0;x<width;x++) { boolean value = image[x][y]; if (value==false) continue; sum_x += x; sum_x2 += x*x; sum_y += y; sum_y2 += y*y; sum_xy += x*y; count++; } } // cov(X,Y) = E(X*Y) - E(X)*E(Y) double Ex = sum_x/count, Ex2 = sum_x2/count; double Ey = sum_y/count, Ey2 = sum_y2/count; double Exy = sum_xy/count; double COVxx = Ex2-Ex*Ex; double COVyy = Ey2-Ey*Ey; double COVxy = Exy-Ex*Ey; // covariance matrix is // | a b | | COVxx COVxy | // | c d | = | COVxy COVyy | double a=COVxx, b=COVxy, c=COVxy, d=COVyy; // characteristic polynomial : P(L) = L^2 - Trace.L + Determinant double T = a+d; double Det = a*d-b*c; // eingenvalues L1,L1 = roots of characteristic polynomial double sqrt = Math.sqrt(T*T - 4*Det); double L1 = 0.5 * ( T + sqrt ); double L2 = 0.5 * ( T - sqrt ); // eigenvectors => A.v = L.v, then: // (a-L).vx + b.vy = 0 // c.vx + (d-L).vy = 0 double V1x,V1y,V1n,V2x,V2y,V2n, EPSILON=1E-8; if (Math.abs(b)<EPSILON && Math.abs(c)<EPSILON) { V1x=1.0; V1y=0.0; V2x=0.0; V2y=1.0; } else if (Math.abs(c)>Math.abs(b)) { V1x=L1-d; V1y=c; V2x=L2-d; V2y=c; } else { V1x=b; V1y=L1-a; V2x=b; V2y=L2-a; } // normalize eigenvectors V1n=Math.sqrt(V1x*V1x+V1y*V1y); if (V1n>EPSILON) {V1x/=V1n;V1y/=V1n;} V2n=Math.sqrt(V2x*V2x+V2y*V2y); if (V2n>EPSILON) {V2x/=V2n;V2y/=V2n;} // return data return new double[] {Ex, Ey, L1, L2, V1x, V1y, V2x, V2y}; }
L'axe principal est la droite définie par le point (Ex,Ey) et le vecteur (V1x,V1y).
L'axe secondaire est la droite définie par le point (Ex,Ey) et le vecteur (V2x,V2y).
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
merci pour code.
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