Jak wykonać De-Houghing obrazu Hougha przekształconego?

9

Pracuję z kodem znalezionym w Rosetta Code do tworzenia transformacji Hougha. Chcę teraz znaleźć wszystkie linie na obrazie. Aby to zrobić, potrzebuję wartości ρ i θ każdego z pików w przestrzeni Hougha. Przykładowy wynik dla pięciokąta wygląda następująco:

Hough Space

Jak znaleźć pojedynczą współrzędną [θ, ρ] dla każdego z „gorących punktów” widocznych w przestrzeni Hougha?

waspinator
źródło

Odpowiedzi:

9

Znajdujesz współrzędne szczytów, a następnie używa osi do skalowania ich do współrzędnych [θ, ρ].

W zależności od tego, jak głośne są dane, ile fałszywych pików oczekujesz i ile masz czasu, istnieje kilka sposobów na zrobienie tego. Najłatwiej jest wybrać poziom, który jest prawdziwym szczytem, ​​wyciąć wszystkie dane poniżej tego, a następnie wykonać środek ciężkości na każdym szczycie, aby uzyskać jego środek.

Możesz również erodować / wybierać obraz, aż każdy pik będzie jednym pikselem.

Martin Beckett
źródło
1
+1 za precyzyjną odpowiedź. Jak definiujesz / obliczasz center of gravity?
Dipan Mehta
Aby uzyskać większą dokładność, znajdź maksimum, a następnie dopasuj paraboloidę do tego punktu i jego sąsiednich punktów, a następnie znajdź szczyt paraboloidy, który zwykle będzie między pikselami.
endolith
2
@endolith - generalnie w przypadku transformacji Hougha dokładność jest ograniczona przez identyfikację krawędzi na obrazie początkowym i „dyskretyzację” wyniku w przestrzeni Hougha. Jeśli potrzebujesz dokładniejszego wyniku, normalne jest cofanie się i ponawianie transformacji w celu uzyskania bardziej ograniczonego zakresu współrzędnych [θ, ρ], aby uzyskać wyższą rozdzielczość. Hough space wokół znalezionego rozwiązania kursu
Martin Beckett
@DipanMehta - po prostu zsumuj ( wartość x każdego piksela) i (y ..), a następnie podziel przez szerokość X, Y szukanego pola - ale zobacz komentarz do endolitu
Martin Beckett
2

Możesz zlokalizować lokalne maksima dla danego promienia. Na przykład skanujesz obraz Hougha, przyjmując maksima tylko wtedy, gdy są maksymalne w oknie .3×3

Drugim krokiem może być udoskonalenie pozycji piku do dokładności poniżej piksela. Można to zrobić przez dopasowanie paraboli.

Załóżmy, że wartość w obrazie Hougha to gdzie to pozycja 2D. Teraz chciałbyś znaleźć wektor korekcyjny który maksymalizuje . Można to napisać za pomocą rozszerzenia Taylor:f(x)xpf(x+p)

f(x+p)f(x)+pTf(x)+12pTf(x)+p

Wektor korekcyjny jest wtedy

p=f(x)1f(x)

Pochodne można obliczyć na podstawie obrazu Hougha przez różnicowanie skończone .

Zauważ, że jest Hesji , a to 2-wektor (gradient poziomy i pionowy), dlatego jest również 2-wektorem określającym przesunięcie subpiksela, aby uzyskać dokładne położenie lokalnego maksymalizatora.f(x)2×2f(x)p

Powyższe równanie może czasami powodować przesunięcia o więcej niż 1 piksel. W takim przypadku sąsiedztwo maksymalizatora nie ma kształtu parabolicznego i możesz nie chcieć dokonać korekty lub nawet porzucić kandydata na maksymalizator.

Libor
źródło
0

Istnieje bardzo dobra technika opracowana w połowie lat 80. przez Geriga i Kleina. Jest to procedura mapowania wstecznego, która analizuje przestrzeń Hougha w celu zidentyfikowania najbardziej prawdopodobnego punktu związanego z każdym punktem krawędziowym, a następnie konstruuje drugą przestrzeń Hougha, w której mapowanie punktów krawędziowych na parametry jest jeden do jednego, a nie jeden do wielu, co jest zwykle pierwszym etapem. Nie mam odniesienia do ręki, ale zajrzyj do przełomowego artykułu przeglądowego Hough Illingwortha i Kittlera (około 1987?)

pomocny Cięższy
źródło