Detekce hran
Author
Albert FloresDetekce hran je postup v digitálním zpracování obrazu, sloužící k nalezení oblastí pixelů, ve kterých se podstatně mění jas.
Co je to hrana
Hrana v objektu se nemusí krýt s hranicí mezi objekty ve scéně, hrany mohou vznikat a zanikat v závislosti na úhlu pohledu. Hrany tedy můžeme najít na hranici objektů nebo rozhraní světla a stínu - skoková hrana, nebo v místech trojrozměrných hran objektů - trojúhelníková hrana. +more Čáry v obrazu pak generují dvě hrany, jednu na každé své straně. Typická hrana na rozdíl od teoretické bývá ovšem zašuměná.
Detekce hrany
Pokud hranu definujeme jako velkou změnu jasové funkce, bude v místě hrany velká hodnota derivace jasové funkce. Maximální hodnota derivace bude ve směru kolmo na hranu. +more Kvůli jednoduššímu výpočtu se ale hrany detekují jen ve dvou, resp. ve čtyřech směrech. Velká skupina metod na detekci hran aproximuje tuto derivaci pomocí konvoluce s vhodným jádrem. Nejjednodušší taková jsou (-1 1) a (-1, 1)T, případně (-1, 0, 1) a (-1, 0, 1)T.
Operátory
Další používaná konvoluční jádra jsou: * Robertsův operátor \begin{pmatrix}-1 & 0 \\ 0 & 1\end{pmatrix} a \begin{pmatrix}0 & -1 \\ 1 & 0\end{pmatrix}. * Prewittové operátor 3x3 je definován takto
\begin{pmatrix}-1 & -1 & -1 \\ 0 & 0 & 0 \\ 1 & 1 & 1\end{pmatrix}.
Je platný pro detekci v ose y. Detekce v ose x je dána transponovanou maticí (totéž platí i pro následující operátory). Prewittové operátor 5x5 je definován takto
\begin{pmatrix}-2 & -2 & -2 & -2 & -2 \\ -1 & -1 & -1 & -1 & -1 \\ 0 & 0 & 0 & 0 & 0 \\ 1 & 1 & 1 & 1 & 1 \\ 2 & 2 & 2 & 2 & 2 \end{pmatrix}
Platí, že čím je matice větší, tím je výpočet odolnější vůči šumu. * Sobelův operátor \begin{pmatrix}-1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1\end{pmatrix} a opět i pro jiné směry. +more Dává větší váhu středu, čímž by mělo docházet k lepší lokalizaci hran. * Robinsonův operátor \begin{pmatrix}-1 & -1 & -1 \\ 1 & -2 & 1 \\ 1 & 1 & 1\end{pmatrix}. * Kirschův operátor \begin{pmatrix}-5 & -5 & -5 \\ 3 & 0 & 3 \\ 3 & 3 & 3\end{pmatrix}.
V současnosti asi nejlepší hranový detektor je Cannyho, který na aproximaci první derivace z obrazu aplikuje prahování s hysterezí.
Metody založené na druhé derivaci
Hrany můžeme hledat i pomocí průchodů druhé derivace nulou (tzv. zero-crossings). +more Pozor, to není to samé jako hledání nulových bodů, ty se v digitálním obraze vůbec nemusí objevit. Tyto metody pracují většinou s Laplaciánem \Delta f, což ve dvou rozměrech znamená \Delta f(x,y)={\partial^2 f \over \partial x^2} + {\partial^2 f \over \partial y^2}.
* Marrův filtr (Marr-Hildrethův) \Delta G Vzhledem k tomu, že druhá derivace je ještě citlivější na šum než první je třeba kombinovat její výpočet s nějakým vyhlazením. To musí být dostatečné, aby odstranilo šum, ale zároveň nesmí porušit hrany. +more Marrův filtr je proto složením Laplaciánu a Gaussiánu.
Směr a síla hrany
Z výsledků detekce hran v horizontálním a vertikálním směru Gx a Gy lze spočítat sílu hrany jako \sqrt{G_x^2 + G_y^2} a směr jako \arctan{{{G_x} \over {G_y}}}.
Prahování
Posledním krokem v detekci hran je prahování: je třeba rozhodnout, jak silná odezva už znamená hranu. Dobré nastavení prahu rozhoduje o kvalitě detektoru; příliš nízká hodnota označí za hrany i šum, příliš vysoká zas zahodí i některé podstatné hrany. +more Jako řešení tohoto problému a protože často není možné určit jeden práh pro celý obrázek, používá se tzv. prahování s hysterezí. Pro prahování s hysterezí se nastaví dva prahy. Nejdřív se najdou pixely výrazných hran pomocí vysokého prahu a od těch se pokračuje v označování takových pixelů, v nichž odezva hranového detektoru je větší než nízký práh. Díky tomu se omezí šum a hrany zůstanou souvislé.