Detekce hran

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Detekce 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[editovat | editovat zdroj]

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. Čá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[editovat | editovat zdroj]

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. Kvůli jednoduššímu výpočtu se ale hrany detekují jen ve dvou, resp. ve čtyř 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[editovat | editovat zdroj]

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. 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[editovat | editovat zdroj]

Hrany můžeme hledat i pomocí průchodů druhé derivace nulou (tzv. zero-crossings). 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. Marrův filtr je proto složením Laplaciánu a Gaussiánu.

Směr a síla hrany[editovat | editovat zdroj]

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í[editovat | editovat zdroj]

Poslední krok v detekci hran je vždy 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. 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é.