¿Cuál es el mejor algoritmo de procesamiento de imágenes para comparar una pintura recibida como entrada contra la base de datos y seleccionar la coincidencia más cercana?

Este problema está relacionado con el problema de identificación , donde tenemos una base de datos de características de imágenes y estamos consultando la imagen para encontrar la coincidencia más cercana.

Actualmente en caso de tal tarea, el aprendizaje profundo con aprendizaje métrico funciona mejor. El ejemplo de dicho algoritmo es [1703.07464v3] No Fuss Distance Metric Learning usando Proxies de Google. Están utilizando dicha metodología para buscar autos, productos, etc. similares. Entonces, supongo, ¡también funcionaría para pintar! También podría familiarizarse con la competencia de Kaggle https://www.kaggle.com/c/painter…, que estaba tratando de responder una pregunta: “¿Podemos clasificar la pintura por el estilo único del pintor?”

Ok, entonces, ¿qué es el aprendizaje métrico? Se trata de extraer las características significativas de las imágenes, que luego podrían compararse fácilmente con otras imágenes utilizando la distancia euclidiana o coseno. Hay tres formas principales de abordar el tema mientras se entrena el modelo:

  1. Usando una sola imagen e intentando hacer que las características de la misma clase sean similares
  2. Uso de pares de imágenes y aprendizaje de la tarea ‘Misma clase’ o ‘No misma clase’. Entonces estamos aprendiendo la tarea de verificación
  3. Usando Triplets, donde tenemos tres imágenes de la misma clase. (dos de la misma clase, uno del otro). Y queremos que los ejemplos de la misma clase estén más cerca (en el espacio de características) entre sí que con el tercer ejemplo. Esta es exactamente la tarea de identificación .

Hay muchos documentos al respecto, nombrando varios:

Un enfoque de aprendizaje de características discriminatorias para el reconocimiento facial profundo: individual

Aprender una métrica de similitud de forma discriminatoria, con aplicación para la verificación facial – Par

Una incrustación unificada para el reconocimiento facial y la agrupación – Tripletas

El uso de Deep Learning con Metric Learning no es un enfoque fácil, pero debería proporcionarle los mejores resultados. Recuerde que necesita una base de datos de capacitación para aprender un modelo, luego puede comenzar a usarlo.

Suponiendo que las pinturas se recortan y las fotografías se toman en las mismas condiciones (por ejemplo, iluminación, ángulo, etc.), el método más simple pero menos eficiente sería utilizar la coincidencia de plantillas. Tome una imagen y haga un cálculo bruto de la distancia entre otra. Cualquier cálculo de distancia será suficiente (por ejemplo, Euclidiana). Obtendrá una puntuación al final que le indicará cuán cerca estaba la coincidencia y luego podrá establecer un umbral de acuerdo con ella.

OpenCV proporciona funciones para la coincidencia de plantillas, pero asumen que la región que está buscando en la imagen de destino es del mismo tamaño que la plantilla. Deberá escribir un código adicional para realizar la coincidencia de plantillas de varias escalas. Aquí hay un buen tutorial sobre eso.

Pero recalcaré nuevamente, este es el método menos eficiente para su tarea. Sin embargo, es muy fácil de implementar, y si hay una coincidencia, la encontrará.

Para este propósito, obviamente no tiene sentido comparar las pinturas en el dominio espacial.
Mi sugerencia sería hacer un Análisis de componentes principales o ejecutar una transformación como DCT o KLT y comparar los coeficientes. Para hacer esto con una eficiencia razonable, es imperativo que su base de datos también contenga los datos de transformación de antemano, ya que no puede ejecutar las transformaciones en cada cuadro cada vez que se compara un cuadro nuevo.
Puede que estas no sean las mejores soluciones, pero creo que están en camino.
¡Aclamaciones!