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:
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.
Réponses:
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.
la source
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.
la source
Dans la question que vous dites
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.
la source