38

Po prostu jestem żądny przygód i robię pierwszy krok w stronę komputerowej wizji. Próbowałem samodzielnie wdrożyć transformację Hough, ale nie dostaję całego obrazu. Czytałem wpis wikipedia, a nawet oryginalne "wykorzystanie transformacji hough do wykrywania linii i krzywych na zdjęciach" autorstwa Richarda Dudy i Petera Harta, ale nie pomogło.Wyjaśnij transformację Hough

Czy ktoś może mi pomóc w bardziej przyjaznym języku?

Odpowiedz

32

Częstsze jest myślenie o linii we współrzędnych prostokątnych, tj. y = mx + b. Jak stwierdza artykuł Wikipedii, linia może być wyrażona również w formie polarnej. Transformacja Hougha wykorzystuje tę zmianę reprezentacji (w każdym razie dla linii, dyskusję można również zastosować do okręgów, elips itp.).

Pierwszym krokiem transformacji Hough jest zmniejszenie obrazu do zestawu krawędzi. Detektor krawędzi Canny jest częstym wyborem. Powstały obraz krawędzi służy jako wejście do procesu Hough.

Podsumowując piksele „świeci” na obrazie krawędzi są przekształcane do postaci polarnych, to ich położenie jest przedstawiony za pomocą kierunku teta i odległości R - zamiast x i y. (Środek obrazu jest często używany jako punkt odniesienia dla tej zmiany współrzędnych.)

Transformacja Hougha jest w istocie histogramem. Odwzorowano piksele odwzorowujące na te same teta i r, aby zdefiniować linię na obrazie. Aby obliczyć częstotliwość występowania, dyskretne są dyskretne teta theta i r (podzielone na kilka pojemników). Po przekonwertowaniu wszystkich pikseli krawędziowych do postaci polarnej, pojemniki są analizowane w celu określenia linii na oryginalnym obrazie.

Oczywiste jest, aby szukać N najczęściej parametrów - albo progowej takie parametry, że liczy mniejsze niż niektóre n są ignorowane.

Nie jestem pewien, czy ta odpowiedź jest lepsza od źródeł, które pierwotnie prezentowałeś - czy jest jakiś szczególny punkt, w którym utknąłeś?

+0

Twoja odpowiedź jest pozytywna. Zapewnia to wszystko, co przeczytałem gdzie indziej. Odpowiedź, którą podał Ray H, również powiedziała mi coś, co napotkałem na trudności: obliczana jest cała możliwa kombinacja parametrów. Tak więc moja głowa staje się bardziej przejrzysta po prostu przez słuchanie jej na różne sposoby. – Haoest

+3

Istnieje fajne narzędzie javascript do przeglądania przestrzeni głosowania pod adresem [http://gmarty.github.io/hough-transform-js/](http://gmarty.github.io/hough-transform-js/) – user1311069

15

Transformacja Hough jest sposobem na znalezienie najbardziej prawdopodobnych wartości reprezentujących linię (lub okrąg, lub wiele innych rzeczy).

Dajesz Houghowi przekształcenie obrazu linii jako wejścia. Ten obraz będzie zawierał dwa rodzaje pikseli: te, które są częścią linii i te, które są częścią tła.

Dla każdego piksela będącego częścią linii obliczane są wszystkie możliwe kombinacje parametrów. Na przykład, jeśli piksel w pozycji współrzędnych (1, 100) jest częścią linii, może to być część linii, w której gradient (m) = 0 i punkt przecięcia z osią y (c) = 100. Może on również być częścią m = 1, c = 99; lub m = 2, c = 98; lub m = 3, c = 97; i tak dalej. Możesz rozwiązać równanie linii y = mx + c, aby znaleźć wszystkie możliwe kombinacje.

Każdy piksel daje jeden głos na każdy z parametrów (m i c), które mogą go wyjaśnić. Więc możesz sobie wyobrazić, że jeśli twoja linia ma 1000 pikseli, to poprawna kombinacja m i c będzie miała 1000 głosów.

Kombinacja m i c, która ma najwięcej głosów, jest zwracana jako parametry linii.

+0

bardzo pomocne, dzięki. – Haoest

102

Oto bardzo prosty, wizualny wyjaśnienie, w jaki sposób Hough Transform prace do wykrywania linii w obrazie:

enter image description here

+0

Dzięki za cudowne obrazkowe wyjaśnienie! Bardzo dobrze! –

+1

Świetny przykład! Może być trochę potrzebne, wspomniałeś o rysowaniu linii wzdłuż krawędzi i pokazałeś te krawędzie jako punkt, który jest w porządku, ale w rzeczywistości linie te są tylko styczne do tych krawędzi. – SIslam

+0

@mlai, czy stworzyłeś to zdjęcie? Jeśli tak, mogę użyć go do moich prac magisterskich, jeśli nie, możesz mi pokazać, skąd je masz, kocham to?!?! Dzięki –

1

Oto kolejna perspektywa (jeden używany w odcinku pilotażowym serialu Liczby): Wyobraźcie sobie, że zraszacz trawy przypominający fontannę znajdował się wcześniej na trawniku, rzucając wokół siebie kropelki wody. Teraz zraszacz zniknął, ale krople pozostają. Wyobraź sobie, że każdą kroplę wrzucasz do własnego tryskacza, sam rzucając wokół siebie kropelkami - we wszystkich kierunkach, ponieważ kropla nie wie, z której strony się wziął. Spowoduje to rozrzucenie dużej ilości wody na ziemi, z wyjątkiem miejsca, w którym mnóstwo wody trafia ze wszystkich kropli jednocześnie. Tam właśnie był oryginalny zraszacz.

Aplikacja do (np.) Wykrycia linii jest podobna. Każdy punkt na obrazie jest jednym z oryginalnych kropel; kiedy działa jak zraszacz, wysyła własne kropelki, zaznaczając wszystkie linie, które mogą przechodzić przez ten punkt. Miejsca, w których dużo wtórnych kropel ląduje, reprezentują parametry linii przechodzącej przez wiele punktów obrazu - VOILA! Wykryto linię!