¿Cuáles son los puntos clave en el procesamiento de imágenes?

80

Cuando se usa OpenCV, por ejemplo, los algoritmos como SIFT o SURF se usan a menudo para detectar puntos clave. Mi pregunta es ¿cuáles son realmente estos puntos clave?

Entiendo que son una especie de "puntos de interés" en una imagen. También sé que son invariantes en escala y circulares.

Además, descubrí que tienen orientación, pero no pude entender qué es esto en realidad. ¿Es un ángulo pero entre el radio y algo? ¿Puede dar alguna explicación? Creo que necesito lo primero que necesito es algo más simple y después será más fácil entender los papeles.

dephinera
fuente
1
Los puntos clave deberían ser simplemente puntos (x, y), en mi opinión. Lo que describe un punto y básicamente la región que lo rodea debe llamarse descriptor. Algunos puntos clave mezclan esos términos y se convierten en puntos con un vector de descripción adjunto, como explicó @rayryeng.
LovaBill
@William - Ese es un buen punto que mucha gente confunde. Agregaré eso a mi publicación. ¡Gracias!
rayryeng

Respuestas:

127

Esas son algunas preguntas muy buenas. Abordemos cada punto uno por uno:

Mi pregunta es ¿cuáles son realmente estos puntos clave?

Los puntos clave son lo mismo que los puntos de interés. Son ubicaciones espaciales, o puntos en la imagen que definen lo que es interesante o lo que destaca en la imagen. La detección de puntos de interés es en realidad un subconjunto de la detección de manchas , cuyo objetivo es encontrar regiones o áreas espaciales interesantes en una imagen. La razón por la que los puntos clave son especiales es porque no importa cómo cambie la imagen ... si la imagen gira, se encoge / expande, se traduce (todo esto sería una transformación afín por cierto ...) o está sujeta a distorsión ( es decir, una transformación proyectiva u homografía ), debería poder encontrar el mismopuntos clave en esta imagen modificada cuando se compara con la imagen original. Aquí hay un ejemplo de una publicación que escribí hace un tiempo:

Fuente: módulo 'el objeto no tiene atributo' drawMatches 'opencv python

La imagen de la derecha es una versión rotada de la imagen de la izquierda. También he mostrado solo las 10 mejores coincidencias entre las dos imágenes. Si echa un vistazo a los 10 partidos principales, estos son puntos en los que probablemente nos gustaría centrarnos y que nos permitirían recordar de qué se trataba la imagen. Querríamos centrarnos en la cara del camarógrafo, así como en la cámara, el trípode y algunas de las interesantes texturas de los edificios del fondo. Verá que estos mismos puntos se encontraron entre las dos imágenes y se emparejaron con éxito.

Por lo tanto, lo que debes sacar de esto es que estos son puntos de la imagen que son interesantes y que deben encontrarse sin importar cómo esté distorsionada la imagen.

Entiendo que son una especie de "puntos de interés" de una imagen. También sé que son invariantes en escala y sé que son circulares.

Estás en lo correcto. Escala invariante significa que no importa cómo escale la imagen, aún debería poder encontrar esos puntos.


Ahora vamos a aventurarnos en la parte del descriptor . Lo que hace que los puntos clave sean diferentes entre los marcos es la forma en que los describe . Estos son los que se conocen como descriptores . Cada punto clave que detecta tiene un descriptor asociado que lo acompaña. Algunos marcos solo detectan puntos clave, mientras que otros marcos son simplemente un marco de descripción y no detectan los puntos. También hay algunos que hacen ambas cosas : detectan y describen los puntos clave. SIFT y SURF son ejemplos de marcos que detectan y describen los puntos clave.

Los descriptores se preocupan principalmente tanto por la escala como por la orientación del punto clave. Los puntos clave hemos definido ese concepto, pero necesitamos la parte del descriptor si nuestro propósito es intentar hacer coincidir los puntos clave en diferentes imágenes. Ahora, lo que quieres decir con "circular" ... que se correlaciona con la escala en la que se detectó el punto. Tomemos, por ejemplo, esta imagen que se tomó del tutorial de VLFeat Toolbox :

Ejemplo de VLFeat

Verá que los puntos amarillos son puntos de interés, pero algunos de estos puntos tienen un radio de círculo diferente. Estos tratan de la escala . La forma en que funcionan los puntos de interés en un sentido general es que descomponemos la imagen en múltiples escalas. Comprobamos los puntos de interés en cada escala y combinamos todos estos puntos de interés para crear el resultado final. Cuanto mayor sea el "círculo", mayor será la escala en la que se detectó el punto. Además, hay una línea que se irradia desde el centro del círculo hasta el borde. Esta es la orientación del punto clave, que cubriremos a continuación.

También descubrí que tienen orientación, pero no pude entender qué es realmente. ¿Es un ángulo pero entre el radio y algo?

Básicamente, si desea detectar puntos clave independientemente de la escala y la orientación, cuando hablan de la orientación de los puntos clave, lo que realmente quieren decir es que buscan un vecindario de píxeles que rodea el punto clave y descubren cómo está orientado este vecindario de píxeles o en qué dirección este parche. está orientado. Depende del marco descriptor que se mire, pero el objetivo general es detectar la orientación más dominante de los ángulos de gradiente en el parche. Esto es importante para hacer coincidirpara que pueda hacer coincidir los puntos clave. Eche un vistazo a la primera figura que tengo con los dos camarógrafos: uno girado y el otro no. Si echa un vistazo a algunos de esos puntos, ¿cómo averiguamos cómo un punto coincide con otro? Podemos identificar fácilmente que la parte superior del camarógrafo como punto de interés coincide con la versión girada porque echamos un vistazo a los puntos que rodean el punto clave y vemos en qué orientación están todos estos puntos ... y desde allí, así es como se calcula la orientación.

Por lo general, cuando queremos detectar puntos clave, solo echamos un vistazo a las ubicaciones. Sin embargo, si desea hacer coincidir puntos clave entre imágenes, definitivamente necesita la escala y la orientación para facilitar esto.


¡Espero que esto ayude!

rayryeng
fuente
23

No estoy tan familiarizado con SURF, pero puedo contarte sobre SIFT, en el que se basa SURF. Proporcioné algunas notas sobre SURF al final, pero no conozco todos los detalles.


SIFT tiene como objetivo encontrar ubicaciones (o puntos clave ) muy distintivos en una imagen. Las ubicaciones no son simplemente ubicaciones 2D en la imagen, sino ubicaciones en el espacio de escala de la imagen , lo que significa que tienen tres coordenadas: x , y y escala . El proceso para encontrar puntos clave de SIFT es:

  1. desenfocar y volver a muestrear la imagen con diferentes anchos de desenfoque y tasas de muestreo para crear un espacio de escala
  2. utilice el método de diferencia de gaussianos para detectar manchas a diferentes escalas; los centros de blob se convierten en nuestros puntos clave en un dado x , y , y escala
  3. Asigne una orientación a cada punto clave calculando un histograma de orientaciones de gradiente para cada píxel en su vecindad y seleccionando el contenedor de orientación con el mayor número de conteos
  4. Asigne a cada punto clave un vector de características de 128 dimensiones basado en las orientaciones de degradado de píxeles en 16 vecindarios locales

El paso 2 nos da invariancia de escala, el paso 3 nos da invariancia de rotación y el paso 4 nos da una especie de "huella digital" que se puede utilizar para identificar el punto clave. Juntos se pueden utilizar para hacer coincidir ocurrencias de la misma característica en cualquier orientación y escala en varias imágenes.


SURF tiene como objetivo lograr los mismos objetivos que SIFT, pero utiliza algunos trucos inteligentes para aumentar la velocidad.

Para la detección de manchas, utiliza el determinante del método de Hesse . La orientación dominante se encuentra examinando las respuestas horizontal y vertical a las ondas de Haar . El descriptor de características es similar a SIFT, observa las orientaciones de píxeles en 16 vecindarios locales, pero da como resultado un vector de 64 dimensiones.

Las funciones SURF se pueden calcular hasta 3 veces más rápido que las funciones SIFT, pero son igualmente sólidas en la mayoría de las situaciones.


Para referencia:

Un buen tutorial de SIFT

Introducción a SURF

eigenchris
fuente
1
Muy agradable. Me encantan las tl;drdiferencias entre SURF y SIFT.
rayryeng
@rayryeng Gracias, aunque es solo porque realmente no sé lo suficiente para decir nada más. ;) Realmente no he usado SURF antes.
eigenchris
1
¡Nunca lo habría sabido! Por cierto, el tutorial de SIFT es un clásico. Eso es lo primero que leí antes del artículo de Lowe.
rayryeng
3
@rayryeng Autor del tutorial aquí: ¡me alegra saber que te gustó!
Utkarsh Sinha
@UtkarshSinha Me encanta tu trabajo y AI Shack. ¡Seguir escribiendo!
rayryeng