Frage

Ich habe die SIFT Implementierung von < a href = "http://www.vlfeat.org/overview/sift.html" rel = "nofollow noreferrer"> Andrea Vedaldi , den Sift Deskriptoren von zwei ähnlichen Bildern berechnen (das zweite Bild ist tatsächlich ein gezoomte Bild in dem gleichen Objekt aus einem anderen Winkel).

Jetzt bin ich nicht in der Lage um herauszufinden, wie die Deskriptoren zu vergleichen, um zu sagen, wie ähnlich sich die Bilder sind

Ich weiß, dass diese Frage nicht beantwortbar ist, wenn Sie tatsächlich mit dieser Art von Dingen, bevor gespielt haben, aber ich dachte, dass jemand, der dies getan hat, bevor vielleicht weiß , so gab ich die Frage.

die klein Ich habe die Deskriptoren zu erzeugen:

>> 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);
War es hilfreich?

Lösung

Als erstes werden Sie verwenden vl_sift eigentlich nicht statt zu sichten?

Zweitens können Sie Merkmalsanpassung verwenden SIFT Korrespondenzen in den beiden Bildern zu finden. Hier ist ein Beispielcode:

    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 () im Wesentlichen führt Folgendes aus:

Angenommen, Sie einen Punkt P in der Formel 1 haben, und Sie wollen das „beste“ Spiel in F2 zu finden. Eine Möglichkeit, das zu tun, ist der Deskriptor von P in der Formel 1 für alle Deskriptoren in D2 zu vergleichen. Durch Vergleich, ich meine den euklidischen Abstand (oder die L2-Norm der Differenz der beiden Deskriptoren) finden.

Dann finde ich zwei Punkte in F2, sagen U & V, die den niedrigsten und zweitniedrigsten Abstand (sagen wir, Du und Dv) von P haben, jeweils.

Hier ist, was Lowe empfohlen: wenn Dv / Du> = Schwelle (I verwendete 1,5 in dem Beispielcode), dann ist dieses Spiel ist akzeptabel; Ansonsten ist es zweideutig abgestimmt und wird als Korrespondenz abgelehnt und wir jeden Punkt in F2 zu P. nicht im Wesentlichen übereinstimmen, wenn es zwischen den besten und zweitbesten Streichhölzer ein großer Unterschied ist, können Sie dies erwarten eine Qualität Spiel zu sein.

Dies ist wichtig, da es in einem Bild eine Menge Spielraum für zweideutige Begegnungen ist: in einem See oder ein Gebäude mit mehreren Fenstern Matchpunkt vorstellen, können die Deskriptoren sehr ähnlich aussehen, aber die Übereinstimmung ist offensichtlich falsch

.

Sie können in einer beliebigen Anzahl von Möglichkeiten, um die passende zu tun .. Sie können es selbst tun sehr leicht mit MATLAB oder Sie können es durch die Verwendung eines KD-Baum oder eine ungefähre nächste Nummer suchen wie FLANN die in umgesetzt wurde: OpenCV .

EDIT: Auch gibt es mehrere kd-Baum-Implementierungen in MATLAB

Andere Tipps

Sie sollten David Lowe Papier , lesen, die erzählt, wie zu tun genau das. Es sollte ausreichend sein, wenn Sie Bilder von der exakt gleichen Objekt vergleichen möchten. Wenn Sie Bilder von verschiedenen Objekten der gleichen Kategorie (zB Autos oder Flugzeuge) übereinstimmen sollten Sie bei der Pyramid Spiel Kernel von Grauman und Darrell.

Versuchen jeden Deskriptor aus dem ersten Bild mit Deskriptoren von dem zweiten in enger Nähe (unter Verwendung des euklidischen Abstands) gelegen zu vergleichen. So weisen Sie eine Punktzahl für jeden Deskriptor aus dem ersten Bild basierend auf dem Grad der Ähnlichkeit zwischen ihm und dem ähnlichsten Nachbarn Descriptor aus dem zweiten Bild. Ein statistisches Maß (Summe, Mittelwert, Dispersion, mittlerer Fehler, usw.) aller dieser Noten gibt Ihnen eine Schätzung, wie ähnlich sich die Bilder sind. Experimentieren Sie mit verschiedenen Kombinationen von Größe und Nähe statistischen Maße Ihnen die beste Antwort zu geben.

Wenn Sie nur wollen, vergleichen gezoomt und gedreht Bild mit bekanntem Drehzentrum Sie Phasenkorrelation in Log-Polarkoordinaten verwenden können. Durch die Schärfe der Spitze und ein Histogramm der Phasenkorrelation können Sie beurteilen, wie nah Bilder sind. Sie können auch euklidischen Abstand auf Absolutwert der Fourier-Koeffizienten verwendet werden.

Wenn Sie vergleichen wollen Descriptor SIFT, neben euklidischem Abstand können Sie auch „diffusen Abstand“ verwenden - Descriptor auf zunehmend rauher Skala immer und sie mit Original-Descriptor verketten. Auf diese Weise „in großem Maßstab“ Feature Ähnlichkeit würde mehr Gewicht hat.

Wenn Sie zwischen den Bildern tun passende möchten, sollten Sie verwenden vl_ubcmatch (falls Sie haben sie nicht benutzt). Sie können die Ausgabe ‚Noten‘ interpretieren, um zu sehen, wie nahe die Funktionen sind. Dies stellt das Quadrat der euklidischen Entfernung zwischen dem Merkmale Deskriptor zwei passenden. Sie können auch die Schwelle zwischen Besten Spiel und 2. bester Übereinstimmung als Eingabe variieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top