Re Salut!!
Imaginez un anneau sur une image :roll: comment peut on calculer son diamètre de manière automatique ??
Merci.
Version imprimable
Re Salut!!
Imaginez un anneau sur une image :roll: comment peut on calculer son diamètre de manière automatique ??
Merci.
ben avoir le diametre en pixels, facile..
en cm/mm, il te faut le facteur d'echelle absolu :P
Bonsoir,
Tu veux dire quoi par:
A+Citation:
en cm/mm, il te faut le facteur d'echelle absolu
Bonsoir,
si c'est vraiment un anneau, tu prends trois points éloignés (de préférence), tu calcules le centre de la boule passant par ces trois points, tu trouveras ainsi le rayon et donc le diamètre.
Si PseudoCode a vu juste, attention que la notion de "Diamètre" fait souvent référence à la plus grande distance (Euclidienne) entre deux points de contours de la forme => Une recherche exhaustive s'impose.
Bonjour,
J'ai déja calculé le diamètre en pixel en utilisant la morphologie mathématique et le squelette de l'anneau, maintenant je cherche autre chose qui me donne le diamètre en mm.(voir image en attachement)
A bientôt
Bonjour,
je ne suis pas certain que calculer le diamètre en utilisant des points du squelette soit la meilleure chose. Mais au moins c'est centré.
En revanche, si tu veux convertir ton diamètre ne milimètre, il te faut l'échelle !!!
Sinon comment savoir qu'elle distance représente un pixel.
Si par miracle ton disque a été extrait d'une scène réelle, peut être pourrais tu prendre des amers dans ta scène pour obtenir la calibration de la caméra (ou appareil photo).
Salut !!
Tu as entièrement raison je suis de ton avis mais je n'arrive pas à trouver autre chose:aie:Citation:
je ne suis pas certain que calculer le diamètre en utilisant des points du squelette soit la meilleure chose.
As-tu quelque chose à me proposer?
questions :
cherches-tu le diametre interieur ou exterieur ?
Quant au diametre reel en mm, il te faut la focale et la distance de la camera..
Une proposition pour le diametre en pixel :
calculer le barycentre des pixels allumes, en stockant en meme temps les xmin, xmax, ymin, ymax. => diametre.
Pas d'operations compliquees, pas d'"habillage" mathematique, et une realite physique immediate.,n:mrgreen:
Merci pour l'aide:king:
Je cherche le diamètre interieur :( que veux tu dire par "le barycentre" ?
A++
La tu as le centre des pixels "blancs" (valeur superieure a un certain seuil), en pixel (le barycentre), et tu as les bornes .Code:
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 xcentre = 0 ycentre = 0 n = 0 xmin = nlines xmax = 0 ymin = ncols ymax = 0 pour i = 0 jusqu'a i < nlines pour j = 0 jusqu'a j < ncols si pixel[i][j] > (NOIR+tolerance) xcentre = xcentre + j ycentre = ycentre + i n = n + 1 si i > ymax ymax = i fin si si i < ymin ymin = i fin si si j > xmax xmax = j fin si si j < xmin xmin = j fin si fin si fin pour fin pour xcentre = xcentre/n ycentre = ycentre/n
Donc :
tu fais la moyenne des bornes :
Ca te donne une premiere valeur du diametreCode:m1 = ( (xmax - xmin) + (ymax - ymin) ) / 2
Ensuite tu fais la moyenne des 4 distances (centre, bornes) :
tu as une deuxieme estimation (le rayon).Code:
1
2
3
4
5
6 d1 = xmax - centrex d2 = centrex - xmin d3 = ymax - centrey d4 = centrey - y m2 = (d1 + d2 + d3 + d4)/4
Et la tu peux encore faire une moyenne entre les 2, pour avoir plus de precision encore :
Code:M = (m1 + (2*m2)) / 2
OK, ce que j'ai donne c'est pour le diametre exterieur.
Pour le diametre interieur, c'est quasi plus simple....
Une fois que tu as determine le "centre", tu refais une boucle en partant du centre, et en faisant directement une moyenne
ca c'est la force brute.Code:
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 M = 0 n = 0 /* On explore au dessus du centre, */ pour i = ycentre jusqu'a i >= ymin /* On cherche premier point a gauche */ pour j = xcentre jusqu'a j >= xmin si pixel[i][j] > (NOIR+tolerance) M = M + ((xcentre - j)*(xcentre - j)) + ((ycentre - i)*(ycentre - i)) n = n + 1 Sortie de pour fin si fin pour /* On cherche premier point a droite */ pour j = xcentre jusqu'a j <= xmax si pixel[i][j] > (NOIR+tolerance) M = M + ((j-xcentre)*(j-xcentre)) + ((i - ycentre)*(i-ycentre)) n = n + 1 Sortie de pour fin si fin pour Fin pour /*** ICI meme chose popur aller de ycentre a ymax ****/ /* Sans remettre a zero ni M ni n */ /* Et enfin on trouve la moyenne du RAYON */ M = racine(M/n)
Tu peux aussi faire une routine exploratrice du style "growing region" (recursive), des que tu as trouve le point a gauche de la ligne du centre, pour explorer le bord du contour interieur.
Merci beaucoup souviron34 :king: c'est vraiment sympa de ta part de m'avoir aidé ;)
Bonsoir,
une autre solution est de segmenter, prendre les points du cercle intérieur, puis d'utiliser la petite méthode que je t'ai présenté plus haut pour trouver le centre du cercle.
Sinon il y a toujours l'éternelle transformé de Hough qui te donnera le centre du cercle intérieur et extérieur.
Bonne continuation :)
Merci à vous tous :king:
Salut !!
J'ai vraiment besoin de ton aide souviron34
L'algorithme que tu m'as donné m'a permis de calculer le diamètre :king: mais je n'arrive toujours pas à le comprendre entièrement :oops:
Je te prie de me donner un lien ou je puisse trouver une description de la méthode de recherche du barycentre.
Merci d'avance :mrgreen:
qu'est-ce que tu ne comprends pas ?
C'est pourtant simple...
Le barycentre, c'est en mathématique le "centre de masse", c'est à dire bêtement le centre déterminé par la moyenne des coordonnées des points.
Donc, dans ce que je t'ai présenté, je prends donc juste TOUS les pixels supérieurs à un seuil, et je somme leurs coordonnées dans la boucle, et ensuite je divise par le nombre de points utilisés, pour avoir la moyenne....