Pytanie SIFT Davida Lowe'a - Pytanie o skalę i współrzędne obrazu (dziwny problem z przesunięciem)


Zdaję sobie sprawę, że jest to wysoce wyspecjalizowane pytanie .. ale oto idzie. Używam implementacji SIFT do znajdowania dopasowań na dwóch obrazach. Z obecną implementacją, kiedy dopasowuję obraz do wersji 90 lub 180 stopni, uzyskuję spójne wyniki, które są równe około pół piksela, ale różnią się w zakresie. Na przykład, jeśli dopasowanie zostanie znalezione we współrzędnych pikselowych (x, y) w im1, to odpowiadające im dopasowanie w jego obróconym o 90 stopni obrazie im2 wynosi (x, y + 0.5). Jeśli używam obrazu o 180 stopniach, przesunięcie pojawia się zarówno w współrzędnych xi y, jak i tylko w x, jeśli używam obracanego obrazu 270 stopni (-90).

1) Po pierwsze, zakładam, że SIFT powinien dać mi tę samą pasującą lokalizację w obróconym obrazie. Domyślne założenie jest takie, że obrót nie zmienia wartości pikseli obrazu, który potwierdziłem, jest prawdziwy. (Używam widoku IRFAN do obracania i zapisywania jako .pgm, a wartości pikseli pozostają niezmienione).

2) Mam inne implementacje, które nie dają tego offsetu.

3) Zakładam, że to przesunięcie jest powiązane z programowaniem i prawdopodobnie ma do czynienia z konwersją ze współrzędnych punktów klucza w skali do współrzędnej punktu obrazu przestrzeni.

Mam nadzieję, że ktoś natknął się na ten problem lub może wskazać mi odniesienie do konwersji z przestrzeni skalowej na przestrzeń obrazu.


12
2018-06-10 20:33


pochodzenie


Interesujące, czy masz jakiś kod do udostępnienia? - Karel Petranek
Myślę, że zapomniałeś części pytania dotyczącej pytania. - ildjarn
Czy jest to obraz z kamery lub obraz medyczny? Czy musisz uwzględnić odstępy między pikselami? - nav
Czy możesz zamieścić przykładowe obrazy? - Martin Thompson


Odpowiedzi:


W przeciwieństwie do twierdzeń Mikołaja, możliwe jest uzyskanie skalowania i orientacji z SIFT. SIFT próbuje znaleźć skalę z największym ekstrema DOG (s), a także znajduje dominującą orientację (r). Każdy wektor lokalizacji dla funkcji SIFT powraca (x, y, s, r)

Aby zobaczyć, w jaki sposób przestrzeń w skali przekształca się w piksele, spróbuj VLFeat's realizacja. W szczególności użyj vl_plotsiftdescriptor, aby narysować deskryptory. Możesz zobaczyć, jak s Skale względem pikseli dla tej implementacji. Aby dowiedzieć się innych implementacji, znajdź tę samą funkcję z obu implementacji i zobacz, jak współczynnik skali s różni się.


4
2018-06-16 16:24





Najpierw ogólny komentarz:

SIFT oferuje funkcje z pozycjami x, y we współrzędnych pikseli. Nie mówi nic bezpośrednio o skali lub rotacji danej cechy po projekcie, a tak naprawdę jest to cechą charakterystyczną SIFT, że wektor cech jest niezmienny w przypadku tego typu transformacji (tj. Dlatego działa SIFT). ~~ (EDYTOWAĆ: To źle, WTF myślałem, kiedy to pisałem?)

Przesunięcie o 0,5 piksela jest nieistotne i może istnieć wiele możliwych wyjaśnień tej różnicy. Jedną z możliwości jest to, że dwie implementacje wykorzystują różne współrzędne początkowe; na przykład jeden umieszcza pochodzenie pośrodku, a drugi umieszcza go w rogu. Może to wpłynąć na zaokrąglenia, które mogą stanowić różnicę 0,5 w zgłaszanych lokalizacjach pikseli. Inną możliwością jest to, że różnią się one liczbą użytych próbek obrotowych; a może na liczbie skal, które są brane pod uwagę. Zmiana któregokolwiek z tych parametrów może mieć wpływ na obserwowaną funkcję nawet o kilka pikseli. Oczywiście wszystko to jest czystą spekulacją, ponieważ trzeba by było zobaczyć implementację, aby powiedzieć coś ostatecznego.

Teraz, aby rozwiązać bardziej szczegółowe problemy:

  1. To złe założenie. Próbki z próbkowaną prostotą nie są generalnie niezmienne w obrocie. Nawet obracanie o wielokrotność 90 stopni może powodować problemy, jeśli implementacja SIFT powoduje próbkowanie pewnej liczby obrotów, która nie jest wielokrotnością 4. Jednak przy wystarczającej liczbie próbek można się spodziewać, że otrzyma Blisko poprawny wynik, ale prawie nigdy nie będzie dokładny (z wyjątkiem bardzo szczególnych zdegenerowanych sytuacji).

  2. Skąd wiesz, że zapewniają właściwą kompensację? Mogą to być wszystkie klony lub porty o tej samej podstawie kodu i mogą mieć podobne błędy.

  3. Nie wiem, dlaczego spodziewałbyś się, że będzie taki sam, ponieważ SIFT polega na wielu wewnętrznych współczynnikach twiddle, które mogą się różnić między implementacjami.

Wreszcie, nie jestem pewien, co masz na myśli, mówiąc: "przekształć ze skali w przestrzeń na przestrzeń obrazu". Skala-przestrzeń jest zdefiniowana dla obrazów - nie punktów - i nie ma odwzorowania 1: 1 między współrzędnymi w przestrzeni skali i przestrzeni obrazu. Jeśli chcesz tylko przetłumaczyć obraz w skali skali na zwykły obraz, po prostu weź wycinek w skali 0. Jeśli chcesz zamienić obraz w reprezentację w skali, sprowadź ją na grupę Gaussian o różnych promieniach.


2
2018-06-13 19:36