Le meilleur cercle de montage de l'algorithme
J'ai besoin d'un algorithme très précis pour le montage d'un cercle à l'ensemble de points de données (en fait j'ai besoin de déterminer le centre). Les données vient après la binarisation et de la segmentation de l'image.
J'ai essayé de simple centre de masse et pondérée au centre de la masse des algorithmes et aussi pré-faites OpenCv::fitEllipse fonction. J'ai obtenu les meilleurs résultats à partir d'OpenCV fonction, mais encore, la précision n'est pas suffisante. Les résultats sont dépréciés de manière significative, lorsque le centre est ancré dans les sous-régions.
La précision, j'ai obtenu n'est pas suffisant, même lorsque vous traitez avec la modélisation des données, ce qui est mauvais, que finalement, la procédure devra traiter les données capturées par comeras.
Avez-vous des suggestions de ce genre d'algorithme dois-je regarder pour ou avez-vous la solution? Je préfère s'abstenir de faire des liens externes libs.
Merci pour votre aide.
modifié:
La cible de calibrage peut être localizaed dans n'importe quelle région du champ de vue. Ci-dessous, les meilleurs résultats que j'ai acieved avec OpenCV procédure:
169,367 748,345
167,557 820,788
165,690 893,158
164,047 965,197
162,715 1036,729
161,575 1108,089
160,477 1179,552
233,297 1015,313
232,076 1086,965
220,359 1229,578
268,494 1160,275
339,544 1162,980
362,017 1235,669
433,390 1238,491
482,754 1168,299
505,233 1241,039
554,856 1170,664
577,302 1243,439
627,331 1172,795
649,507 1245,665
713,572 588,896
711,995 661,853
710,440 735,034
708,722 808,856
707,018 882,674
705,377 956,169
703,609 1029,211
701,716 1101,950
699,760 1174,689
721,895 1247,620
785,829 614,754
784,344 687,750
782,819 761,315
781,292 835,225
779,389 908,975
777,619 982,335
775,688 1055,275
773,672 1128,091
771,603 1200,724
Editted: Le numérique modèle généré et les coordonnées réelles des centres:
51,1 79,8
51,1 179,8
51,1 279,8
51,1 379,8
51,1 479,8
51,1 579,8
51,1 679,8
51,1 779,8
51,1 879,8
51,1 979,8
51,1 1079,8
51,1 1179,8
51,1 1279,8
51,1 1379,8
51,1 1479,8
151,1 79,8
151,1 179,8
151,1 279,8
151,1 379,8
151,1 479,8
151,1 579,8
151,1 679,8
151,1 779,8
151,1 879,8
151,1 979,8
151,1 1079,8
151,1 1179,8
151,1 1279,8
151,1 1379,8
151,1 1479,8
251,1 79,8
251,1 179,8
251,1 279,8
251,1 379,8
251,1 479,8
251,1 579,8
251,1 679,8
251,1 779,8
251,1 879,8
251,1 979,8
251,1 1079,8
251,1 1179,8
251,1 1279,8
251,1 1379,8
251,1 1479,8
351,1 79,8
351,1 179,8
351,1 279,8
351,1 379,8
351,1 479,8
351,1 579,8
351,1 679,8
351,1 779,8
351,1 879,8
351,1 979,8
351,1 1079,8
351,1 1179,8
351,1 1279,8
351,1 1379,8
351,1 1479,8
451,1 79,8
451,1 179,8
451,1 279,8
451,1 379,8
451,1 479,8
451,1 579,8
451,1 679,8
451,1 779,8
451,1 879,8
451,1 979,8
451,1 1079,8
451,1 1179,8
451,1 1279,8
451,1 1379,8
451,1 1479,8
551,1 79,8
551,1 179,8
551,1 279,8
551,1 379,8
551,1 479,8
551,1 579,8
551,1 679,8
551,1 779,8
551,1 879,8
551,1 979,8
551,1 1079,8
551,1 1179,8
551,1 1279,8
551,1 1379,8
551,1 1479,8
651,1 79,8
651,1 179,8
651,1 279,8
651,1 379,8
651,1 479,8
651,1 579,8
651,1 679,8
651,1 779,8
651,1 879,8
651,1 979,8
651,1 1079,8
651,1 1179,8
651,1 1279,8
651,1 1379,8
651,1 1479,8
751,1 79,8
751,1 179,8
751,1 279,8
751,1 379,8
751,1 479,8
751,1 579,8
751,1 679,8
751,1 779,8
751,1 879,8
751,1 979,8
751,1 1079,8
751,1 1179,8
751,1 1279,8
751,1 1379,8
751,1 1479,8
851,1 79,8
851,1 179,8
851,1 279,8
851,1 379,8
851,1 479,8
851,1 579,8
851,1 679,8
851,1 779,8
851,1 879,8
851,1 979,8
851,1 1079,8
851,1 1179,8
851,1 1279,8
851,1 1379,8
851,1 1479,8
951,1 79,8
951,1 179,8
951,1 279,8
951,1 379,8
951,1 479,8
951,1 579,8
951,1 679,8
951,1 779,8
951,1 879,8
951,1 979,8
951,1 1079,8
951,1 1179,8
951,1 1279,8
951,1 1379,8
951,1 1479,8
1051,1 79,8
1051,1 179,8
1051,1 279,8
1051,1 379,8
1051,1 479,8
1051,1 579,8
1051,1 679,8
1051,1 779,8
1051,1 879,8
1051,1 979,8
1051,1 1079,8
1051,1 1179,8
1051,1 1279,8
1051,1 1379,8
1051,1 1479,8
1151,1 79,8
1151,1 179,8
1151,1 279,8
1151,1 379,8
1151,1 479,8
1151,1 579,8
1151,1 679,8
1151,1 779,8
1151,1 879,8
1151,1 979,8
1151,1 1079,8
1151,1 1179,8
1151,1 1279,8
1151,1 1379,8
1151,1 1479,8
S'il vous plaît poster attendus centre de positions pour votre image de l'échantillon pour comparer les résultats.
Bien, je voulais dire que l'image que j'en ai déjà posté contient "l'œuf de formes". J'ai peut-être exagéré le problème, que la caméra ne peut pas voir les cercles idéal cercles. Je vais poster une image du modèle avec les centres de positions dans quelques minutes pour tester votre procédure.
+1 pour le trippy points de l'image! 🙂
OriginalL'auteur Marcin | 2010-12-08
Vous devez vous connecter pour publier un commentaire.
Un Algorithme utilisant l'Image de Transformations et de Clustering
J'ai fait un petit Algorithme à l'aide de l'Image et les Transformations de certains Statistique pour détecter vos cercles. Nous allons voir si c'est votre erreur attente.
Toute bonne image et de la statistique de la bibliothèque va le faire, j'ai mis en place à l'aide de Mathematica.
Déroulera comme suit:
1. Importez votre image et d'exécuter un Fond de Chapeau de Transformer
Nous commencer à essayer d'isoler les cercles. Le Chapeau Bas À Transformer avec une Matrice de Zone noyau aide. Presque n'importe quelle image de la bibliothèque est livré avec l'algorithme déjà mis en œuvre.
Le résultat est
2. Exécuter un coup Manquer de se Transformer en isoler les cercles
Le Hit Miss Transformer excelle dans la recherche de bien défini d'objets géométriques. Il est également facile à programmer et est presque toujours présent dans les bibliothèques d'images.
Le résultat est:
Et nos cercles sont déjà isolé et réduit à son noyau central.
3. Obtenez seulement les pixels blancs de l'image
C'est un dépendant de l'implémentation de l'étape, donc je vais pas faire de commentaires sur celui-ci.
Nous allons voir comment le nombre de pixels à gauche
Donc 3684 pixels à gauche, près de 82 par cercle. Assez pour faire des statistiques.
3. Utilisation de l'Analyse par grappes à choisir chaque cercle
Analyse de Cluster est peut-être trop ici, mais comme je l'ai déjà mis en place, est plus facile à utiliser que le programme de quelque chose de nouveau :). Vous pouvez faire votre propre ou utiliser les stats de la bibliothèque.
Avec nos clusters déjà trouvé, nous allons trouver la moyenne de x et y dans chaque cluster. Ceux sont les centres des cercles:
Le résultat est une liste de 45 coordonnées comme:
Nous avons presque terminé.
Revenons maintenant à notre résultat. Nous avons superposé les deux images, le dessin des croix et des cercles autour de la détectés centres.
Cliquez pour agrandir, de sorte que vous peut se faire une idée des erreurs.
HTH!
Modifier
J'ai comparé les résultats à partir de votre tableau avec mes résultats.
Assumming les cercles sont dans les lignes droites, j'ai utilisé la méthode des moindres Carrés Ajustement de tracer une ligne et calculé les valeurs résiduelles.
Forme le graphique ci-dessous, vous pouvez voir que le "M"y line fit mieux que "Y"est le nôtre. Mais c'est en supposant que les cercles alignés ...
Edit 2
Ce sont calculées les coordonnées pour les 45 premiers cercles dans votre deuxième image. J'ai un décalage systématique de 1 pixel. Probablement en raison de certaines de manipulation de l'image que j'ai fait, mais est facile à corriger 🙂 ... juste soustrait à un pixel sur X et Y ...
Et c'est l'image:
Merci de poster quelques images de votre "oeuf formes" (no pun intended) et nous allons voir si nous pouvons arriver à quelque chose
Bien, je voulais dire que l'image que j'en ai déjà posté contient "l'œuf de formes". J'ai peut-être exagéré le problème, que la caméra ne peut pas voir les cercles idéal cercles. Je vais poster une image du modèle avec les centres de positions dans quelques minutes pour tester votre procédure.
Les cercles sont alignés de façon à ce qu'il semble, que la vôtre " les résultats sont plus précis. Je vous serais reconnaissant si vous pouviez analyser les données numériques et d'afficher les centres de coordonnées.
Merci. Le meilleur algorithme j'ai mis en place a été un peu mieux avec les données numériques (environ 0,01 px en 'x' axe et 0,06 px en " y " de l'axe). D'autre part, la vôtre algorithme semble être de mieux en mieux sur des données réelles... Ici, nous vient d'un autre problème -> Comment faire pour simuler des modèles fiables pour ce type de tests. J'ai essayé Blender rendu d'images du modèle numérique (à l'aide de non-déformée lentilles). Dans Blender, je peux facilement le modèle 3D de la cible de calibrage exact lointain marqueurs, mais je ne peux pas ancrer cette des cercles avec un sous-pixel de précision dans le rendu de l'image en pixel de coordonnées.
OriginalL'auteur Dr. belisarius
"Meilleur" dépend du type de bruit dans les données d'entrée. Le problème est trivial si il n'y a pas de bruit dans la source de données de points: il suffit de choisir 3 points et de calculer le cercle.
Si vous vous attendez à la normale distribués, indépendant des traductions de chaque point de données, puis une moins la moyenne des carrés de l'algorithme doit être optimale. Les points de données doivent correspondre à l'équation:
où
xm
,ym
,r
sont inconnus, donc:substitut
c
pourr^2-xm^2-ym^2
et vous avez un surdéterminé système d'équations linéaires:Toute bonne bibliothèque d'algèbre linéaire (par exemple IPP) peut résoudre que pour vous.
Si vous vous attendez à des valeurs aberrantes dans les données, je voudrais suggérer à l'aide d'un RANSAC-stratégie pour trouver l'ensemble de non-outlier points, puis utilisez l'algorithme ci-dessus pour trouver le centre exact de l'ensemble.
Carré de côté a donné des résultats similaires à simple dans le centre de masse de l'algorithme. On dirait que son pas la méthode adéquate.
Si distorsions sont dues à l'optique, et qu'ils sont importants, alors la première chose que vous avez besoin est d'étalonner et de undistort (et, éventuellement, de rectification) de l'image. Voir opencv.willowgarage.com/documentation/... si vous utiliser OpenCV. Vous pouvez ensuite appliquer quel que soit le cercle correspondant à l'algorithme que vous aimez.
si l'appareil photo est incliné que vous ne doit pas correspondre à un cercle ... Aussi, si c'est une caméra de procédure de calibrage, je suggère à l'état clairement dans la question.
C'est une sorte de système de mesure de la procédure d'étalonnage, qui est faite après la norme de calibrage de la caméra. J'ai posté une image de l'échantillon dans la première entrée.
OriginalL'auteur Niki
De trouver des cercles de centres de sous-pixel de précision si le rayon du cercle est connu (et constante), j'utilise cette approche:
Autrement, si les points du cercle sont connus avec une précision suffisante, moins la moyenne des carrés de côté devrait résoudre le problème de trouver le centre (voir @i nik e de la réponse).
OriginalL'auteur sastanin
Prendre un coup d'oeil à Hough transformer. Il peut être utilisé pour détecter les cercles.
Il dépend de la façon dont vous discrétiser le centre et le rayon de l'espace. La bonne chose est que vous pouvez profiter de la voisine cercles, puisqu'ils sont sur une seule ligne et équidistantes. Il suffit d'ajouter les paramètres de la ligne, où les centres des cercles sont situés à votre Ien de l'espace.
OriginalL'auteur Alejandro
OpenCV 2.4.6.0 a
findCirclesGrid
fonction pour trouver les centres des cercles dans une grille.OriginalL'auteur Alessandro Jacopson