tengo una imagen de muestra que contiene un objeto, tal como los pendientes en la siguiente imagen:Detectar si un objeto de una imagen está en otra imagen con OpenCV
que luego tiene un gran candidato conjunto de imágenes para las que necesito para determinar cuál de ellas muy probablemente contiene el objeto, por ejemplo:
por eso es necesario para producir una puntuación para cada imagen, donde la puntuación más alta corresponde a la imagen que muy probablemente contiene el objeto de destino. Ahora, en este caso, tengo las siguientes condiciones/restricciones para trabajar con/alrededor de:
1) Puedo obtener múltiples imágenes de muestra en diferentes ángulos.
2) Es probable que las imágenes de muestra tengan diferentes resoluciones, ángulos y distancias que las imágenes candidatas.
3) Hay MUCHAS imágenes candidatas (> 10,000), por lo que debe ser razonablemente rápido.
4) Estoy dispuesto a sacrificar algo de precisión por velocidad, así que si eso significa que tenemos que buscar entre los 100 primeros en vez de solo los 10 principales, está bien y se puede hacer manualmente.
5) Puedo manipular manualmente las imágenes de muestra, como esbozar el objeto que deseo detectar; las imágenes candidatas no se pueden manipular manualmente ya que son demasiadas.
6) No tengo ninguna experiencia real en OpenCV o visión artificial, así que estoy empezando desde cero aquí.
Mi idea inicial es comenzar dibujando un contorno aproximado alrededor del objeto en la imagen de muestra. Entonces, pude identificar las esquinas en el objeto y las esquinas de la imagen candidata. Podría hacer un perfil de los píxeles alrededor de cada esquina para ver si se ven similares y clasificarlos por la suma de las puntuaciones de similitud máxima de cada esquina. Tampoco estoy seguro de cómo cuantificar píxeles similares. Supongo que solo la distancia euclidiana de sus valores RGB?
El problema es que ignora el centro del objeto. En los ejemplos anteriores, si las esquinas de los pendientes están todas cerca del marco dorado, entonces no consideraría las piedras rojas, verdes y azules dentro del pendiente. Supongo que podría mejorar esto mirando a todos los pares de esquinas y determinando la similitud mediante el muestreo de algunos puntos a lo largo de la línea que los separa.
así que tengo un par de preguntas:
a) ¿esta línea de pensamiento tiene sentido en general, o hay algo que me falta?
B) ¿Qué algoritmos específicos de OpenCV debo investigar? Soy consciente de que existen algoritmos de detección de esquinas múltiples, pero solo necesito uno y si todas las diferencias se están optimizando en los márgenes, estoy bien con el más rápido.
C) ¿Algún código de ejemplo usando los algoritmos que serían útiles para ayudar en mi comprensión?
Mis opciones para idiomas son Python o C#.
Gracias, esto me señaló en la dirección correcta. Lo aprecio. –