**Houghova transformácia** (angl. *Hough transform*) je technika spracovania obrazu, ktorá sa používa na detekciu jednoduchých objektov v obraze ako sú priamky, kružnice, elipsy atď. Pri implementácii je nutné poznať analytický popis tvaru hľadaného objektu. Používa sa predovšetkým na segmentáciu objektov, ktorých hranice sa dajú popísať jednoduchými krivkami. Hlavnou výhodou tejto metódy je robustnosť voči nepravidelnostiam a porušeniu hľadanej krivky.

Teória
------

Normálový tvar priamky
Základný koncept ktorý je pri Houghovej transformácii využívaný pri hľadaní priamok je princíp duality. Bod {\textstyle P} môže byť definovaný 2 koordinátmi (x, y) alebo priamkami, ktoré cez neho prechádzajú. Množina kolineárnych bodov {\textstyle P\_{i}} (body, ktoré ležia na jednej priamke), potom môže byť určená množinou priamok, ale existuje len 1, ktorá obsahuje všetky body {\textstyle P\_{i}}. Môžeme teda povedať že bod môže byť definovaný množinou priamok a priamka definovaná množinou bodov. Houghova transformácia využíva normálový tvar priamky. Normálovú rovnicu priamky je možné zapísať ako:

{\displaystyle r=x\,cos\,\theta +y\,sin\,\theta }
kde {\displaystyle r} predstavuje vzdialenosť priamky od počiatku súradnicovej sústavy a {\displaystyle \theta } je veľkosť uhlu medzi normálou a osou x.

Hodnoty x a {\displaystyle y} sú v tomto prípade známe a {\displaystyle r} a {\displaystyle \theta } sú neznáme. Ak dosadíme známe hodnoty x, {\displaystyle y} a iterujeme hodnotu {\displaystyle \theta } na intervale {\displaystyle <0,\pi >}, v súradnicovej sústave {\displaystyle (r,\theta )} sa nám zakreslí krivka. Bod je teda možné v priestore parametrov  {\displaystyle (r,\theta )} (inak aj Houghovom priestore) reprezentovať ako krivku. Na nasledujúcom obrázku môžeme vidieť ako sa bod (vľavo) zobrazí na krivku v Houghovom prisetore (vpravo).

Pri zobrazení kolineárnych bodov v Houghovom priestore vidíme že, krivky sa pretínajú v jednom bode. Tento bod svojimi koordinátmi {\displaystyle (r,\theta )} určuje priamku v priestore bodov.

Implementácia
-------------

Houghova transformácia je implementovaná kvantizáciou Houghovho priestoru do konečných intervalov. Ide o rozdelenie diskrétneho priestoru na úseky alebo bunky, ktoré tvoria akumulátor. Akumulátor si môžeme predstaviť ako maticu, ktorej počet rozmerov sa rovná počtu hľadaných parametrov. V prípade priamky sú to 2. Akumulátor je na začiatku naplnený samými nulami. Pre každý bod z priestoru (x, y) sa potom inkrementuje hodnota v bunkách akumulátoru, ktoré predstavujú priamky prechádzajúce daným bodom. V akumulátore sa následne hľadajú lokálne maximá, ktoré veľmi pravdepodobne predstavujú hľadané priamky. Existuje viacero metód, ktorými je možné maximá hľadať.

Algoritmus na detegovanie čiar môžeme rozdeliť do týchto krokov:

1. Na obrázok sa aplikuje detekcia hrán, napr. použitím Cannyho detektoru
2. Hranové body sa mapujú do Houghovho priestoru a akumulátoru.
3. Nájdenie priamok – nájdu sa maximá v akumulátore.
4. Konverzia priamok (nekonečne dlhé) na úsečky (konečne dlhé).

Houghova transformácia: (a) pôvodný obrázok, (b) výstup Cannyho hranového detektoru, (c) Houghov priestor, (d) nájdené priamky.

Príklad
-------

Pre každý z 3 bodov sa vytvoria priamky pod rôznymi uhlami. V prípade tohto príkladu je to pre jednoduchosť len 5 uhlov. Pre každú priamku sa vypočíta jej vzdialenosť od počiatku {\displaystyle r}. Pre daný uhol {\displaystyle \theta } a vzdialenosť {\displaystyle r} sa následne zvýši hodnota o 1 v prislúchajúcej bunke akumulátoru.

Akumulátor by mohol vyzerať takto (vypočítané hodnoty r sú zaokrúhlené k najbližšej hodnote v akumulátore):

| {\displaystyle \theta } \ r | 180 | 200 | 220 | 240 | 260 | 280 | 300 | 320 | 340 | 360 | 380 | 400 | 420 | 440 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 15 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
| 30 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
| 45 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 |
| 60 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3 | 0 | 0 |
| 75 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |

Vidíme že maximum (3) sa nachádza v bunke (400,60). Našli sme priamku, ktorá leží najbližšie všetkým trom bodom. Priamka má uhol {\displaystyle \theta } = 60° a vzdialenosť od počiatku r = 400. (Akumulátor pre jednoduchosť obsahuje široké intervaly uhlov a vzdialeností, pre nájdenie presnejšej priamky je potrebný väčší akumulátor s malými intervalmi.)

Referencie
----------

1. ↑   *Hledání parametrického popisu objektů pomocí Houghovy transformace* [online]. 2008, [cit. 2020-11-06]. Dostupné online.
2. ↑  DAVIES, E. R. (E. ROY),. *Computer and machine vision : theory, algorithms, practicalities*. Waltham, Mass. : Elsevier, 2012. (4th ed.) Dostupné online. ISBN 978-0-12-386991-3.
3. 1 2  KUPKA, Jiří. *Houghova transformace* [online]. 2018, [cit. 2020-11-06]. Dostupné online.
4. 1 2   *Hough Transform* [online]. 2003, [cit. 2020-11-06]. Dostupné online.
5. ↑   *Line Detection by Hough transformation* [online]. 20.4.2009, [cit. 2020-11-06]. Dostupné online. Archivované 2021-05-06 z originálu.