Houghova transformácia

Houghova transformácia () 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.
Základný koncept ktorý je pri Houghovej transformácii využívaný pri hľadaní priamok je princíp duality. Bod formula_1 môže byť definovaný 2 koordinátmi (x, y) alebo priamkami, ktoré cez neho prechádzajú. Množina kolineárnych bodov formula_2 (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 formula_2. 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:
formula_4
kde formula_5 predstavuje vzdialenosť priamky od počiatku súradnicovej sústavy a formula_6 je veľkosť uhlu medzi normálou a osou x.
Hodnoty formula_7 a formula_8 sú v tomto prípade známe a formula_5 a formula_6 sú neznáme. Ak dosadíme známe hodnoty formula_7, formula_8 a iterujeme hodnotu formula_6 na intervale formula_14, v súradnicovej sústave formula_15 sa nám zakreslí krivka. Bod je teda možné v priestore parametrov  formula_15 (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 formula_15 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:
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 formula_5. Pre daný uhol formula_6 a vzdialenosť formula_5 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):
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 formula_6 = 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.)