Rozumienie binarnych, niezależnych, niezależnych elementów elementarnych („KRÓTKI”)

14

W jaki sposób deskryptory w algorytmie BRIEF są do siebie dopasowane?

W jaki sposób obraz szablonu znajduje się na innym obrazie? Jak porównujemy deskryptory? Przeczytałem ten artykuł, ale nie rozumiem, jak to zrobili.

Napisali, że porównali deskryptory za pomocą odległości Hamminga, ale w jaki sposób osiąga się niezmienność zmian oświetlenia, wielkości itp.?

maximus
źródło

Odpowiedzi:

15

Po pierwsze, w tym dokumencie nie ma czegoś takiego jak „szablon” - słowo „szablony” ma inne znaczenie w Computer Vision.

Metoda zastosowana w tym artykule jest stosunkowo prosta. Pozwól, że ci to podzielę. Są trzy ważne rzeczy, które musisz zrobić, wykonując zadania, takie jak rozpoznawanie obiektów, dopasowywanie obrazów, szycie obrazów i podobne, przy użyciu funkcji lokalnych

Pierwszą ważną rzeczą jest Wykrywanie; na tym etapie chcesz wykryć interesujące miejsca lub kluczowe punkty, a to oznacza, że ​​chcesz wybrać lokalne punkty (w zasadzie małe łaty), które Twoim zdaniem są interesujące na obrazie, istnieje wiele sposobów, aby to zrobić; ten artykuł nie przyczynia się w tym obszarze. Wydaje się jednak, że używają detektora funkcji SURF i punktów kluczowych CenSurE (możesz je wyszukać, jeśli chcesz dowiedzieć się więcej na ich temat, nie będę mówić o tym kroku, z wyjątkiem tego, że używają funkcji takich jak gradienty i tak dalej, co oznacza, że jeśli masz zdjęcie, jest mało prawdopodobne, aby punkt na środku nieba został wybrany jako punkt zainteresowania, to dlatego, że piksele wokół tego punktu mają tę samą intensywność, rzeczy, które są „zajęte”, są zwykle wybierane jako punkty zainteresowania (np. krawędź / narożniki stołu / budynku).

Po zakończeniu wykrywania opis funkcjinastępuje. Znasz interesujące punkty na obrazie, a teraz chcesz je opisać (w zasadzie chcesz opisać punkty / łaty wokół interesujących punktów). SIFT to jeden z popularnych deskryptorów funkcji. W tym artykule wymyślili nowy, o nazwie KRÓTKI. KRÓTKI opiera się na porównaniach, więc powiedzmy, że mamy łatkę (50 pikseli na 50 pikseli), wybieramy dwa punkty i porównujemy intensywność dwóch punktów, jeśli pierwszy punkt jest większy niż drugi punkt, przypisujemy wartość „ 1 ', w przeciwnym razie' 0 ', robimy to dla kilku par i otrzymujemy ciąg wartości boolowskich. Teraz najważniejsze pytanie brzmi: „jak wybrać parę punktów?”, W artykule wyjaśnili 5 sposobów, względnie podobnych, opiszę pierwszy. To, co robisz, to równomiernie (z równym prawdopodobieństwem) wybierasz punkt od -S / 2 do S / 2, w naszym przykładzie powiedzieliśmy, że rozmiar łatki wynosi 50, więc wybieramy punkt od -25 do 25. Zakładając, że współrzędna 0,0 znajduje się w środku łatki. Oto przykład;

Chcemy wybrać pierwszą parę, każdy punkt składa się ze współrzędnych (X, Y), więc jednolicie wybieramy współrzędną X pierwszego punktu, a następnie współrzędną Y pierwszego punktu, załóżmy, że to (10, -1) , teraz drugi punkt; jednorodnie wybieramy współrzędną X dla drugiego punktu i współrzędną Y dla drugiego punktu, załóżmy, że to (-2,20), teraz otrzymujemy wartości intensywności dla każdego punktu i zobaczymy, który z nich ma większe wartości intensywności - jeśli pierwszy jest większy, przypisujemy pierwszą wartość logiczną do „1”, jeśli nie, przypisujemy „0”. Robimy to dla wielu par i otrzymujemy wektor wartości boolowskich.

* Bardzo ważny punkt: zakładam, że to zadziała, będziesz musiał określić wartość początkową przed generatorem losowym. Oznacza to, że chcesz wybrać te same wartości dla każdej łatki - jest to bardzo ważne, ponieważ podczas porównywania / dopasowywania łat, cały system się zepsuje, jeśli nie zostaną wybrane dokładnie w ten sam sposób. - mam nadzieję, że będzie to miało sens, gdy przeczytasz odpowiedni krok.

Robimy to dla każdego punktu zainteresowania wykrytego przez detektor. Dla każdego punktu zainteresowania otrzymamy wektor wartości boolowskich.


Teraz, aby dopasować dwa obrazy ( trzeci krok; dopasowanie ), robimy dokładnie to samo dla drugiego obrazu, który wykrywamy, a następnie opisujemy za pomocą KRÓTKIEGO. Na przykład załóżmy, że mamy 10 punktów zainteresowania na każdym obrazie (zawsze może to zadziałać, jeśli otrzymamy 10 najciekawszych punktów na każdym obrazie), używamy KRÓTKIEGO do opisania każdej łatki, używając na przykład 50 par, więc każdy obraz zostanie opisany przez 10 wektorów po 50 wartości boolowskich.

Aby porównać dwa obrazy, znajdujemy najbliższego sąsiada każdego wektora od pierwszego obrazu do drugiego wektora z drugiego obrazu. Używamy odległości Hamminga, która jest dość szybka, przykład odległości Hamminga

hammingDistance ((0, 1, 1), (0, 0, 0)) = 2

hammingDistance ((0, 1, 1), (0, 1, 1)) = 0

hammingDistance ((0, 1, 1), (1, 0, 0)) = 3

hammingDistance ((0, 1, 1), (1, 1, 1)) = 1

Zasadniczo ile błędnych korespondencji

Mam nadzieję, że to pomaga

Roronoa Zoro
źródło
Dziękuję bardzo, mogłem zrozumieć algorytm. Ale wciąż mam pytania, co powiesz na afinię, zmiany perspektywy i zmiany oświetlenia? Czy łańcuch bitów będzie podobny w przypadku zmiany oświetlenia lub perspektywy?
maximus
Jeśli wielkość zmiany oświetlenia jest równa dla wszystkich pikseli, tak, nadal będzie działać, jeśli różni się w zależności od piksela (zwiększenie oświetlenia niektórych pikseli, inne zmniejszenie), to jest problem. Wygląda na to, że powinowactwo działa dobrze (na podstawie ich wyników), ale na pewno osiągnie punkt, w którym przestanie działać (właściwie w ich wynikach (ryc. 3) pokazują, że - możesz pobrać obrazy i zobaczyć, co Ściana 1 | 2, Ściana 1 | 3 odpowiadają). Ich metoda nie jest niezmienna rotacja (to nie jest tak trudne do zobaczenia) i wyraźnie o tym wspominają.
Roronoa Zoro
Dziękuję za wyjaśnienia. Naprawdę bardzo dobrze rozumiem KRÓTKI deskryptor.