Na przykład podczas korzystania z OpenCV algorytmy takie jak SIFT lub SURF są często używane do wykrywania punktów kluczowych. Moje pytanie brzmi: czym właściwie są te kluczowe punkty?
Rozumiem, że są to pewnego rodzaju „interesujące miejsca” na obrazie. Wiem też, że są one niezmienne w skali i są okrągłe.
Dowiedziałem się też, że mają orientację, ale nie mogłem zrozumieć, co to właściwie jest. Czy to kąt, ale między promieniem a czymś? Czy możesz wyjaśnić? Myślę, że najpierw potrzebuję czegoś prostszego, a potem łatwiej będzie mi zrozumieć artykuły.
Odpowiedzi:
To bardzo dobre pytania. Omówmy każdy punkt jeden po drugim:
Punkty kluczowe to to samo, co punkty zainteresowania. Są to lokalizacje przestrzenne lub punkty na obrazie, które określają, co jest interesujące lub co wyróżnia się na obrazie. Wykrywanie punktów zainteresowania jest w rzeczywistości podzbiorem wykrywania plamek , który ma na celu znalezienie interesujących regionów lub obszarów przestrzennych na obrazie. Powodem, dla którego punkty kluczowe są wyjątkowe, jest to, że bez względu na to, jak zmienia się obraz ... czy obraz się obraca, kurczy / rozszerza, jest tłumaczony (tak przy okazji, wszystko to byłoby transformacją afiniczną ...) lub podlega zniekształceniom ( tj. transformacja projekcyjna lub homografia ), powinieneś być w stanie znaleźć to samopunkty kluczowe w tym zmodyfikowanym obrazie w porównaniu z oryginalnym obrazem. Oto przykład z postu, który napisałem jakiś czas temu:
Źródło: moduł 'obiekt' nie ma atrybutu 'drawMatches' opencv python
Obraz po prawej stronie to obrócona wersja obrazu po lewej stronie. Pokazałem również tylko 10 najlepszych dopasowań między dwoma obrazami. Jeśli spojrzysz na 10 najlepszych meczów, są to punkty, na których prawdopodobnie chcielibyśmy się skupić, abyśmy mogli przypomnieć sobie, o czym był obraz. Chcielibyśmy skupić się na twarzy operatora, a także aparacie, statywie i niektórych ciekawych teksturach budynków w tle. Widzisz, że te same punkty zostały znalezione między dwoma obrazami i zostały one pomyślnie dopasowane.
Dlatego należy od tego odjąć, że są to punkty na obrazie, które są interesujące i że należy je znaleźć niezależnie od tego, jak obraz jest zniekształcony.
Masz rację. Niezmienność skali oznacza, że niezależnie od tego, jak skalujesz obraz, nadal powinieneś być w stanie znaleźć te punkty.
Teraz przejdziemy do części deskryptorowej . Co sprawia, że keypoints różni między ramami jest sposób opisać te keypoints. Są to tak zwane deskryptory . Z każdym wykrytym punktem kluczowym jest powiązany deskryptor, który mu towarzyszy. Niektóre frameworki wykrywają tylko punkty kluczowe, podczas gdy inne są po prostu ramami opisu i nie wykrywają punktów. Są też takie, które robią jedno i drugie - wykrywają i opisują kluczowe punkty. SIFT i SURF to przykłady frameworków, które zarówno wykrywają, jak i opisują punkty kluczowe.
Deskryptory dotyczą głównie zarówno skali, jak i orientacji punktu kluczowego. Kluczowe punkty, które obaliliśmy, ale potrzebujemy części deskryptora, jeśli naszym celem jest próba dopasowania między punktami kluczowymi na różnych obrazach. Otóż, co masz na myśli przez „kołowy”… to koreluje ze skalą, w której punkt został wykryty. Weźmy na przykład ten obraz, który pochodzi z samouczka VLFeat Toolbox :
Widzisz, że wszystkie żółte punkty są punktami zainteresowania, ale niektóre z nich mają inny promień okręgu. Te dotyczą skali . Punkty zainteresowania działają w sensie ogólnym, to rozkładanie obrazu na wiele skal. Sprawdzamy punkty zainteresowania w każdej skali i łączymy je wszystkie razem, aby uzyskać ostateczny wynik. Im większy „okrąg”, tym większa była skala, na której wykryto punkt. Istnieje również linia, która promieniuje od środka koła do krawędzi. To jest orientacja punktu kluczowego, którą omówimy dalej.
Zasadniczo, jeśli chcesz wykryć punkty kluczowe niezależnie od skali i orientacji, kiedy mówią o orientacji punktów kluczowych, tak naprawdę mają na myśli to, że przeszukują otoczenie pikseli otaczające punkt kluczowy i zastanawiają się, w jaki sposób jest zorientowane to sąsiedztwo pikseli lub w jakim kierunku ta łatka jest zorientowany. Zależy to od tego, na jaką ramkę deskryptora patrzysz, ale ogólną zasadą jest wykrycie najbardziej dominującej orientacji kątów gradientu w łatce . Jest to ważne przy dopasowywaniuabyś mógł dopasować razem kluczowe punkty. Spójrz na pierwszą figurę, którą mam z dwoma kamerzystami - jeden obrócony, a drugi nie. Jeśli przyjrzysz się niektórym z tych punktów, jak możemy dowiedzieć się, jak jeden punkt pasuje do drugiego? Możemy łatwo zidentyfikować, że górna część kamerzysty jako punkt zainteresowania pasuje do wersji obróconej, ponieważ przyglądamy się punktom otaczającym punkt kluczowy i widzimy, w jakiej orientacji znajdują się wszystkie te punkty ... a stamtąd tak orientacja jest obliczana.
Zwykle, gdy chcemy wykryć punkty kluczowe, po prostu patrzymy na lokalizacje. Jeśli jednak chcesz dopasować punkty kluczowe między obrazami, zdecydowanie potrzebujesz skali i orientacji, aby to ułatwić.
Mam nadzieję że to pomoże!
źródło
Nie jestem zaznajomiony z SURFEM, ale mogę opowiedzieć o SIFT, na którym SURF jest oparty. Na koniec zamieściłem kilka uwag o SURF-u, ale nie znam wszystkich szczegółów.
SIFT ma na celu znalezienie bardzo charakterystycznych lokalizacji (lub punktów kluczowych ) na obrazie. Lokalizacje to nie tylko lokalizacje 2D na obrazie, ale lokalizacje w przestrzeni skali obrazu , co oznacza, że mają trzy współrzędne: x , y i skalę . Proces znajdowania punktów kluczowych SIFT jest następujący:
Krok 2 daje nam niezmienność skali, krok 3 daje nam niezmienność rotacji, a krok 4 daje nam rodzaj „odcisku palca”, który można wykorzystać do zidentyfikowania punktu kluczowego. Razem można ich używać do dopasowywania wystąpień tego samego obiektu w dowolnej orientacji i skali na wielu obrazach.
SURF ma na celu osiągnięcie tych samych celów, co SIFT, ale wykorzystuje sprytne sztuczki, aby zwiększyć prędkość.
Do wykrywania blobów używa wyznacznika metody Hessego . Dominującą orientację można znaleźć badając poziome i pionowe odpowiedzi na falki Haara . Deskryptor cechy jest podobny do SIFT, patrząc na orientacje pikseli w 16 lokalnych sąsiedztwach, ale daje w wyniku 64-wymiarowy wektor.
Funkcje SURF można obliczyć do 3 razy szybciej niż funkcje SIFT, ale są tak samo niezawodne w większości sytuacji.
Na przykład:
Dobry samouczek SIFT
Wprowadzenie do SURFU
źródło
tl;dr
różnice między SURF i SIFT.