Wie lässt sich die Oktave und Größe für visuelle Merkmale an den Harris-Ecken schätzen?

  • Ich arbeite zurzeit mit mehreren Feature-Detektoren, die von OpenCV als Grundlage für das visuelle Feature-Matching zur Verfügung gestellt werden, und vergleiche deren Leistung.

    Ich verwende SIFT Deskriptoren. Ich habe zufriedenstellende Übereinstimmungen (nach Zurückweisen von fehlerhaften Übereinstimmungen) beim Erkennen der MSER - und DoG (SIFT) -Funktionen erzielt.

    Ich teste meinen Code mit GFTT (Gute Eigenschaften für die Verfolgung von Harris-Ecken) , um einen Vergleich zu erhalten, und auch, weil in der Endanwendung eine Reihe von GFTT-Funktionen aus dem visuellen Feature-Tracking-Prozess verfügbar sein wird.

    Ich verwende cv::FeatureDetector::detect(...) , das mir ein std::vector<cv::KeyPoint> enthält, das mit erkannten Features / Keypoints / Regions of Interest gefüllt ist. Die Struktur cv::KeyPoint enthält grundlegende Informationen zum Standort des Features sowie Informationen zu size und octave, in denen der Schlüsselpunkt erkannt wurde.

    Meine ersten Ergebnisse mit < em> GFTT war schrecklich, bis ich die typischen Parameter size und octave in verschiedenen Arten von Features verglichen habe:

    • MSER setzt die Größe (zwischen 10 und 40px) und belässt die Oktave auf 0
    • DoG (SIFT ) legt sowohl die Größe als auch die Oktave fest ( Größe / Oktave Verhältnis zwischen 20 und 40)
    • GFTT Die Parameter sind immer : size = 3 , Oktave = 0

    Ich gehe davon aus, dass der Hauptzweck der GFTT -Funktionen nicht beim Abgleich, sondern nur beim Tracking verwendet werden sollte. Dies erklärt die geringe Qualität der Übereinstimmungsergebnisse, da die aus solchen winzigen Merkmalen extrahierten Deskriptoren aufhören, diskriminierend und für viele Dinge unveränderlich zu sein , einschließlich kleiner Verschiebungen um 1 Pixel.

    Wenn ich size von GFTT manuell auf 10 - 12 setze, erhalte ich gute Ergebnisse, sehr ähnlich t

    09 May 2012
    penelope
2 answers
  • Ich bin mir nicht sicher, ob es tatsächlich eine gute Antwort auf Ihre genaue Frage gibt: Die Skalierung von SIFT und SURF wurde entwickelt, um die "gute" relevante Nachbarschaftsgröße um einen eckigen Eckpunkt automatisch zu schätzen (Was sind die guten Eigenschaften, die man verfolgen kann.)

    Jetzt wären die positiven Antworten:

    • Erstellen Sie eine Datenbank mit Schlüsselpunkten und guten Übereinstimmungen (z. B. mithilfe von quadratischen Kalibrierungsmustern) und erstellen Sie eine automatisierte Leistungsbewertung für diese Datenbank, um die richtige Größe zu ermitteln. Diese Aufgabe kann tatsächlich automatisiert werden (siehe die Arbeit von Mikolajczyk und Schmid über die Punktvergleichsbewertung).

    • binden Sie Ihre guten Eigenschaften in eine Bildpyramide ein, um auch eine Art davon zu haben mit ihnen verbunden. Sie können nach Referenzen zu FAST- und Harris-Interessenspunkten mit mehreren Skalen suchen, die dieser Prozedur sehr ähnlich sind.

    Um heuristisch zu sein Wenn Sie die maximale Blockgröße ermitteln, können Sie Schätzwerte für Ihre Bilder mit einer Box-Unschärfe berechnen (was mehr oder weniger dem BlockSize-Operator entspricht) und sehen, wann die Ecke verschwindet. Beachten Sie jedoch, dass mehr Unschärfe die Ecke von ihrer tatsächlichen Position entfernt.

    Wenn Sie wirklich nach einer schnellen und schmutzigen Lösung suchen, versuchen Sie die Größen zwischen 5x5 und 11x11 (typische Größen, die beim Stereoblock-Matching verwendet werden). Wenn Sie nach einem intellektuell befriedigenden Kriterium suchen, versuchen Sie, die Wahrscheinlichkeit einer guten Übereinstimmung zweier Merkmalspunkte unter Ihrem Geräuschpegel zu maximieren.

    09 May 2012
    sansuiso
  • Damit Sie die besten Parameter für die Detektoren ermitteln können, verfügt OpenCV über AjusterAdapter zu diesem Zweck. Ich habe es selbst nie benutzt, aber es ist wahrscheinlich die Standardmethode, um die Parameter programmatisch zu bestimmen. Beachten Sie auch, dass Keypoints zwar mehrere Eigenschaften haben, aber nicht alle für alle Algorithmen sinnvoll sind. Da die Keypoint-Struktur für verschiedene Algorithmen verwendet wird, enthält sie alle diese Felder, aber manchmal werden sie nicht verwendet. Deshalb erhalten Sie diese Oktave = 0; IMO.

    13 June 2012
    Webjedi