Splecione krawędzie – czyli wykrywanie krawędzi na obrazie

W tym artykule postaram się wam przybliżyć algorytmy do wykrywania krawędzi oparte o splot i oczywiście sam splot. Wykrywanie krawędzi jest jednym z elementów rozpoznawania obrazów. Informację o kształcie obiektu reprezentowane są poprzez krawędzie zapisane na obrazie, dlatego powstało wiele technik wykrywania krawędzi. Matematycznie krawędzie na obrazie definiuje się jako skoki w luminacji obrazu (lub saturacji, lub odcieniu koloru). Algorytmy do wykrywania krawędzi dzieli się na dwie kategorie metod. Metody opierające się o pierwszą i drugą pochodną. Nie, dzisiaj nie będziemy zajmowali pochodnymi, ale zainteresowanych odsyłam na Wikipedię gdzie wyjaśnione jest skąd biorą się odpowiednie maski.  Wykrywanie krawędzi opisywane dzisiaj, będzie opierało się o sploty obrazów z pewnymi maskami.

Na początek zdefiniujmy splot. Wartość piksela w obrazie wyjściowym o współrzędnych m i n jest równa sumie pikseli sąsiednich, oczywiście z pewnymi wagami. We wzorze poniższym zmienna src – reprezentuje obraz wejściowy, dst obrazy wyjściowy, mask jest maską którą splatamy. Wiem że wzór matematyczny nie do wszystkich trafia, więc niżej jest mała wizualizacja.

dst[m,n] = \left ( \sum_{a}^{ } \sum_{b}^{ } mask[a,b] * src[m-a,n-b] \right )

Splot. Adoptowane z apple.com

Proste nieprawdaż? A dzięki splotowi z odpowiednimi maskami można zrobić wiele rzeczy np. wykrywanie krawędzi, rozmywanie obrazów np rozmycie gaussa, wyostrzanie obrazów, usuwanie szumów i wiele więcej.

Pierwsze dwie metody, które bardzo nieznacznie różnią się do siebie to  operator Prewitt’a i Sobla. Na początku wykrywane są krawędzie horyzontalnie i wertykalnie, dopiero na koniec te wartości są przeliczane do jednego obrazu. Kolejnym operatorem, działającym na drugiej pochodnej jest operator Laplace. Wykrywa on krawędzie we wszystkich kierunkach naraz.

Perwit:

G_{x} = \begin{bmatrix}  -1 & 0 & 1\\  -1 & \mathbf{0} & 1 \\  -1 & 0 & 1  \end{bmatrix}  * A

G_{y} = \begin{bmatrix}  -1 & -1 & -1\\  0 & \mathbf{0} & 0 \\  1 & 1 & 1  \end{bmatrix}  * A

G = \sqrt{{G_{x}}^{2} + {G_{y}}^{2}}

Sobel:

G_{x} = \begin{bmatrix}  -1 & 0 & 1\\  -2 & \mathbf{0} & 2 \\  -1 & 0 & 1  \end{bmatrix}  * A

G_{y} = \begin{bmatrix}  -1 & -2 & -1\\  0 & \mathbf{0} & 0 \\  1 & 2 & 1  \end{bmatrix}  * A

G = \sqrt{{G_{x}}^{2} + {G_{y}}^{2}}

Laplace:

G = \begin{bmatrix}  -1 & -1 & -1\\  -1 & \mathbf{8} & -1 \\  -1 & -1 & -1  \end{bmatrix}  * A

Rocket science to nie jest. A jak wygląda to w praktyce? Zobaczcie sami, wyniki poniżej. Pomiędzy wykrywaniem krawędzi operatorem Prewitt’a a operatorem Sobla są praktycznie nie widoczne na tych obrazkach, w praktyce różnią się bardzo nieznacznie.  Wykrywanie krawędzi operatorem Laplace znacząco różni się od pozostałych dwóch metod, wykryte krawędzie są znacznie cieńsze.

Z jednej strony można powiedzieć, że wyszukiwanie krawędzi metodą Laplace jest szybsze i daje lepsze wyniki, jednak często wykorzystywane są dwie poprzednie metody, ponieważ dostajemy natężenie krawędzi w kierunku poziomym i pionowym, a dzięki zastosowaniu funkcji trygonometrycznych można obliczyć też kąt. Taką informację mogą wykorzystywać algorytmy korzystające z wykrywania krawędzi.

Na obrazach po zastosowaniu operatora wykrywania krawędzi, w miejscach gdzie wydaje nam się że jest czarny kolor, nie koniecznie wartość piksela jest równa 0. Często algorytmy też interesuje czy w danym miejscu krawędź jest czy nie. Dlatego stosuje się pogowanie obrazu. To znaczy że kolor danego pixela jest biały w przypadku kiedy kolor jest jaśniejszy  od pewnej przyjętej wartości, a w przeciwnym przypadku piksel ma kolor czarny. Niżej widać działanie promowania w zależności od doboru progu.

 

Przedstawiłem wam metody wykrywania krawędzi oparte o sploty, te metody mają też różne wariacje,a po za przedstawionymi metodami jest jeszcze kilka innych metod. W następnych wpisach przedstawię wykrywanie krawędzi algorytmem Cannego który daje dużo fajniejsze wyniki co możecie zobaczyć niżej i algorytm wykrywania linii prostych (i nie tylko ;p ), który wykorzystywał będzie  algorytm Cannego. W między czasie wpadnie też kolejny wpis o algorytmach genetycznych, który powstanie przy okazji małej serii razem z Weroniką z http://codekillers.yum.pl.

Wykrywanie krawędzi algorytmem Cannego

 

One Pingback/Trackback

    15 March 2017 at 3:03pm
    Splecione krawędzie – czyli wykrywanie krawędzi na obrazie – by ...
  • dotnetomaniak.pl