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.
Respuestas:
Esas son algunas preguntas muy buenas. Abordemos cada punto uno por uno:
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.
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 :
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.
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!
fuente
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:
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
fuente
tl;dr
diferencias entre SURF y SIFT.