¿Cómo utilizar el algoritmo SIFT para calcular qué tan similares son dos imágenes?


He utilizado el TAMIZ aplicación de las Andrea Vedaldi, para calcular los descriptores de tamizado de dos imágenes similares (la segunda imagen es en realidad una imagen ampliada del mismo objeto desde un ángulo diferente).

Ahora no soy capaz de averiguar cómo comparar los descriptores para decir cuán similares son las imágenes?

Sé que esta pregunta no es respondible a menos que realmente hayas jugado con este tipo de cosas antes, pero pensé que alguien que ha hecho esto antes podría saber esto , así que publiqué la pregunta.

Lo poco que hice para generar los descriptores:

>> i=imread('p1.jpg');
>> j=imread('p2.jpg');
>> i=rgb2gray(i);
>> j=rgb2gray(j);
>> [a, b]=sift(i);  % a has the frames and b has the descriptors
>> [c, d]=sift(j);
Author: Cœur, 2009-10-01

5 answers

Primero, ¿no se supone que debes usar vl_sift en lugar de sift?

En segundo lugar, puede usar SIFT feature matching para encontrar correspondencias en las dos imágenes. Aquí hay un código de ejemplo:

    I = imread('p1.jpg');
    J = imread('p2.jpg');

    I = single(rgb2gray(I)); % Conversion to single is recommended
    J = single(rgb2gray(J)); % in the documentation

    [F1 D1] = vl_sift(I);
    [F2 D2] = vl_sift(J);

    % Where 1.5 = ratio between euclidean distance of NN2/NN1
    [matches score] = vl_ubcmatch(D1,D2,1.5); 

    subplot(1,2,1);
    imshow(uint8(I));
    hold on;
    plot(F1(1,matches(1,:)),F1(2,matches(1,:)),'b*');

    subplot(1,2,2);
    imshow(uint8(J));
    hold on;
    plot(F2(1,matches(2,:)),F2(2,matches(2,:)),'r*');

Vl_ubcmatch () esencialmente hace lo siguiente:

Supongamos que tiene un punto P en F1 y desea encontrar la "mejor" coincidencia en F2. Una forma de hacerlo es comparar el descriptor de P en F1 con todos los descriptores en D2. Por comparar, me refiero a encontrar la distancia euclidiana (o la norma L2 de la diferencia de los dos descriptores).

Entonces, encuentro dos puntos en F2, digamos U & V que tienen la distancia más baja y la segunda más baja (digamos, Du y Dv) de P respectivamente.

Esto es lo que Lowe recomendó: si Dv / Du > = threshold (Usé 1.5 en el código de ejemplo), entonces esta coincidencia es aceptable; de lo contrario, se compara ambiguamente y se rechaza como correspondencia y no coincidimos con ningún punto en F2 a P. Esencialmente, si hay una gran diferencia entre el mejor y el segundo mejor coincidencias, puede esperar que esto sea una coincidencia de calidad.

Esto es importante ya que hay mucho margen para coincidencias ambiguas en una imagen: imagine puntos coincidentes en un lago o un edificio con varias ventanas, los descriptores pueden verse muy similares, pero la correspondencia es obviamente incorrecta.

Puede hacer la coincidencia de cualquier número de maneras .. puede hacerlo usted mismo muy fácilmente con MATLAB o puede acelerarlo utilizando un árbol KD o una búsqueda de números aproximados más cercana como FLANN que se ha implementado en OpenCV.

EDITAR: Además, hay varias implementaciones de árbol kd en MATLAB.

 34
Author: Jacob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-04 15:39:02

Deberías leer el documento de David Lowe, que habla sobre cómo hacer exactamente eso. Debería ser suficiente, si desea comparar imágenes del mismo objeto exacto. Si desea hacer coincidir imágenes de diferentes objetos de la misma categoría (por ejemplo, automóviles o aviones), es posible que desee mirar el Núcleo Pyramid Match de Grauman y Darrell.

 9
Author: Dima,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-01 15:12:53

Intente comparar cada descriptor de la primera imagen con descriptores de la segunda situados en una vecindad cercana (usando la distancia euclidiana). Por lo tanto, se asigna una puntuación a cada descriptor de la primera imagen en función del grado de similitud entre ella y el descriptor vecino más similar de la segunda imagen. Una medida estadística (suma, media, dispersión, error medio, etc.) de todas estas puntuaciones le da una estimación de lo similares que son las imágenes. Experimentar con diferentes combinaciones de tamaño de vecindad y medida estadística para darle la mejor respuesta.

 3
Author: luvieere,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-30 21:48:06

Si solo desea comparar la imagen ampliada y girada con el centro de rotación conocido, puede usar la correlación de fase en coordenadas log-polares. Por la nitidez del pico y el histograma de correlación de fase se puede juzgar qué tan cerca están las imágenes. También puede utilizar la distancia euclidiana en el valor absoluto de los coeficientes de Fourier.

Si desea comparar el descriptor de TAMIZ, además de la distancia euclidiana, también puede usar" distancia difusa": obtener el descriptor en una escala progresivamente más aproximada y concatenar ellos con descriptor original. De esa manera, la similitud de características de" gran escala " tendría más peso.

 2
Author: mirror2image,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-01 19:21:44

Si desea hacer coincidir las imágenes, debe usar vl_ubcmatch (en caso de que no lo haya utilizado). Puede interpretar las 'puntuaciones' de salida para ver qué tan cerca están las características. Esto representa el cuadrado de la distancia euclidiana entre los dos descriptores de entidad coincidentes. También puede variar el umbral entre la mejor coincidencia y la segunda mejor coincidencia como entrada.

 0
Author: Swagatika,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-04 18:48:45