Encontré contornos en dos imágenes con el mismo objeto y quiero encontrar el desplazamiento y la rotación de este objeto. He intentado con cuadros delimitadores rotados de estos contornos y luego sus ángulos y puntos centrales, pero las rotaciones de los cuadros delimitadores no indican la rotación del contorno correctamente porque es lo mismo para los ángulos a + 0, a + 90, a + 180, etc. grados ¿Es alguna otra buena manera de encontrar la rotación y el desplazamiento de los contornos? Tal vez algún uso de casco convexo, defectos de convexidad? Leí en Learning OpenCv sobre contornos coincidentes, pero no me ayudó. ¿Alguien podría dar algún ejemplo?
Ejemplos:
Quiero detectar, por ejemplo, un cuadrado rosa y, en el segundo caso, un bolígrafo. Otros ejemplos podrían ser cuadrados con algunos agujeros, estrellas, etc. Como dije, quiero hacer algo uniwersal. Cualquier sugerencia es apreciada porque quiero probar tantos métodos como sea posible.
Respuestas:
¿Tiene que preocuparse por una diferencia de escala entre contornos? Si no es así, simplemente puede encontrar el centroide de cada contorno y calcular el desplazamiento restando uno del otro. Luego puede calcular los ejes principales de los contornos y encontrar el ángulo de rotación entre ellos.
Si está involucrado el escalado, puede calcular el factor de escala tomando la razón de los ejes principales correspondientes.
fuente
Si no tiene que preocuparse por la escala o las distorsiones proyectivas, los códigos de cadena pueden ayudar aquí. Si tiene códigos de cadena de aproximadamente la misma forma con la misma escala, puede encontrar la traducción con la correlación de fase FFT unidimensional http://en.wikipedia.org/wiki/Phase_correlation
Si tiene que tener en cuenta la distorsión proyectiva, también puede considerar la posibilidad de utilizar puntos de características (como esquinas) en lugar de contornos.
fuente
En la pregunta que dices
pero me temo que es bastante difícil encontrar una solución "universal" al problema.
Puede comprar un software localizador de patrones disponible comercialmente e integrarlo en su aplicación, por lo general, funcionan bastante bien para una amplia gama de aplicaciones. Solo para darle una idea, este es el manual de referencia para dicho producto http://www.lmi3d.com/sites/default/files/support/4.2.0.70-hexsight_user_guide.pdf
Además, puede desarrollar una solución ad hoc para algún caso particular (por ejemplo, para el lápiz en su imagen).
De lo contrario, puede estudiar mucho el problema, comenzando por los fundamentos muy básicos enraizados en la geometría computacional ( http://www.cs.sunysb.edu/~algorith/files/shape-similarity.shtml ), donde se llaman sus "contornos" "polígono", leyendo cosas como:
M. de Berg, O. Devillers, M. Kreveld, O. Schwarzkopf y M. Teillaud. Calcular la superposición máxima de dos polígonos convexos bajo traslaciones. Informática teórica, 31: 613-628, 1998.
y
H. Ahn, O. Cheong, C. Park, C. Shin y A. Vigneron. Maximización de la superposición de dos conjuntos convexos planos bajo movimientos rígidos. Geometría computacional: teoría y aplicaciones, 37: 3–15, 2007.
y termina con "Reconocimiento jerárquico en tiempo real de objetos compuestos en imágenes" por Markus Ulrich, que colabora con MVTec , otra casa de software que vende herramientas de software de reconocimiento de objetos.
fuente