Co to są kluczowe punkty w przetwarzaniu obrazu?

80

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.

dephinera
źródło
1
Punkty kluczowe powinny być po prostu punktami (x, y), imo. To, co opisuje punkt, a przede wszystkim region wokół niego, należy nazwać deskryptorem. Niektóre punkty kluczowe mieszają te terminy i stają się punktami z dołączonym wektorem opisu, tak jak wyjaśnił @rayryeng.
LovaBill
@William - To dobra uwaga, którą wiele osób myli. Dodam to do mojego postu. Dzięki!
rayryeng

Odpowiedzi:

127

To bardzo dobre pytania. Omówmy każdy punkt jeden po drugim:

Moje pytanie brzmi: czym właściwie są te kluczowe punkty?

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.

Rozumiem, że są to pewnego rodzaju „interesujące miejsca” obrazu. Wiem też, że są niezmienne w skali i wiem, że są okrągłe.

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 :

Przykład VLFeat

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.

Dowiedziałem się też, że mają orientację, ale nie mogłem zrozumieć, co to właściwie jest. To jest kąt, ale między promieniem a czymś?

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!

rayryeng
źródło
23

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:

  1. rozmycie i ponowne próbkowanie obrazu z różnymi szerokościami rozmycia i częstotliwościami próbkowania, aby utworzyć przestrzeń skali
  2. użyj metody różnicy Gaussa do wykrywania plamek w różnych skalach; centra blob się nasze Punkty charakterystyczne podane w x , y i skali
  3. przypisać każdemu punktowi kluczowemu orientację , obliczając histogram orientacji gradientu dla każdego piksela w jego sąsiedztwie i wybierając pojemnik orientacji z największą liczbą zliczeń
  4. przypisz każdemu punktowi kluczowemu 128-wymiarowy wektor cech oparty na gradientowych orientacjach pikseli w 16 lokalnych otoczeniach

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

eigenchris
źródło
1
Bardzo dobrze. Całkowicie uwielbiam tl;drróżnice między SURF i SIFT.
rayryeng
@rayryeng Dzięki, chociaż to tylko dlatego, że nie wiem wystarczająco dużo, aby powiedzieć cokolwiek więcej. ;) Tak naprawdę wcześniej nie używałem SURFU.
eigenchris
1
Nigdy bym się nie dowiedział! Przy okazji, samouczek SIFT jest klasykiem. To pierwsza rzecz, którą przeczytałem przed artykułem Lowe'a.
rayryeng
3
@rayryeng Autor tutoriala tutaj - miło słyszeć, że Ci się podobało!
Utkarsh Sinha,
@UtkarshSinha Uwielbiam twoją pracę i AI Shack. Pisz dalej!
rayryeng,