Der höchste Peak im Histogramm wird und jeder Peak über 80% davon wird auch berücksichtigt, um die Orientierung zu berechnen. Es werden Schlüsselpunkte mit derselben Position und Skalierung, aber unterschiedlichen Richtungen erstellt. Es trägt zur Stabilität des Matchings bei.
Schlüsselpunktdeskriptor
An diesem Punkt hat jeder Schlüsselpunkt eine Position, Skalierung und Ausrichtung. Als nächstes wird ein Deskriptor für den lokalen Bildbereich für jeden Schlüsselpunkt berechnet, der für Variationen wie Änderungen des Standpunkts und der Beleuchtung so unverwechselbar und invariant wie möglich ist.
Dazu wird ein 16×16-Fenster um den Schlüsselpunkt genommen. Es ist in 16 Unterblöcke von 4×4 Größe unterteilt.
For each sub-block, 8 bin orientation histogram is created.
So 4 X 4 descriptors over 16 X 16 sample array were used in practice. 4 X 4 X 8 directions give 128 bin values. It is represented as a feature vector to form keypoint descriptor. Dieser Funktionsvektor führt zu einigen Komplikationen. Wir müssen sie loswerden, bevor wir den Fingerabdruck finalisieren.
Rotationsabhängigkeit Der Merkmalsvektor verwendet Gradientenorientierungen. Wenn Sie das Bild drehen, ändert sich alles. Alle Gradientenausrichtungen ändern sich ebenfalls. Um eine Rotationsunabhängigkeit zu erreichen, wird die Drehung des Schlüsselpunkts von jeder Ausrichtung subtrahiert. Somit ist jede Gradientenorientierung relativ zur Ausrichtung des Schlüsselpunkts.
Beleuchtungsabhängigkeit Wenn wir große Zahlen haben, können wir Beleuchtungsunabhängigkeit erreichen. Also wird jede Zahl (der 128) größer als 0,2 in 0,2 geändert. Dieser resultierende Merkmalsvektor wird wieder normalisiert. Und jetzt haben Sie einen beleuchtungsunabhängigen Merkmalsvektor!
Schlüsselpunktübereinstimmung
Schlüsselpunkte zwischen zwei Bildern werden durch die Identifizierung ihrer nächsten Nachbarn abgeglichen. Aber in einigen Fällen, Das zweitnächste Spiel kann dem ersten sehr nahe sein. Dies kann durch Lärm oder andere Gründe geschehen. In diesem Fall wird das Verhältnis von nächstgelegener Entfernung zur zweitnächsten Entfernung genommen. Wenn es größer als 0,8 ist, werden sie abgelehnt. Es beseitigt etwa 90% der falschen Übereinstimmungen, während nur 5% der richtigen Übereinstimmungen gemäß dem Papier verworfen werden.
Implementierung
Ich konnte sift mit OpenCV(3.4) implementieren. So habe ich es gemacht:
Github-Link für den Code: https://github.com/deepanshut041/feature-detection/tree/master/sift