wprowadzenie przesiać( skala niezmienna charakterystyka transformacji)
główne zalety przesiewania to
- lokalizacja: cechy są lokalne, tak odporne na okluzję i bałagan (bez wcześniejszej segmentacji)
- odrębność: poszczególne cechy można dopasować do dużej bazy danych obiektów
- ilość: można wygenerować wiele funkcji nawet dla małych obiektów
- wydajność: zbliżona do wydajności w czasie rzeczywistym
- rozszerzalność: może być łatwo rozszerzona na szeroką gamę różnych typów funkcji, z każdym dodaniem odporności
jest to część wykrywania i dopasowywania funkcji z serii 7. Inne artykuły zawarte
- Wprowadzenie do wykrywania i dopasowywania funkcji
- Wprowadzenie do detektora narożnego Harrisa
- Wprowadzenie do surfowania (przyspieszone funkcje solidne)
- Wprowadzenie do FAST (funkcje z testu przyspieszonego segmentu)
- Wprowadzenie do BRIEF (binarne solidne niezależne funkcje podstawowe)
- Wprowadzenie do ORB (zorientowany szybki i obracany krótki)
SIFT jest dość skomplikowanym algorytmem. Algorytm SIFT składa się głównie z czterech etapów. Zobaczymy ich po kolei.
- skala-wybór piku przestrzeni: Potencjalna lokalizacja dla znalezienia funkcji.
- lokalizacja punktów kluczowych: dokładne zlokalizowanie punktów kluczowych funkcji.
- Orientation Assignment: Przypisywanie orientacji do punktów klawiszowych.
- deskryptor Keypoint: opisujący punkty klawiatury jako wektor o wysokim wymiarze.
- dopasowanie klawiszy
Skala-wybór piku przestrzeni
obiekty świata rzeczywistego mają znaczenie tylko w określonej skali. Możesz zobaczyć kostkę cukru idealnie na stole. Ale jeśli spojrzymy na całą drogę mleczną, to ona po prostu nie istnieje. Ten wieloskalowy charakter obiektów jest dość powszechny w przyrodzie. A przestrzeń skali próbuje odtworzyć tę koncepcję na cyfrowych obrazach.
dog(różnica jądra Gaussa)
teraz używamy tych rozmytych obrazów do wygenerowania innego zestawu obrazów, różnicy Gaussa (psa). Te obrazy psów są świetne do znajdowania interesujących punktów klawiatury na obrazie. Różnicę Gaussa otrzymuje się jako różnicę Gaussa rozmycia obrazu o dwóch różnych σ, niech będzie σ i kσ. Proces ten odbywa się dla różnych oktaw obrazu w piramidzie Gaussa. Jest on przedstawiony na poniższym obrazku:
znajdowanie punktów klawiszowych
do tej pory generowaliśmy przestrzeń skali i wykorzystywaliśmy przestrzeń skali do obliczenia różnicy gaussów. Są one następnie używane do obliczania Laplacian aproksymacji Gaussa, które są niezmiennicze skali.
jeden piksel na obrazie jest porównywany z jego 8 sąsiadami, a także 9 pikselami w następnej skali i 9 pikselami w poprzedniej skali. W ten sposób przeprowadza się łącznie 26 kontroli. Jeśli jest lokalnym skrajem, jest potencjalnym punktem kluczowym. Zasadniczo oznacza to, że keypoint jest najlepiej reprezentowany w tej skali.
lokalizacja Keypoints
Key0points wygenerowane w poprzednim kroku generują wiele punktów klawiszowych. Niektóre z nich leżą wzdłuż krawędzi, lub nie mają wystarczającego kontrastu. W obu przypadkach nie są one tak przydatne jak funkcje. Więc pozbędziemy się ich. Podejście to jest podobne do podejścia zastosowanego w detektorze narożnym Harris do usuwania cech krawędzi. W przypadku cech o niskim kontraście po prostu sprawdzamy ich intensywność.
użyli rozszerzenia przestrzeni skali Taylora, aby uzyskać dokładniejszą lokalizację skrajności, a jeśli intensywność w tych skrajnościach jest mniejsza niż wartość progowa (0,03 jak na papierze), jest odrzucana. Pies ma wyższą reakcję na krawędzie, więc krawędzie również muszą zostać usunięte. Do obliczenia głównej krzywizny wykorzystali macierz Hesji 2×2 (H).
orientation assignment
teraz mamy uzasadnione punkty kluczowe. Sprawdzono ich stabilność. Znamy już skalę, w której wykryto punkt klawiatury (jest taka sama jak skala rozmytego obrazu). Mamy więc niezmienniczość skali. Następną rzeczą jest przypisanie orientacji do każdego punktu kluczowego, aby uczynić go niezmiennikiem obrotu.
sąsiedztwo jest pobierane wokół punktu kluczowego w zależności od skali, a wielkość gradientu i kierunek są obliczane w tym regionie. Powstaje histogram orientacji z 360 stopniami pokrywającymi 360 stopni. Załóżmy, że kierunek gradientu w określonym punkcie (w „obszarze zbierania orientacji”) wynosi 18,759 stopni, a następnie trafi do kosza o zakresie 10-19 stopni. A „ilość” dodana do kosza jest proporcjonalna do wielkości gradientu w tym punkcie. Gdy zrobisz to dla wszystkich pikseli wokół punktu kluczowego, histogram będzie miał szczyt w pewnym momencie.
przyjmuje się najwyższy szczyt w histogramie i każdy szczyt powyżej 80% jest również brany pod uwagę do obliczenia orientacji. Tworzy punkty kluczowe o tej samej lokalizacji i skali, ale w różnych kierunkach. Przyczynia się do stabilności dopasowania.
deskryptor Keypoint
w tym momencie każdy keypoint ma lokalizację, skalę, orientację. Następnie należy obliczyć deskryptor lokalnego obszaru obrazu o każdym punkcie klawiatury, który jest wysoce charakterystyczny i niezmienny w miarę możliwości dla zmian, takich jak zmiany punktu widzenia i oświetlenia.
aby to zrobić, pobierane jest okno 16×16 wokół punktu klawiatury. Podzielony jest na 16 pod-bloków o wymiarach 4×4.
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. Ten wektor funkcji wprowadza kilka komplikacji. Musimy się ich pozbyć przed finalizacją odcisków palców.
- zależność rotacji wektor funkcji wykorzystuje orientacje gradientu. Oczywiście, jeśli obrócisz obraz, wszystko się zmieni. Wszystkie orientacje gradientu również się zmieniają. Aby uzyskać niezależność obrotu, obrót punktu klawiatury jest odejmowany od każdej orientacji. W ten sposób każda orientacja gradientu jest względna do orientacji punktu klawiatury.
- zależność iluminacji jeśli przekroczymy duże liczby, możemy osiągnąć niezależność iluminacji. Tak więc, każda liczba (z 128) większa niż 0.2 jest zmieniana na 0.2. Ten wynikowy wektor funkcji jest znormalizowany ponownie. A teraz masz wektor funkcji niezależny od oświetlenia!
dopasowanie punktów klawiatury
punkty klawiatury między dwoma obrazami są dopasowywane poprzez identyfikację ich najbliższych sąsiadów. Ale w niektórych przypadkach, drugi najbliżej-mecz może być bardzo blisko do pierwszego. Może się to zdarzyć z powodu hałasu lub z innych powodów. W takim przypadku przyjmuje się stosunek najbliższego dystansu do drugiego najbliższego dystansu. Jeśli jest większa niż 0,8, są one odrzucane. Eliminuje około 90% fałszywych dopasowań, podczas gdy odrzuca tylko 5% poprawnych dopasowań, jak na papierze.
implementacja
udało mi się zaimplementować sift używając OpenCV(3.4). Oto jak to zrobiłem:
Link Github do kodu: https://github.com/deepanshut041/feature-detection/tree/master/sift