Pregunta

He utilizado el SIFT implementación de < a href = "http://www.vlfeat.org/overview/sift.html" rel = "nofollow noreferrer"> Andrea Vedaldi , para calcular los descriptores a los pulverulentos de dos imágenes similares (la segunda imagen es en realidad un zoom de la imagen del mismo objeto desde un ángulo diferente).

Ahora no soy capaz de averiguar cómo comparar los descriptores de decir qué tan similares son las imágenes

Sé que esta pregunta no es responsable a menos que realmente haya jugado con este tipo de cosas antes, pero pensé que alguien que ha hecho esto antes reconociese esto , por lo que publicado 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);
¿Fue útil?

Solución

En primer lugar, ¿no se supone que se utiliza en lugar de tamizar vl_sift?

En segundo lugar, puede utilizar SIFT coincidente función para encontrar correspondencias en las dos imágenes. He aquí algunos ejemplos de código:

    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:

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

A continuación, encuentro dos puntos en F2, digo U & V que tienen el más bajo y la distancia de segundo más bajo (por ejemplo, Du y Dv) a partir de P respectivamente.

Esto es lo que Lowe recomienda: si Dv / Du> = umbral (I utiliza 1,5 en el código de ejemplo), entonces este partido es aceptable; Si no, es ambigua corresponde y es rechazado como una correspondencia y no coincide con ningún punto en F2 para P. En esencia, si hay una gran diferencia entre los mejores y los segundos mejores partidos, se puede esperar que esto sea un partido de calidad.

Esto es importante ya que hay una gran cantidad de posibilidades de partidos ambiguos en una imagen: imagine puntos coincidentes en un lago o un edificio con varias ventanas, los descriptores pueden ser muy similares, pero la correspondencia es obviamente erróneo

.

Puede hacer el juego en cualquier número de maneras .. usted mismo lo puede hacer muy fácilmente con MATLAB o puede acelerarlo mediante el uso de una KD-árbol o un aproximado de búsqueda número más cercano como FLANN que ha sido implementado en OpenCV .

EDIT: Además, hay varias implementaciones kd-árbol en MATLAB

Otros consejos

Debe leer papel de David Lowe, que habla de cómo para hacer exactamente eso. Debería ser suficiente, si se desea comparar imágenes del mismo objeto exacto. Si desea hacer coincidir las imágenes de diferentes objetos de la misma categoría (por ejemplo, automóviles o aviones) es posible que desee ver en la pirámide Partido Kernel por Grauman y Darrell.

Trate de comparar cada descriptor de la primera imagen con los descriptores de la segunda situada en una vecindad cercana (utilizando la distancia euclidiana). De este modo, se asigna una puntuación a cada descriptor a partir de la primera imagen en función del grado de similitud entre éste y el descriptor de vecino más similar de la segunda imagen. Una medida estadística (suma, la media, la dispersión, la media de error, etc.) de todas estas calificaciones le da una estimación de la similitud de las imágenes son. Experimentar con diferentes combinaciones de tamaño y proximidad medida estadística para darle la mejor respuesta.

Si sólo desea comparar y has imagen girada con el centro de rotación conocida puede utilizar correlación de fase en coordenadas log-polar. 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 euclídea en valor absoluto de los coeficientes de Fourier.

Si desea comparar SIFT descriptor, junto distancia euclídea también puede utilizar "distancia difusa" - conseguir descriptor en la escala cada vez más áspero y concatenar con descriptor originales. Esa similitud característica forma "a gran escala" tendría más peso.

Si usted quiere hacer coincidencia entre las imágenes, se debe utilizar vl_ubcmatch (en caso de que no lo ha utilizado). Se puede interpretar 'puntuaciones de la salida para ver qué tan cerca están las características. Esto representa el cuadrado de la distancia euclidiana entre el descriptor de función de dos a juego. También puede variar el umbral entre Coincidencia y segundo mejor partido como entrada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top