tutorial reconocimiento procesamiento introduccion imagenes funciones español con artificial aplicaciones opencv image-processing sift surf keypoint

opencv - reconocimiento - ¿Qué son los puntos clave en el procesamiento de imágenes?



reconocimiento de imagenes python (2)

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

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

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


Esas son algunas muy buenas preguntas. 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 se destaca en la imagen. La detección de puntos de interés es en realidad un subconjunto de detección de manchas , cuyo objetivo es encontrar regiones interesantes o áreas espaciales en una imagen. La razón por la cual los puntos clave son especiales es porque no importa cómo cambie la imagen ... si la imagen gira, se contrae / 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 u homography proyectiva), debería poder encontrar los mismos puntos 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: el módulo ''objeto no tiene atributo'' drawMatches ''opencv python

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

Por lo tanto, lo que debe sacar de esto es que estos son puntos en la imagen que son interesantes y que deben encontrarse sin importar cómo se distorsione la imagen.

Entiendo que son algún tipo de "puntos de interés" de una imagen. También sé que son invariantes de escala y sé que son circulares.

Estás en lo correcto. Escalar invariante significa que no importa cómo escales la imagen, igual deberías 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 describe estos puntos clave. Estos son los que se conocen como descriptores . Cada punto clave que detecta tiene un descriptor asociado que lo acompaña. Algunos marcos solo hacen una detección de 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 tienen que ver principalmente con la escala y la orientación del punto clave. Los puntos clave hemos precisado ese concepto, pero necesitamos la parte del descriptor si nuestro propósito es tratar de hacer coincidir los puntos clave en diferentes imágenes. Ahora, lo que quiere decir con "circular" ... que se correlaciona con la escala en la que se detectó el punto. Tomemos, por ejemplo, esta imagen tomada del tutorial de VLFeat Toolbox :

Verá que los puntos que son amarillos son puntos de interés, pero algunos de estos puntos tienen un radio de círculo diferente. Estos tratan con la escala . Cómo funcionan los puntos de interés en un sentido general es que descomponemos la imagen en múltiples escalas. Verificamos los puntos de interés en cada escala y combinamos todos estos puntos de interés para crear el resultado final. Cuanto mayor era el "círculo", mayor era 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 hacia adentro. Depende del marco descriptor que observe, pero lo esencial es detectar la orientación más dominante de los ángulos de gradiente en el parche. Esto es importante para la coincidencia para que pueda unir los puntos clave juntos. 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 descubrimos 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 observamos los puntos que rodean el punto clave y vemos en qué orientación están todos estos puntos ... y a partir de ahí, 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 los puntos clave entre las imágenes, definitivamente necesita la escala y la orientación para facilitar esto.

¡Espero que esto ayude!


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

SIFT tiene como objetivo encontrar ubicaciones altamente distintivas (o puntos clave ) 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 SIFT es:

  1. desenfoque y vuelva a muestrear la imagen con diferentes anchos de desenfoque y frecuencias de muestreo para crear un espacio a escala
  2. utilice el método de diferencia de gaussianos para detectar manchas en diferentes escalas; los centros de blob se convierten en nuestros puntos clave en una determinada 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 vecindario 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 gradiente 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 usar para identificar el punto clave. Juntos se pueden usar para unir las 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 al examinar las respuestas horizontales y verticales a las ondas pequeñas . 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 igual de robustas en la mayoría de las situaciones.

Para referencia:

Un buen tutorial de SIFT

Una introducción a SURF