Adaptation des contours - recherche du déplacement des contours

17

J'ai trouvé des contours sur deux images avec le même objet et je veux trouver le déplacement et la rotation de cet objet. J'ai essayé avec des boîtes englobantes tournées de ces contours, puis ses angles et points centraux, mais les rotations des boîtes englobantes ne parlent pas correctement de la rotation des contours car c'est la même chose pour les angles a + 0, a + 90, a + 180, etc. degrés. Est-ce une autre bonne façon de trouver la rotation et le déplacement des contours? Peut-être une certaine utilisation de la coque convexe, des défauts de convexité? J'ai lu dans Learning OpenCv sur la correspondance des contours mais cela n'a pas aidé. Quelqu'un pourrait-il donner un exemple?

Exemples:

1 2 3 4

Je veux détecter par exemple le carré rose, et dans le deuxième cas le stylo. D'autres exemples pourraient être des carrés avec des trous, des étoiles, etc. Comme je l'ai dit, je veux faire quelque chose d'universel. Toutes les suggestions sont appréciées car je veux tester autant de méthodes que possible.

krzych
la source
L'image aiderait ici
mirror2image
Je veux faire une fonction universelle. Ainsi, l'image de test peut être n'importe quoi. Élément de forme simple comme rectangle, ou de forme un peu plus complexe.
krzych
2
Eh bien, vous ne pouvez pas adapter une seule méthode à tous les cas. La méthode pratique dépend de la plage de contraste, de l'estimation du bruit, de l'arrière-plan et de la forme elle-même - c'est la fluidité, la topologie, etc. C'est pourquoi l'image aiderait.
mirror2image

Réponses:

4

Devez-vous vous soucier d'une différence d'échelle entre les contours? Sinon, vous pouvez simplement trouver le centroïde de chaque contour et calculer le déplacement en soustrayant l'un de l'autre. Ensuite, vous pouvez calculer les axes principaux des contours et trouver l'angle de rotation entre eux.

Si la mise à l'échelle est impliquée, vous pouvez calculer le facteur d'échelle en prenant le rapport des axes principaux correspondants.

Dima
la source
Oui, l'échelle peut également différer. J'ai également pensé à quelque chose de similaire aux chaînes freeman à partir d'opencv, créant des chaînes freeman de chaque contour, puis les comparant et essayant de trouver une traduction d'une manière ou d'une autre, mais je ne peux pas trouver un bon algorithme pour cela.
krzych
Cela revient à créer une zone de délimitation pivotée minimale et à prendre sa rotation et son déplacement. J'ai essayé cette approche et les résultats ne sont pas satisfaisants. Je pense donc que cette méthode n'est pas bonne du tout.
krzych
Pouvez-vous expliquer plus précisément pourquoi cela n'a pas fonctionné? Les contours ne sont-ils liés que par translation, rotation et mise à l'échelle, ou peuvent-ils être déformés d'autres manières? Certaines photos pourraient vraiment aider. Si vous devez gérer des transformations non affines ou du bruit aléatoire, vous pouvez essayer le contexte de la forme. Faites le moi savoir, je peux vous indiquer quelques papiers.
Dima
Ils ne sont liés que par translation, rotation et mise à l'échelle, les déformations sont liées à une détection de contour peu différente sur différentes photos. Contexte de forme? Pourriez-vous développer cela?
krzych
1
@kzych Il semble que votre plus gros problème serait le bruit dans la détection des bords. Comment trouvez-vous la boîte pivotée minimale? Je ne sais toujours pas pourquoi cela ne fonctionne pas correctement. Le contexte de forme est une façon de représenter un contour. Les détails sont ici: en.wikipedia.org/wiki/Shape_context
Dima
2

Si vous n'avez pas à vous soucier de l'échelle ou des distorsions projectives, les codes de chaîne peuvent vous aider ici. Si vous avez des codes de chaîne d'environ la même forme avec la même échelle, vous pouvez trouver une traduction avec une corrélation de phase FFT unidimensionnelle http://en.wikipedia.org/wiki/Phase_correlation

Si vous devez prendre en compte la distorsion projective, vous pouvez également envisager la possibilité d'utiliser des points caractéristiques (comme des coins) au lieu de contours.

mirror2image
la source
Des conseils pour construire un bon code de chaîne? Peut-être quelque chose d'OpenCv (pour autant que je sache, il n'a que des chaînes freeman)? Pour l'instant, je construis des codes de chaîne en utilisant chaque point de contour et en calculant l'angle par rapport à l'axe x des points voisins, mais peut-être y a-t-il une meilleure idée? Si vous avez des références à de bons articles sur les chaînes, ce serait apprécié.
krzych
2

Dans la question que vous dites

Comme je l'ai dit, je veux faire quelque chose d'universel

mais je crains qu'il soit assez difficile de trouver une solution "universelle" au problème.

Vous pouvez acheter un logiciel de localisation de modèles disponible dans le commerce et l'intégrer dans votre application, ils fonctionnent généralement assez bien pour une large gamme d'applications. Pour vous donner une idée, voici le manuel de référence d'un tel produit http://www.lmi3d.com/sites/default/files/support/4.2.0.70-hexsight_user_guide.pdf

Vous pouvez également développer une solution ad hoc pour un cas particulier (par exemple pour le stylo à votre image).

Sinon, vous pouvez étudier durement le problème, en partant des bases très basiques enracinées dans la géométrie informatique ( http://www.cs.sunysb.edu/~algorith/files/shape-similarity.shtml ), où vos "contours" sont appelés "polygone", lisant des trucs comme:

M. de Berg, O. Devillers, M. Kreveld, O. Schwarzkopf et M. Teillaud. Calcul du chevauchement maximal de deux polygones convexes sous des translations. Informatique théorique, 31: 613–628, 1998.

et

H. Ahn, O. Cheong, C. Park, C. Shin et A. Vigneron. Maximiser le chevauchement de deux ensembles convexes plans sous des mouvements rigides. Géométrie computationnelle: théorie et applications, 37: 3–15, 2007.

et se terminant par "Reconnaissance hiérarchique en temps réel des objets composés dans les images" par Markus Ulrich qui collabore avec MVTec , une autre maison de logiciels vendant des outils logiciels de reconnaissance d'objets.

Alessandro Jacopson
la source