Bei der Verwendung von OpenCV werden beispielsweise häufig Algorithmen wie SIFT oder SURF verwendet, um Schlüsselpunkte zu erkennen. Meine Frage ist, was sind eigentlich diese Schlüsselpunkte?
Ich verstehe, dass sie eine Art "Punkte von Interesse" in einem Bild sind. Ich weiß auch, dass sie skalierungsinvariant und kreisförmig sind.
Ich fand auch heraus, dass sie Orientierung haben, aber ich konnte nicht verstehen, was das eigentlich ist. Ist es ein Winkel aber zwischen dem Radius und etwas? Können Sie eine Erklärung geben? Ich denke, ich brauche, was ich zuerst brauche, ist etwas Einfacheres und danach wird es einfacher sein, die Papiere zu verstehen.
Antworten:
Das sind einige sehr gute Fragen. Lassen Sie uns jeden Punkt einzeln angehen:
Schlüsselpunkte sind dasselbe wie Interessenpunkte. Sie sind räumliche Positionen oder Punkte in dem Bild , das zu definieren , was ist interessant oder was auffallen im Bild. Die Interessenpunkterkennung ist eigentlich eine Teilmenge der Blob-Erkennung , die darauf abzielt, interessante Regionen oder räumliche Bereiche in einem Bild zu finden. Der Grund, warum Schlüsselpunkte etwas Besonderes sind, liegt darin, dass unabhängig davon, wie sich das Bild ändert ... ob sich das Bild dreht, schrumpft / erweitert, übersetzt wird (all dies wäre übrigens eine affine Transformation ...) oder einer Verzerrung unterliegt ( dh eine projektive Transformation oder Homographie ), sollten Sie in der Lage sein, das gleiche zu findenSchlüsselpunkte in diesem modifizierten Bild beim Vergleich mit dem Originalbild. Hier ist ein Beispiel aus einem Beitrag, den ich vor einiger Zeit geschrieben habe:
Quelle: Modul 'Objekt hat kein Attribut' drawMatches 'opencv Python
Das Bild rechts ist eine gedrehte Version des linken Bildes. Ich habe auch nur die Top 10 Übereinstimmungen zwischen den beiden Bildern angezeigt. Wenn Sie sich die Top-10-Spiele ansehen, sind dies Punkte, auf die wir uns wahrscheinlich konzentrieren möchten, damit wir uns daran erinnern können, worum es in dem Bild ging. Wir möchten uns auf das Gesicht des Kameramanns sowie auf die Kamera, das Stativ und einige der interessanten Texturen auf den Gebäuden im Hintergrund konzentrieren. Sie sehen, dass dieselben Punkte zwischen den beiden Bildern gefunden wurden und diese erfolgreich abgeglichen wurden.
Daher sollten Sie davon Abstand nehmen, dass dies interessante Punkte im Bild sind und dass sie gefunden werden sollten, unabhängig davon, wie das Bild verzerrt ist.
Du hast Recht. Invariante Skalierung bedeutet, dass Sie diese Punkte unabhängig von der Skalierung des Bildes finden können sollten.
Jetzt wagen wir uns in den Deskriptorteil . Was macht keypoints anders zwischen Frameworks ist so , wie Sie beschreiben diese keypoints. Dies sind sogenannte Deskriptoren . Jedem Schlüsselpunkt, den Sie erkennen, ist ein Deskriptor zugeordnet. Einige Frameworks führen nur eine Schlüsselpunkterkennung durch, während andere Frameworks lediglich ein Beschreibungsframework sind und die Punkte nicht erkennen. Es gibt auch einige, die beides tun - sie erkennen und beschreiben die Schlüsselpunkte. SIFT und SURF sind Beispiele für Frameworks, die die Schlüsselpunkte erkennen und beschreiben.
Deskriptoren befassen sich hauptsächlich mit der Skala und der Ausrichtung des Schlüsselpunkts. Die Schlüsselpunkte, auf die wir dieses Konzept festgelegt haben, aber wir benötigen den Deskriptorteil, wenn wir versuchen möchten, Schlüsselpunkte in verschiedenen Bildern abzugleichen. Was Sie nun mit "kreisförmig" meinen ... das korreliert mit der Skala, auf der der Punkt erkannt wurde. Nehmen Sie zum Beispiel dieses Bild aus dem VLFeat Toolbox-Tutorial :
Sie sehen, dass alle Punkte, die gelb sind, Interessenpunkte sind, aber einige dieser Punkte haben einen anderen Kreisradius. Diese befassen sich mit Skalierung . Im Allgemeinen funktionieren Interessenpunkte so, dass wir das Bild in mehrere Skalen zerlegen. Wir prüfen auf jeder Skala nach Interessenpunkten und kombinieren alle diese Interessenpunkte miteinander, um die endgültige Ausgabe zu erhalten. Je größer der "Kreis" ist, desto größer ist der Maßstab, an dem der Punkt erfasst wurde. Es gibt auch eine Linie, die vom Mittelpunkt des Kreises bis zur Kante ausstrahlt. Dies ist die Ausrichtung des Schlüsselpunkts, die wir als nächstes behandeln werden.
Wenn Sie Schlüsselpunkte unabhängig von Skalierung und Ausrichtung erkennen möchten, wenn sie über die Ausrichtung von Schlüsselpunkten sprechen, bedeutet dies im Grunde, dass sie eine Pixelumgebung suchen, die den Schlüsselpunkt umgibt, und herausfinden, wie diese Pixelumgebung ausgerichtet ist oder in welche Richtung sich dieser Patch befindet Es hängt davon ab, welches Deskriptor-Framework Sie betrachten, aber das allgemeine Ziel ist es, die dominanteste Ausrichtung der Gradientenwinkel im Patch zu ermitteln. Dies ist wichtig für den Abgleichso dass Sie Schlüsselpunkte miteinander abgleichen können. Schauen Sie sich die erste Figur an, die ich mit den beiden Kameramännern habe - einer gedreht, der andere nicht. Wenn Sie sich einige dieser Punkte ansehen, wie können wir herausfinden, wie ein Punkt mit einem anderen übereinstimmt? Wir können leicht erkennen, dass die Oberseite des Kameramanns als Interessenpunkt mit der gedrehten Version übereinstimmt, da wir uns die Punkte ansehen, die den Schlüsselpunkt umgeben, und sehen, in welcher Ausrichtung sich all diese Punkte befinden ... und von dort aus ist das so Orientierung wird berechnet.
Wenn wir Schlüsselpunkte erkennen möchten, schauen wir uns normalerweise nur die Standorte an. Allerdings, wenn Sie möchten , passen keypoints zwischen den Bildern, dann müssen Sie auf jeden Fall den Umfang und die Ausrichtung dies zu erleichtern.
Hoffe das hilft!
quelle
Ich bin mit SURF nicht so vertraut, aber ich kann Ihnen von SIFT erzählen, auf dem SURF basiert. Ich habe am Ende ein paar Notizen zu SURF gemacht, aber ich kenne nicht alle Details.
SIFT zielt darauf ab, in einem Bild sehr unterschiedliche Orte (oder Schlüsselpunkte ) zu finden . Die Positionen sind nicht nur 2D-Positionen auf dem Bild, sondern Positionen im Skalierungsraum des Bildes , dh sie haben drei Koordinaten: x , y und Skalierung . Der Prozess zum Finden von SIFT-Schlüsselpunkten ist:
Schritt 2 gibt uns eine Skaleninvarianz, Schritt 3 gibt uns eine Rotationsinvarianz und Schritt 4 gibt uns eine Art "Fingerabdruck", der zur Identifizierung des Schlüsselpunkts verwendet werden kann. Zusammen können sie verwendet werden, um Vorkommen desselben Merkmals in jeder Ausrichtung und Skalierung in mehreren Bildern abzugleichen.
SURF zielt darauf ab, die gleichen Ziele wie SIFT zu erreichen, verwendet jedoch einige clevere Tricks, um die Geschwindigkeit zu erhöhen.
Für die Blob-Erkennung wird die Determinante der Hessischen Methode verwendet. Die dominante Orientierung wird durch Untersuchen der horizontalen und vertikalen Reaktionen auf Haar-Wavelets gefunden . Der Feature-Deskriptor ähnelt SIFT und betrachtet die Ausrichtung von Pixeln in 16 lokalen Nachbarschaften, führt jedoch zu einem 64-dimensionalen Vektor.
SURF-Funktionen können bis zu dreimal schneller berechnet werden als SIFT-Funktionen, sind jedoch in den meisten Situationen genauso robust.
Als Referenz:
Ein gutes SIFT-Tutorial
Eine Einführung in SURF
quelle
tl;dr
Unterschiede zwischen SURF und SIFT.