So schätzen Sie Oktave und Größe für visuelle Merkmale an Harris-Ecken


9

Ich arbeite derzeit mit und vergleiche die Leistung mehrerer von OpenCV bereitgestellter Feature-Detektoren als Grundlage für den visuellen Feature-Matching.

Ich verwende SIFT- Deskriptoren. Ich habe beim Erkennen von MSER- und DoG-Funktionen (SIFT) eine zufriedenstellende Übereinstimmung erzielt (nachdem ich schlechte Übereinstimmungen abgelehnt habe ) .

Derzeit teste ich meinen Code mit GFTT (Good Features to Track - Harris-Ecken) , um einen Vergleich zu erhalten, und auch, weil in der endgültigen Anwendung eine Reihe von GFTT-Funktionen aus dem visuellen Feature-Tracking-Prozess verfügbar sein werden.

Ich verwende, cv::FeatureDetector::detect(...)wodurch ich mit erkannten Merkmalen / Schlüsselpunkten / Regionen von Interessestd::vector<cv::KeyPoint> gefüllt werde . Die Struktur enthält grundlegende Informationen zum Standort des Features sowie Informationen zu und in denen der Schlüsselpunkt erkannt wurde.cv::KeyPointsizeoctave

Meine ersten Ergebnisse mit GFTT waren schrecklich, bis ich die typischen sizeund octaveParameter in verschiedenen Arten von Merkmalen verglichen habe :

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

Ich nehme an , das liegt daran, dass der Hauptzweck von GFTT- Funktionen nicht darin bestand, beim Abgleich, sondern nur beim Tracking verwendet zu werden. Dies erklärt die geringe Qualität der Übereinstimmungsergebnisse, da die aus solch winzigen Merkmalen extrahierten Deskriptoren für viele Dinge , einschließlich kleiner 1-Pixel-Verschiebungen, nicht mehr diskriminierend und unveränderlich sind .

Wenn ich manuell das Set sizevon GFTT auf 10 bis 12 , ich gute Ergebnisse erzielen, sehr ähnlich wie bei der Verwendung von MSER oder Hund (SIFT) .

Meine Frage ist: Gibt es einen besseren Weg, um festzustellen, um wie viel die size(und / oder octave) erhöht werden kann, als nur mit 10 zu sehen, ob es funktioniert ? Ich möchte die Hardcodierung der sizeErhöhung nach Möglichkeit vermeiden und programmgesteuert bestimmen, aber die Hardcodierung ist in Ordnung , solange ich einige solide Argumente habe, die meine Auswahl des neuen Algorithmussize / sizeErhöhungs- / sizeSchätzalgorithmus stützen .


1
Hey @ penelope:

@Sistu hey, das sieht nach einem sehr guten allgemeinen Vergleich von Deskriptoren in einem allgemeinen Fall und mit einem planaren Objekt aus, aber ich arbeite an bestimmten Arten von Bildern und muss meinen eigenen Test durchführen. Außerdem war die Frage viel spezifischer als "Ich brauche Referenzmaterialien, die die Leistung verschiedener Arten von Dekriptoren vergleichen". Es ist ein netter Link, werde es überprüfen.
Penelope

Antworten:


4

Ich bin mir nicht sicher, ob es tatsächlich eine gute Antwort auf Ihre genaue Frage gibt: Das Scale-Space-Ding von SIFT und SURF wurde tatsächlich entwickelt, um die "gute" relevante Nachbarschaftsgröße um einen eckenartigen Schlüsselpunkt automatisch zu schätzen (was gut ist) zu verfolgen sind).

Nun wären positivere Antworten:

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

  • Betten Sie Ihre guten Features in eine Bildpyramide ein, um ihnen auch eine Art Skalierung zuzuordnen. Sie können nach Referenzen zu FAST- und Harris-Interessenpunkten mit mehreren Maßstäben suchen, die diesem Verfahren sehr ähnlich sind.

Um die maximale Blockgröße heuristisch zu ermitteln, können Sie Schätzungen Ihrer 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 auf der Suche nach einer schnellen und schmutzigen Lösung sind, versuchen Sie es mit Größen zwischen 5 x 5 und 11 x 11 (typische Größen, die beim Stereoblock-Matching verwendet werden). Wenn Sie nach einem intellektuell zufriedenstellenden Kriterium suchen, versuchen Sie, die Wahrscheinlichkeit einer guten Übereinstimmung von zwei Merkmalspunkten unter Ihrem Geräuschpegel zu maximieren.


Ich suchte nach einer Lösung, die etwas schneller und schmutziger war als das, was Sie vorschlagen. Außerdem kann ich erst feststellen, ob ein Match gut oder schlecht ist, nachdem ich meine Schlüsselpunkte extrahiert und mit etwas abgeglichen habe. Selbst wenn ich sie ganz zufällig zusammenstelle, bekomme ich ein paar gute Übereinstimmungen - also ist Ihr erster Vorschlag nicht so hilfreich. Was den zweiten Teil betrifft, schneller und schmutziger: Ich weiß, dass es keinen perfekten Parameter gibt, aber wie gesagt, das Erhöhen der Größe auf 12 hat geholfen - die Qualität war vergleichbar mit dem SIFT- und MSER-Matching. Ich habe überhaupt kein Argument, 12 über 100 oder über 34 zu wählen ...
Penelope

0

Um Ihnen zu helfen, die besten Parameter für die Detektoren zu ermitteln, verfügt OpenCV über den AjusterAdapter für diesen Zweck. Ich habe es selbst nie benutzt, aber es ist wahrscheinlich die Standardmethode, um die Parameter programmgesteuert zu bestimmen. Beachten Sie auch, dass Schlüsselpunkte zwar mehrere Eigenschaften haben, jedoch nicht alle für alle Algorithmen sinnvoll sind. Da die Schlüsselpunktstruktur 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.


Ich weiß, dass einige Arten von Merkmalen manchmal für einen bestimmten Zweck nicht der beste Typ sind , aber neuere Arbeiten haben Ansätze ausprobiert, bei denen sie mehr als einen Typ von v.Features / Interessenbereichen verwenden und mit der Kombination bessere Ergebnisse erzielen als mit jedem einzelnen Typ auf eigene Faust (ich kann Links zu Werken hinzufügen, wenn Sie interessiert sind). Außerdem mache ich zumindest einen Teil der Forschung. Daher sollte ich die mit verschiedenen Schlüsselpunkttypen erzielten Ergebnisse ausprobieren und bewerten, auch wenn einige dieser Ergebnisse nicht so gut sind wie der Stand der Dinge. Kunst. Ich werde in AdjusterAdapter schauen, danke.
Penelope

Ich habe gerade die Funktion durchgesehen, die die Schnittstelle bietet. Es kann nur die Anzahl der vom Detektor erkannten Merkmale erhöhen oder verringern. Außerdem habe ich keine Probleme mit erkannten Funktionen. Ich möchte nur eine Möglichkeit, ihre Größe anzupassen, damit sie besser für das Matching verwendet werden können (eine Vergrößerung auf 10 macht das, aber ich habe keine konkrete (ausreichende) Argumentation für diese Wahl)
Penelope
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.