Filtracja Obrazów z Wykorzystaniem Macierzy Kernel

W tym wpisie szczegółowo wyjaśniam działanie funkcji splotu, matematycznej operacji która znakomicie przydaje się w przetwarzaniu obrazów. Ponadto jest jednym z głównych bloków w sieciach konwolucyjnych. Convolutional Neural Networks (#ConvNets) stanowią jeden z fundamentów wśród metod klasyfikacji i rozpoznawania obrazów, swoją siłę zawdzięczają właśnie wykorzystaniu warstw dokonujących operacji splotu pomiędzy obrazem (lub warstwami dolnymi) a macierzą wag w danej warstwie. Lecz zanim zaczniemy analizować architekturę sieci konwolucyjnych warto nabrać intuicji czym ta operacja jest oraz jaką rolę pełni w przetwarzaniu obrazów.

Przetwarzanie sygnałów towarzyszy każdemu człowiekowi codziennie. Wszystkie bodźce (sygnały) odbierane z otaczającego nas świata, tj. dźwięk, światło, temperatura są przetwarzane w impulsy elektryczne, przesyłane następnie do mózgu. Tam następuje analiza i interpretacja odebranych sygnałów, w wyniku której otrzymujemy informacje płynące z danego rodzaju sygnału (np. rozpoznajemy kształt przedmiotu, odczuwamy ciepło itp.).

W podobny sposób działa Cyfrowe Przetwarzanie Sygnałów (CPS). W tym przypadku sygnał analogowy konwertuje się na sygnał cyfrowy przez przetwornik analogowo-cyfrowy. Następnie przy użyciu komputera przetwarzane są dostarczone sygnały. W systemach CPS wykorzystuje się również komputerowe urządzenia peryferyjne, wyposażone w procesory sygnałowe, dzięki którym możliwe jest przetwarzanie sygnałów w czasie rzeczywistym. Niekiedy potrzebna jest ponowna konwersja sygnału do postaci analogowej (np. do sterowania jakiegoś urządzenia). W tym celu wykorzystuje się przetworniki cyfrowo-analogowe.

Cyfrowe przetwarzanie sygnałów ma bardzo szerokie zastosowanie. Może być wykorzystywane m.in. do przetwarzania dźwięku, rozpoznawania i przetwarzania mowy, czy do przetwarzania obrazów. To ostatnie zagadnienie będzie przedmiotem tego artykułu, a konkretnie omówimy w nim podstawową operację wykonywaną w procesie cyfrowego przetwarzania obrazów, tj. filtrację splotową.

Czym jest przetwarzanie obrazów?

Mówiąc w najprostszy sposób, przetwarzanie obrazów polega na przekształceniu obrazu wejściowego w obraz wyjściowy. Celem tego procesu jest selekcja informacji - wybranie najistotniejszych (np. kształtu) oraz wyeliminowanie zbędnych (np. szumów). Proces cyfrowego przetwarzania obrazów obejmuje szereg różnorodnych operacji, m.in.:

Przeczytaj także: DBK w medycynie

  • filtrację,
  • binaryzację,
  • segmentację,
  • transformację geometryczną,
  • kodowanie,
  • kompresję.

Jak już wspominaliśmy, w tym artykule omówimy szerzej operację filtracji obrazów.

Filtracja Splotowa

Zarówno w domenie jednowymiarowej, przykładowo dla sygnałów audio, tak również dla dwóch wymiarów istnieją odpowiednie narzędzia służące przeprowadzeniu operacji na sygnałach, w tym przypadku na obrazach. Jednym z takich narzędzi jest filtracja. Polega ona na wykonaniu na pikselach obrazu wejściowego pewnych operacji matematycznych, w wyniku których otrzymywany jest nowy obraz. Najczęściej filtrację wykorzystuje się w celu poprawy jakości obrazu lub wydobycia z niego istotnych cech.

Filtracja obrazów - filtracja obrazów jest zaliczana do metod cyfrowego przetwarzania sygnałów. Filtracja jest operacją matematyczną na pikselach obrazu źródłowego, w wyniku której uzyskiwany jest nowy, przekształcony obraz. Filtracja stosowana jest przeważnie jako metoda wydobycia z oryginalnego obrazu szeregu informacji w celu ich dalszej obróbki. Informacjami takimi mogą być: położenie krawędzi, pozycje rogów obiektów itp. Innym zastosowaniem filtracji jest usuwanie szumów (filtr medianowy i inne) lub rozmycie obrazu (filtry uśredniające, Gaussa).

Filtrację można przeprowadzać zarówno w dziedzinie przestrzennej, jak i częstotliwościowej. Filtracje w dziedzinie przestrzennej uzyskuje się, wykorzystując operacje splotu. Operacja splotu oblicza nową wartość piksela obrazu na podstawie wartości pikseli sąsiadujących. Współczynnik odróżnia filtrację od „zwykłego” splotu. Jego funkcją jest utrzymanie wyjściowej skali wartości pikseli zgodnej ze skalą wejściową. Efekt filtracji zależy od rodzaju filtru, który zostanie do tego celu wykorzystany oraz od jego wielkości (tzw. rząd macierzy filtru).

Podstawową operacją w metodzie filtracji jest operacja splotu 2D. Pozwala ona na aplikowanie przekształceń obrazu z użyciem odpowiednio przygotowanych do tego filtrów w postaci macierzy współczynników. Wykorzystanie filtrów polega na obliczeniu nowej wartości punktu na podstawie wartości punktów znajdujących się w jego otoczeniu. Do obliczeń wykorzystuje się tzw. maski, zawierające wagi pikseli z otoczenia danego piksela. Najczęściej spotykane rozmiary masek to 3×3, 5×5 i 7×7. Poniżej przybliżono proces przeprowadzenia konwolucji obrazu oraz filtra.

Przeczytaj także: Wzór na macierz odwrotną - wyjaśnienie

Przyjmując, że obraz reprezentowany jest przez macierz o wymiarach 5×5, zawierającą wartości kolorów, a filtr reprezentowany macierzą 3×3, przeprowadzono modyfikację obrazu poprzez splecenie jednej z nich z drugą.

Pierwsze, co należy wykonać to zamiana wierszy, a następnie kolumn w macierzy filtra (wiersz/kolumna pierwsza → wiersz/kolumna ostatnia - i na odwrót). Należy również przyjąć, że środek jądra filtracji h(0,0) znajduje się w środku macierzy. W związku z taką konwencją indeksy (m,n) oznaczające wiersze i kolumny macierzy filtra będą ujemne i dodatnie.

Uznając macierz filtra (kolor niebieski) za odwróconą w pionie i poziomie, możemy przeprowadzić operację filtracji. Dokonujemy tego umieszczając element h(0,0) → h(m,n) macierzy niebieskiej w elemencie s(-2,-2) → s(i,j) macierzy obrazu (kolor żółty). Następnie wymnażamy nachodzące na siebie wartości obu macierzy i sumujemy. W ten sposób otrzymaliśmy wynik splotu dla komórki o(-2,2) obrazu wyjściowego.

Kolejne etapy procesu są analogiczne, przesuwamy środek macierzy niebieskiej do elementu s(-2,-1), wymnażamy nachodzące na siebie wartości, sumujemy, otrzymując wynik wyjściowy. Pola, które wykraczają poza obszar macierzy s(i,j) uznajemy za niezdefiniowane, w związku z tym wartości w tych miejscach nie istnieją, a więc nie dokonujemy mnożenia.

Zastosowanie filtrów w przetwarzaniu obrazów oznacza, że do obliczenia nowej wartości punktu brane są pod uwagę wartości punktów z jego otoczenia. Każdy piksel z otoczenia wnosi swój wkład - wagę podczas przeprowadzania obliczeń. Wagi te zapisywane są w postaci maski. Typowe rozmiary masek to 3 x 3, 5 x 5 bądź 7 x 7. Rozmiary masek są z reguły nieparzyste ponieważ piksel na środku reprezentuje piksel dla którego wykonywana jest operacja przekształcania filtrem. Wówczas nową wartość składowej punktu a o współrzędnych (i, j) obliczymy według następującego wzoru. Tak otrzymaną sumę dzielimy przez sumę wszystkich wag maski, jeżeli jest ona różna od 0. Filtrację przeprowadza się osobno dla każdej składowej obrazu.

Przeczytaj także: Wnioski z obliczania macierzy odwrotnej

Jak łatwo zauważyć próba zastosowania filtracji dla punktów położonych na krawędzi obrazu, prowadzi do sytuacji, w której maska "wystaje" poza przetwarzany obraz. Istnieje kilka sposobów obejścia tego problemu. Jednym z nich jest pominięcie procesu filtracji dla takich punktów, innym jest zmniejszenie obrazu po filtracji o punkty, dla których proces ten nie mógł być wykonany.

W podejściu praktycznym filtracja splotowa obrazu wymaga od nas dwóch elementów wejściowych jednym jest obraz filtrowany, drugim maska filtru z jakim chcemy dokonać splotu. Jako, że rozmiar naszej maski wynosi 3×3 to takie samo otoczenie naszego piksela będzie musiało brać udział w wyliczaniu wartości splotu. Najłatwiej wyobrazić sobie, maskę nałożoną w lewym górnym oraz prawym dolnym rogu obrazu. Można w ten sposób zobaczyć zasadę, która pokazuje o jaki rozmiar należy powiększyć obraz.

Problem pojawia się przy brzegach obrazu, ponieważ nie ma możliwości nałożenia maski na piksele bliżej krawędzi obrazu, dlatego należy wprowadzić jedną z dwóch metod powielania pikseli brzegowych. Wszytko zależy od maski, a dokładniej od tego, który jej element przyjmujemy jako jej środek.

Filtry Dolnoprzepustowe

Filtry dolnoprzepustowe (ang. low-pass) przepuszczają elementy obrazu o małej częstotliwości. Elementy o wysokiej częstotliwości (szumy, drobne szczegóły) są natomiast tłumione bądź wręcz blokowane. Wynikiem działania takich fitrów jest zredukowanie szumów, w szczególności gdy jest on jedno, dwupikslowy ale również wygładzenie i rozmycie obrazu.

Działanie tego typu filtrów opiera się na usuwaniu elementów obrazu o wysokiej częstotliwości (szczegółów, np. dużych różnic w kolorach pomiędzy sąsiadującymi pikselami) i przepuszczaniu elementów o niskiej częstotliwości (ogólnych kształtów, bez szczegółów). Ponieważ większość szumów występujących w obrazach zawiera się w wysokich częstotliwościach, filtry te przeważnie wykorzystuje się właśnie do eliminacji zakłóceń. Właściwie dopasowując rząd macierzy filtru, można usuwać zakłócenia różnej wielkości, ograniczając przy tym utratę szczegółów (wysokich częstotliwości) w odfiltrowywanym obrazie. Filtry dolnoprzepustowe to zazwyczaj filtry uśredniające z pewnymi wagami.

Najczęściej filtry, których suma jest większa niż 0 to filtry rozmywające, a te sumujące się do 0 to filtry krawędziowe.

  • piramidalny - jeżeli kolejne komórki tego filtra przedstawionoby za pomocą słupków o wysokości odpowiadającej przypisanej wadze to w efekcie otrzymalibyśmy bryłę podobną do piramidy, stąd jego nazwa.
  • stożkowy - jeżeli kolejne komórki tego filtra przedstawionoby za pomocą słupków o wysokości odpowiadającej przypisanej wadze to w efekcie otrzymalibyśmy bryłę podobną do stożka, stąd jego nazwa.
  • gauss 1 - jeżeli kolejne komórki tego filtra przedstawionoby za pomocą słupków o wysokości odpowiadającej przypisanej wadze to w efekcie otrzymalibyśmy bryłę podobną do krzywej rozkładu normalnego - krzywej Gaussa.

Filtry Górnoprzepustowe

Filtry górnoprzepustowe (ang. high-pass) przepuszczają i wzmacniają elementy obrazu o dużej częstotilości, są to szumy, drobne szczegóły i krawędzie. Tłumieniu natomiast ulegają elementy o niskiej częstotliwości. Wynikiem działania takich fitrów jest wyostrzenie obrazu, a także zwiększenie ilości szumów.

Filtry te działają w sposób odwrotny do filtrów dolnoprzepustowych, tłumią one niskoczęstotliwościowe elementy obrazu, wzmacniają natomiast elementy o wysokich częstotliwościach (szczegóły). Wynikiem działania tego typu filtrów jest podkreślenie, uwypuklenie elementów obrazu o dużej częstotliwości poprzez zwiększenie ich jasności, koloru itp. Dla obrazu jako całości efektem jest zazwyczaj zwiększenie kontrastu poprzez podkreślenie ostrych krawędzi obiektów.

  • usuń średnią (ang.

Inne Rodzaje Filtrów

Wyróżnia je fakt, iż nie posiadają stałej maski jak w przypadku innych filtrów. Nowe wartości pikseli są wyliczane na drodze sortowania pikseli obrazu źródłowego w obrębie maski. Filtr medianowy jest przykładem filtru nieliniowego. Stosuje się go przede wszystkim do usuwania zakłóceń punktowych typu pieprz i sól, potrafi on wtedy usunąć szum przy minimalnej utracie jakości obrazu lub całkowicie bez strat. Ponieważ wielkość maski wynosi 3×3, więc w jej obrębie znajduje się 9 pikseli obrazu źródłowego (P0, P1, P2, P3, P4, P5, P6, P7, P8). Zależnie od poszczególnych wartości w wyniku sortowania możliwy jest następujący przykładowy rozkład wartości: (P5, P8, P1, P2, P6, P4, P7, P0, P3). Do obrazu wynikowego jest kopiowana minimalna lub maksymalna wartość przyjmowana przez punkty sąsiadujące z punktem „wybranym” przez środek maski.

  • Filtry przesuwania i odejmowania, wykonują przesunięcie obrazu a następnie odejmowanie obrazu od swojej kopii. Filtry te służą do wykrywania krawędzi w obrazie. W zależności od kierunku przesuwania obrazu będą to krawędzie pionowe, poziome bądź ukośne. Należy zauważyć, że w wyniku działania tego rodzaju filtrów wynikowa wartość składowej punktu może wyjść ujemna. W takim wypadku należy użyć wartości bezwzględnej albo sprowadzić wartość do 0.
  • Gradientowe filtry kierunkowe (ang. gradient directional) służą również do wykrywania krawędzi w obrazie. Nazwa kolejnych przedstawionych filtrów określa krawędzie- zgodnie z kierunkiem geograficznym, które będą wykryte na obrazie wynikowym.
  • Filtry uwypuklające (ang. embossing) wprowadzają złudzenie wypukłości i wklęsłości w miejscach, gdzie w obrazie znajdują się krawędzie - daje to efekt podobny do płaskorzeźby. Nazwa kolejnych przedstawionych filtrów określa krawędzie- zgodnie z kierunkiem geograficznym, które będą uwypuklone w obrazie wynikowym.
  • Filtry Laplace'a - stosowane są do wykrywania krawędzi. W porównaniu do innych przedstawionych tutaj filtrów cechuje je wielokierunkowość - wykrywają krawędzie we wszystkich kierunkach. Ponadto dają w efekcie ostrzejsze krawędzie.
  • Filtry konturowe - służą do wykrywania krawędzi. Podstawowymi filtrami konturowymi są filtry Sobel'a o Prewitt'a.
  • Filtry statystyczne - wykorzystuje się je podobnie jak przedstawione powyżej filtry liniowe. Wartość wynikowa jednak powstaje nie w wyniku obliczenia sumy ważonej (funkcji splotu) poszczególnych piksli lecz poprzez wybranie wartości odpowiedniego piksla pod maską.
    • filtr medianowy - mediana, to wartość środkowa. Wynikiem działania tego filtru jest wybranie piksla o wartości środkowej wszystkich piksli pod maską, czyli dla filtru 3x3 będzie to taka wartość punktu, że pozostałe 4 punkty mają wartość większą a pozostałe 4 wartość mniejszą. Można do tego zadania użyć algorytm Hoare'a.
    • filtr minimalny - zwany jest także filtrem kompresujacym albo erozyjnym. Jego działanie polega na wybraniu z pod maski punktu o wartości najmniejszej. Jego działanie powoduje zmniejszenie jasnosci obrazu dajace efekt erozji obiektów.
    • filtr maksymalny - zwany jest także filtrem dekompresujacym albo ekspansywnym. Jego działanie polega na wybraniu z pod maski punktu o wartości największej.
    • filtr Kuwahara - jest filtrem wygładzającym zachowującym krawędzie. W filtrze tym maska dzielona jest na regiony. Dla każdego regionu obliczana jest wartość średnia oraz wariancja (suma kwadratów odchyleń) względem tej wartości. Najczęsciej w filtrze Kuwahara punkty pod maską dzielone są na 4 regiony. Podział następuje w taki sposób, że krawędzie przylegających do siebie regionów są wspólne. Punkt centralny dla którego obliczany jest wynik występuje w każdym regionie.

Zastosowanie Filtracji Splotowej

W zależności od rodzaju filtra wyróżnia się różne zastosowania filtracji splotowej. Filtry dolnoprzepustowe wykorzystywane są do usuwania szumów w obrazach, natomiast filtry górnoprzepustowe stosowane są do wyostrzania lub podkreślenia krawędzi.

W celu zobrazowania działania poszczególnych rodzajów filtrów spróbujmy zastosować praktyczny przypadek konwolucji na rzeczywistym obrazie. Poniższy obraz w formacie „.jpg” został wczytany jako macierz MxNx3 pikseli. Na jego przykładzie pokażemy podstawowe efekty możliwe do uzyskania, dzięki zastosowaniu filtracji splotowej.

Rozmycie Gaussowskie

Aby dokonać rozmycia obrazu należy zastosować funkcję splotu, jak również odpowiednio przygotowany kernel - filtr. Jednym z najczęściej wykorzystywanych do tego filtrów dolnoprzepustowych jest filtr Gaussowski. Pozwala on na zmniejszenie ostrości obrazu, jak również stosuje się go przy redukcji szumu obecnego w obrazie.

W prezentowanym przypadku wykorzystano macierz o wymiarach 29×29, wygenerowaną na podstawie funkcji Gaussowskiej o odchyleniu standardowym równym 5. Rozkład normalny nadaje wagi otaczającym pikselom w procesie konwolucji. Działanie filtra dolnoprzepustowego polega na tłumieniu elementów obrazu charakteryzujących się wysoką częstotliwością i przepuszczaniu tych elementów, których częstotliwość jest mała. W rezultacie następuje redukcja szumów oraz rozmycie obrazu, a otrzymany obraz jest mniej wyraźny niż pierwotny.

Wyostrzanie

Analogicznie jak przy rozmyciu Gaussowskim można sprawić, że obraz zostanie wyostrzony. W tym celu należy zastosować odpowiedni filtr górnoprzepustowy. Jego działanie polega na przepuszczaniu oraz wzmacnianiu elementów obrazu, które odznaczają się dużą częstotliwością, np. szumów czy krawędzi. Natomiast elementy o małej częstotliwości filtr wytłumia. W wyniku zastosowania filtru następuje wyostrzenie pierwotnego obrazu, co można łatwo zauważyć na przykład w okolicach ramienia.

Detekcja Krawędzi

Kolejnym zabiegiem możliwym do przeprowadzenia przy użyciu filtracji splotowej jest detekcja krawędzi. Do przeprowadzenia operacji wykrywania krawędzi wykorzystuje się filtry przesuwania i odejmowania. Ich działanie polega na przesunięciu obrazu i odjęciu obrazu pierwotnego od jego kopii. W wyniku tej operacji następuje detekcja krawędzi.

Konwolucja (splot) czyli połączenie dwóch funkcji

Operacja splotu po raz pierwszy do sieci neuronowych została wprowadzona w pracy LeCunn at al , lecz jest to operacja matematyczna, której pierwsze wzmianki przypisuje się D’Alebert’owi w 1754. Formalnie zdefiniowana jest w dość zawiły sposób z wykorzystaniem całek, lecz spróbujmy rozłożyć to na czynniki pierwsze.

Po pierwsze jest to operacja wykonywana na dwóch funkcjach np. \(f(t), g(t)\), w wyniku której otrzymamy nową funkcję \(h(t)\). Hej, hej, stop. Jak to otrzymujemy nową funkcję? To na funkcjach można wykonywać działania? A no można, już pewnie wcześniej takie operacje wykonywałeś np. dodawanie funkcji lub mnożenie, np. niech \(f(t)=t^2, g(t)=\sin(t)\), możemy określić działania:

\begin{align}h(t)=&(f+g)(t)=f(t)+g(t)=t^2+\sin(t) \\\h(t)=&(f \cdot g)(t)=f(t) \cdot g(t)=t^2\cdot\sin(t)\end{align}

Analogicznie możemy określić działanie splotu funkcji wykorzystując szereg złożonych operacji: mnożenie funkcji, odbicie funkcji, translację oraz operacje całkowania:

$$h(t)=(f*g)(t)=\int\limits_{0}^t f(x)g(t-x) dx$$

Co to za poczwarka, skąd nagle wzięły się dwie literki \(t, x\) i jak mam rozumieć tę całkę?

Po pierwsze, zauważ że główną zmienną jest cały czas u nas \(t\), zmienna \(x\) służy tylko jako zmienna do całkowania, ostatecznie zniknie ona w wyniku obliczenia całki. Wyobraź sobie ze chcemy policzyć \(h(5)\), czyli wszędzie w wzorach za t podstawiamy wartość 5.

Pod całką obliczamy zwykły iloczyn dwóch funkcji \(f, g\) z tym, że funkcja \(g\) jest odbita względem osi OY, \(g(-x)\) oraz przesunięta o t \(g(t-x)\).

Na funkcję \(g(t)\) można patrzeć jak na funkcję określającą wagi dla funkcji \(f(t)\) (jak przy średniej ważonej).

Całkowanie można rozumieć jako zsumowanie wartości poszczególnych iloczynów z pewnej okolicy (przedzału).

Ja osobiście tłumaczę to sobie następująco, wybieram wartość \(t=t_1\), następnie wiem, że będę dokonywał sumowania wartości dla z pewnej okolicy \(t_1\), w naszym przykładzie \(x \in [0,t_1]\), dla każdej wartości z przedziału obliczam iloczyn pomiędzy \(f(x)\cdot g(t_1-x)\) oraz sumuje je. Bardzo pomocnym w zrozumieniu tej operacji jest przypadek dyskretny, w którym zmienne przyjmują wartości naturalne.

Splot funkcji z wartościami dyskretnymi

W tym przypadku nasze funkcje są ciągami o wyrazach \(f=\{ f[0],f[1],f[2], \dots \}\) oraz \( g=\{ g[0],g[1], g[2],\dots \}\), operację konwolucji dyskretnej możemy zdefiniować następująco:

$$(f*g)[n] =\sum _{{m }}^{{n }}f[m]\,g[n-m]$$

Tak na dobrą sprawę wzór jest taki sam, z tym że znak całki został zamieniony na znak sumy. Zakres zmiennej indeksującej \(m\) kolejno zmienia się w zależności od długości ciągu \(g\) oraz na której pozycji dla której chcemy obliczyć splot. Zobaczmy to na przykładzie, zwróćcie uwagę na różną długość ciągów oraz zmienną \(m\)

Policzmy przykład. Mamy dwa ciągi skończone \(f=\{1,0,1,1,1,0\}, g=\{1,1,0\}\), w których wyrazy numerujemy od zera, obliczmy kolejno \(h[0],h[1],…\)

\begin{align}n=0, m&=0 \\\h[0] &= f[0] \cdot g[0]=1 \cdot 1=1 \\\n=1, m&=0,1 \\\h[1]&= f[0] \cdot g[1-0]+f[1] \cdot g[1-1]=1 \cdot 1+0 \cdot 1=1 \\\n=2, m&=0,1,2 \\\h[2]&= f[0] \cdot g[2-0]+f[1] \cdot g[2-1]+f[2] \cdot g[2-2] \\\&= 1 \cdot 0+0 \cdot 1+1 \cdot1=1 \\\\end{align}

A teraz uwaga, jak policzyć \(h[3]\)? Powyższe przykłady, zarówno ciągły jak i dyskretny były jednowymiarowe, tzn. funkcje \(f, g\) były funkcjami jednej zmiennej. Zobaczmy jak to wygląda dla sygnału dwuwymiarowego, którego dobrym przykładem jest właśnie obraz.

Operacja splotu w analizie obrazów

Cała idea konwolucji, w głównej mierze polega na przesuwaniu okna z wartościami z \(g\) (nazwijmy tę funkcję filtrem) wzdłuż sygnału \(f\), przemnażaniu odpowiadających wartości oraz dodawaniu tych iloczynów do siebie. W przypadku dwuwymiarowym, przesuwanie to będzie odbywało się z lewej do prawej, a następnie z góry na dół, formalnie prezentuje się to następująco:

$$h[m,n]=(f*g)[m,n]=\sum _{j}\sum _{k}{f[j,k]g[m-j,n-k]} $$

W kontekście przetwarzania obrazów funkcja \(f\) jest dwuwymiarową macierzą zawierającą wartości pikseli obrazu, zazwyczaj ma ona duże wymiary np. 600x400px, natomiast funkcja \(g\), nasz filtr, jest zdecydowanie mniejszą macierzą np. 3x3px, 5x5px itp. W wyniku konwolucji obrazu z filtrem, otrzymamy nowy obraz, w którym każdy piksel \(h[m,n]\) został utworzony na podstawie jego sąsiedztwa. W zależności do wyboru filtra możemy otrzymać obraz rozmyty, wyostrzony lub z uwypuklonymi krawędziami.

Implementacja operacji splotu w Python’ie

Operacja konwolucji jest na tyle standardową operacją, że nie musimy jej sami implementować. Dwie popularne biblioteki numeryczne Numpy i Scipy mają tą operację zaimplementowaną.

tags: #macierz #kernel #filtracja #obrazow

Popularne posty: