SIFT [40] es un algoritmo capaz de detectar puntos de interés estables en una imagen. Este algoritmo fue desarrollado por Lowe [40] para el reconocimiento de objetos, realizando
correspondencias entre puntos de interés de diferentes imágenes para posteriormente asociarlos. Los puntos locales escogidos por SIFT son invariantes frente a diferentes transformaciones como escala, rotación, traslación, ruido de la imagen y parcialmente invariantes frente a cambios de iluminación.
18
Este detector se caracteriza principalmente por la gran cantidad de descriptores estables que genera.
El algoritmo SIFT se define en cuatro etapas principales que detallaremos a continuación.
Detección de extremos
En la primera fase, el algoritmo realiza una búsqueda de extremos sobre todos los píxeles de la imagen. Los extremos localizados serán invariantes frente a los cambios de orientación y escalado, y serán candidatos a ser keypoints o puntos de interés.
Como primer paso para detectar los puntos de interés se crean varios filtros Gaussianos ( ) con una variación de escala σ. Cada filtro Gaussiano se convoluciona con la imagen original ( ), dando lugar a réplicas de la imagen con una diferencia de escala (scale-space), como mostramos en la primera imagen de la figura 2.4. Definimos scale-space como ( ):
( ) ( ) ( ) (2.6)
siendo ( ) el eje de coordenadas y σ el factor de escala.
Figura 2.4. Imágenes espaciadas en escala. Diferencia de Gaussianas. Imagen extraída de [40].
Consecutivamente, para localizar los máximos y mínimos locales, se utiliza la diferencia de Gaussianas ( ). La función ( ) se obtiene de la diferencia entre dos scale-space adyacentes, separadas por una escala ( ) , como mostramos a la derecha de la figura 2.4:
( ) ( ) ( ) (2.7) siendo la diferencia de escalas.
Por último, se detectan los puntos máximos y mínimos de la comparando cada punto con sus ocho puntos vecinos y sus nueve vecinos en las escalas adyacentes, como vemos en la figura 2.5. Si el valor de la del píxel es el máximo o mínimo en comparación con el valor de la de sus 26 píxeles vecinos, el punto es un candidato a keypoint.
19
Figura 2.5. Píxeles con los que comparar cada punto en búsqueda de máximos o mínimos. Imagen extraída de [40].
A continuación, una vez que hemos encontrado los candidatos a keypoints en la imagen, almacenamos la localización y escala de los puntos de interés que son estables.
Localización de los puntos clave
Cuando hemos localizado los candidatos a keypoints procedemos a realizar un estudio sobre la estabilidad de los mismos. Aquellos puntos que estén situados sobre los bordes, o tengan bajo contraste, son muy vulnerables al ruido y serán descartados. Para localizar los puntos inestables se utilizan los siguientes criterios:
o Los puntos cuyo valor de la sea inferior a un umbral determinado, se eliminan de la siguiente etapa. Se considera que estos puntos tienen un bajo contraste y no son lo suficientemente estables.
o También se descartan los puntos localizados sobre bordes. Un keypoint situado sobre un borde contiene una alta inestabilidad incluso con pequeños ruidos. Además, su función tiene una gran respuesta en dirección perpendicular del borde pero muy pobre en dirección del borde. Para realizar estos cálculos se utiliza el Hessiano y se limita la relación entre la respuesta paralela y perpendicular al borde. La proporción máxima utilizada es de 10.
Una vez descartados los puntos inestables, tendremos localizados el conjunto total de puntos de interés en la imagen.
Asignación de orientación
En esta etapa, cada keypoint adquiere invarianza frente a la rotación mediante la asignación de una orientación dominante. Para esto, debemos calcular la magnitud ( ) y
20
la orientación ( ) del gradiente del keypoint y de los píxeles alrededor en una región vecina a través de las siguientes ecuaciones:
( ) √( ( ) – ( – )) ( ( ) – ( – )) (2.8)
( ) ( ) ( )
( ) ( ) (2.9)
utilizando para la escala del keypoint actual. Con las magnitudes y orientaciones del keypoint y sus puntos vecinos se crea un histograma. El histograma tiene 36 franjas de 10 grados cada una que cubren los 360 grados posibles. Para crear el histograma se pondera cada punto en función de la magnitud y de la distancia al keypoint con una gaussiana. La franja del histograma con un valor más alto corresponde con la dirección dominante del gradiente. Puede existir más de una dirección dominante, ya que, todas las franjas con un valor superior al 80% del valor de la magnitud principal se considerarán como orientaciones dominantes. Los puntos que tengan más de una dirección dominante poseerán una mayor estabilidad.
Generación de los descriptores de los puntos clave
Una vez que se ha asignado para cada punto de interés una posición, una escala y una orientación dominante, se generará un descriptor que contenga información de su región vecina utilizando histogramas de orientaciones. La creación del descriptor se realiza con los datos previamente calculados en la fase de asignación de orientación.
Para cada punto en una región de píxeles alrededor del keypoint, se calcula su magnitud del gradiente y se pondera por una Gaussiana. Esta región, a su vez, es dividida en subregiones de píxeles. Por cada subregión se crea un histograma que contiene la suma de las magnitudes ponderadas, en función de la dirección de cada píxel, en 8 franjas proporcionales a 45 grados, como mostramos en la figura 2.6. Así obtenemos 16 histogramas por cada keypoint.
21
Figura 2.6. Matriz 2x2 del descriptor calculado a partir de un conjunto de 8x8 píxeles alrededor del punto de interés.
Imagen extraída de [40].
El descriptor de cada keypoint está formado por un vector que tiene los valores de las 8 direcciones de cada uno de los 16 histogramas calculados. Así tenemos un vector de características de 128 elementos.
Por último, se tiene para cada punto de interés detectado la localización ( ) en la imagen original, una orientación dominante, una escala y un vector de características asociado a su región vecina.