StartAlgorytmyPrzetwarzanie obrazówFiltrowanie obrazów
Baza Wiedzy
Wersja offline serwisu przeznaczona na urządzenia z systemem Android.

Darowizny
darowiznaWspomóż rozwój serwisu


Nagłówki RSS
Kanał artykuły
Kanał implementacje
Kanał komentarze
Kanał forum


Bookmarki









Sonda
Implementacji w jakim języku programowania poszukujesz?
 
Filtrowanie obrazów
Ocena użytkowników:+++++ / 70
SłabyŚwietny 
Wpisany przez Tomasz Lubiński
środa, 15 sierpnia 2007 14:32
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. Przeanalizujmy filtrację na podstawie filtra o masce 3 x 3.

f-1, -1f0, -1f1, -1
f-1, 0f0, 0f1, 0
f-1, 1f0, 1f1, 1

Wówczas nową wartość składowej punktu a o współrzędnych (i, j) obliczymy według następującego wzoru. Najpierw obliczymy sumę ważoną składowej punktu i wszystkich sąsiadów zgodnie z wagami wskazaymi przez maskę filtra.
s = f-1, -1 * ai-1, j-1 + f0, -1 * ai, j-1 + f1, -1 * ai+1, j-1 + f-1, 0 * ai-1, j + f0, 0 * ai, j + f1, 0 * ai+1, j + f-1, 1 * ai-1, j+1 + f0, 1 * ai, j+1 + f1, 1 * ai+1, j+1

Tak otrzymaną sumę dzielimy przez sumę wszystkich wag maski, jeżeli jest ona różna od 0. Ten proces normalizacji wartości składowej punktu zapobiegnie zmianie jasności przetwarzanego obrazu.
a'i, j = s / (f-1, -1 + f0, -1 + f1, -1 + f-1, 0 + f0, 0 + f1, 0 + f-1, 1 + f0, 1 + f1, 1 )

Filtrację przeprowadza się osobno dla każdej składowej obrazu. Zatem jeżeli mamy obraz reprezentowany w modelu RGB, to wówczas będziemy wykonywać oddzielne przekształcenia dla składowej R, G oraz B.
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. Kolejnym sposobem jest dodanie do filtrowanego obrazu zduplikowanych pikseli znajdujących się na jego brzegu.

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. Poniżej znajduje się przykładowy obraz przed (po lewej) i po zastosowaniu filtra dolnoprzepustowego:

Filtr dolnoprzepustowy

  • filtr uśredniający - jest podstawowym filtrem dolnoprzepustowym, jego wynikiem jest uśrednienie każdego piksla razem ze swoimi ośmioma sąsiadami.
    111
    111
    111

  • filtr kwadratowy - jego wynikiem jest uśrednienie każdego piksla razem ze swoimi dwudziestoma czteroma sąsiadami, powoduje to odfiltrowanie większej liczby szczegółów jak w przypadku poprzedniego filtra.
    11111
    11111
    11111
    11111
    11111

  • filtr kołowy - jest pewną modyfikacją filtra kwadratowego, kształt jego maski zbliżony jest do koła, jego wynikiem jest uśrednienie każdego piksla razem ze swoimi dwudziestoma sąsiadami - punkty położone w narożnikach mają wagę 0, zatem nie biorą udziału w procesie filtracji.
    01110
    11111
    11111
    11111
    01110

  • LP1 - różni się od filtra uśredniającego zwiększeniem wagi, dla aktualnie przetwarzanego punktu, powoduje to zmniejszenie "efektu rozmycia" w stosunku do filtra uśredniającego.
    111
    121
    111

  • LP2 - różni się od filtra uśredniającego jeszcze mocniejszym zwiększeniem wagi, dla aktualnie przetwarzanego punktu niż filtr LP2.
    111
    141
    111

  • LP2 - różni się od filtra uśredniającego jeszcze mocniejszym zwiększeniem wagi, dla aktualnie przetwarzanego punktu niż filtr LP3.
    111
    1121
    111

  • 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. Widać tutaj, że znaczenie wartości punktu rośnie wraz ze zmniejszaniem się odległości do obliczanego punktu.
    12321
    24642
    36963
    24642
    12321

  • 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. Znaczenie wartości punktu rośnie wraz ze zmniejszaniem się odległości do obliczanego punktu.
    00100
    02220
    12521
    02220
    00100

  • 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. Zatem znaczenie wartości punktu rośnie wraz ze zmniejszaniem się odległości do obliczanego punktu, w sposób opisany przez funkcje Gaussa.
    121
    242
    121

  • gauss 2 - kolejna wersja filtru wykorzystującego funkcję Gaussa.
    11211
    12421
    24842
    12421
    11211

  • gauss 3 - kolejna wersja filtru wykorzystującego funkcję Gaussa.
    01210
    14841
    281682
    14841
    01210

  • gauss 4 - kolejna wersja filtru wykorzystującego funkcję Gaussa.
    14741
    41626164
    72641267
    42616264
    14741

  • gauss 5 - kolejna wersja filtru wykorzystującego funkcję Gaussa.
    1122211
    1224221
    2248422
    24816842
    2248422
    1224221
    1122211

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. Poniżej znajduje się przykładowy obraz przed (po lewej) i po zastosowaniu filtra górnoprzepustowego:

Filtr górnoprzepustowy

  • usuń średnią (ang. mean removal) - jest to podstawowa wersja filtru górnoprzepustowego, jego użycie powoduje znaczne wyostrzenie obrazu, ale także wzmocnienie wszelkich szumów i zakłóceń.
    -1-1-1
    -1 9-1
    -1-1-1

  • HP1 - w porównaniu do poprzedniego filtru, cechuje się mniejszym wyostrzeniem obrazu, nie uwypukla tak bardzo szumów znajdujących się w przetwarzanym obrazie.
    0-10
    -1 5-1
    0-1 0

  • HP2 - w porównaniu do poprzedniego filtru, cechuje się jescze mniejszym wyostrzeniem obrazu.
    1-21
    -2 5-2
    1-2 1

  • HP3 - powoduje najmniejsze z przedstawionych tutaj filtrów górnoprzepustowych wzmocnienie szumów.
    0-10
    -1 20-1
    0-1 0

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. Poniżej znajduje się przykładowy obraz przed (po lewej) i po zastosowaniu filtra przesuwania i odejmowania:

Filtr przesuwania

  • poziomy - wykonuje przesunięcie obrazu o jeden punkt w kierunku pionowym a następnie odjęcie wartości punktu od jego kopii, w ten sposób wykrywa krawędzie poziome w obrazie.
    000
    -1 1 0
    0 0 0

  • poziomy - wykonuje przesunięcie obrazu o jeden punkt w kierunku poziomym a następnie odjęcie wartości punktu od jego kopii, w ten sposób wykrywa krawędzie pionowe w obrazie.
    0-10
    0 1 0
    0 0 0

  • ukośny - wykonuje przesunięcie obrazu o jeden punkt w kierunku ukośnym a następnie odjęcie wartości punktu od jego kopii, w ten sposób wykrywa krawędzie ukośne / w obrazie.
    -100
    0 1 0
    0 0 0

  • ukośny - wykonuje przesunięcie obrazu o jeden punkt w kierunku ukośnym a następnie odjęcie wartości punktu od jego kopii, w ten sposób wykrywa krawędzie ukośne \ w obrazie.
    00-1
    0 1 0
    0 0 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. Poniżej znajduje się przykładowy obraz przed (po lewej) i po zastosowaniu gradientowego filtra kierunkowego:

Filtr gradientowy

  • wschód
    -111
    -1-2 1
    -1 1 1

  • południowy-wschód
    -1-11
    -1-2 1
    1 1 1

  • południe
    -1-1-1
    1-2 1
    1 1 1

  • południowy-zachód
    1-1-1
    1-2-1
    1 1 1

  • zachód
    11-1
    1-2-1
    1 1-1

  • północny-zachód
    111
    1-2-1
    1-1-1

  • północ
    111
    1-2 1
    -1-1-1

  • północny-wschód
    111
    -1-2 1
    -1-1 1

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. Poniżej znajduje się przykładowy obraz przed (po lewej) i po zastosowaniu filtra uwypuklającego:

Filtr uwypuklający

  • wschód
    -101
    -1 1 1
    -1 0 1

  • południowy-wschód
    -1-10
    -1 1 1
    0 1 1

  • południe
    -1-1-1
    0 1 0
    1 1 1

  • południowy-zachód
    0-1-1
    1 1-1
    1 1 0

  • zachód
    10-1
    1 1-1
    1 0-1

  • północny-zachód
    110
    1 1-1
    0-1-1

  • północ
    111
    0 1 0
    -1-1-1

  • północny-wschód
    011
    -1 1 1
    -1-1 0

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. Poniżej znajduje się przykładowy obraz przed (po lewej) i po zastosowaniu filtra Laplace'a:

Filtr Laplace'a

  • LAPL1
    0-10
    -1 4-1
    0-1 0

  • LAPL2
    -1-1-1
    -1 8-1
    -1-1-1

  • LAPL3
    1-21
    -2 4-2
    1-2 1

  • Laplace'a ukośny
    -10-1
    0 4 0
    -1 0-1

  • Laplace'a poziomy - ograniczony do wykrywania krawędzi poziomych.
    0-10
    0 2 0
    0-1 0

  • Laplace'a pionowy - ograniczony do wykrywania krawędzi pionowych.
    000
    -1 2-1
    0 0 0

Filtry konturowe - służą do wykrywania krawędzi. Podstawowymi filtrami konturowymi są filtry Sobel'a o Prewitt'a. Poniżej znajduje się przykładowy obraz przed (po lewej) i po zastosowaniu filtra konturowego:

Filtr konturowy

  • poziomy filtr Sobel'a - wykrywa krawędzie poziome.
    121
    0 0 0
    -1-2-1

  • pionowy filtr Sobel'a - wykrywa krawędzie pionowe.
    10-1
    2 0-2
    1 0-1

  • poziomy filtr Prewitt'a - wykrywa krawędzie poziome.
    -1-1-1
    0 0 0
    1 1 1

  • pionowy filtr Prewitt'a - wykrywa krawędzie pionowe.
    10-1
    1 0-1
    1 0-1

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 medianowy pozwala na eliminacje szumu z obrazu bez znacznego rozmycia obrazu, tak charakterystycznego dla filtrów dolnoprzepustowych.
    Filtr medianowy

  • 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. Czasem mówi się, że daje on efekt jakby obraz namalowany został przy uzyciu frab olejnych.
    Filtr minimalny

  • 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. Jego działanie powoduje zwiększenie jasnosci obrazu dajace efekt powiększania się obiektów.
    Filtr maksymalny

  • 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. Wynikiem działania filtru jest wartość średnia tego regionu, w którym wariancja jest najmniejsza.
    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. Przenalizujmy podział na regiony dla maski o rozmiarze 5x5.

    x1x2x3x4x5
    x6x7x8x9x10
    x11x12x13x14x15
    x16x17x18x19x20
    x21x22x23x24x25


    Poniżej kolejne regiony oznaczone są podkresleniem:

    x1x2x3x4x5
    x6x7x8x9x10
    x11x12x13x14x15
    x16x17x18x19x20
    x21x22x23x24x25
    x1x2x3x4x5
    x6x7x8x9x10
    x11x12x13x14x15
    x16x17x18x19x20
    x21x22x23x24x25
    x1x2x3x4x5
    x6x7x8x9x10
    x11x12x13x14x15
    x16x17x18x19x20
    x21x22x23x24x25
    x1x2x3x4x5
    x6x7x8x9x10
    x11x12x13x14x15
    x16x17x18x19x20
    x21x22x23x24x25


    Obliczenia dla regionu pierwszego będą wyglądały następująco:
    srednia = (x1 + x2 + x3 + x6 + x7 + x8 + x11 + x12 + x13) / 9
    wariancja = ((srednia - x1)2 + (srednia - x2)2 + (srednia - x3)2 + (srednia - x6)2 + (srednia - x7)2 + (srednia - x8)2 + (srednia - x11)2 + (srednia - x12)2 + (srednia - x13)2) / 9
    Filtr Kuwahara




Autor Język programowania Komentarz Otwórz Pobierz Ocena
Tomasz Lubiński C/C++ Borland Builder 6
Implementacja w C/C++
Implementacja w C/C++
++++- / 7
Tomasz Lubiński Delphi/Pascal Borland Delphi 5
Implementacja w Delphi/Pascal
Implementacja w Delphi/Pascal
++++- / 2
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie



Poprawiony: poniedziałek, 20 czerwca 2011 21:25

Komentarze

 
photo
+2 # Marek 2009-11-07 14:56
Świetny art tego właśnie szukałem jestem zachwycony
Odpowiedz | Odpowiedz z cytatem | Cytować
 
 
photo
+1 # Radek 2009-11-21 16:57
ja też
Odpowiedz | Odpowiedz z cytatem | Cytować
 
 
photo
0 # Cyg 2009-12-14 18:34
Muchas gracias
Odpowiedz | Odpowiedz z cytatem | Cytować
 
 
photo
+1 # piter 2009-12-30 22:32
Super artykuł, dzięki niemu napisałem ciekawy kawałek pracy inżynierskiej a mianowicie shadera do filtrowania tekstur :-). Ale jestem teraz z siebie dumny
Odpowiedz | Odpowiedz z cytatem | Cytować
 
 
photo
0 # danka 2010-01-17 22:15
Świetny arykuł:-)
Odpowiedz | Odpowiedz z cytatem | Cytować
 
 
photo
0 # Stefan 2010-01-28 23:11
trzy dni szukałem o podziałach filtrów... wielkie podziękowanie 8)null
Odpowiedz | Odpowiedz z cytatem | Cytować
 
 
photo
0 # aneta 2010-03-04 04:27
doskonałe opracowanie
oby tak dalej
Odpowiedz | Odpowiedz z cytatem | Cytować
 
 
photo
0 # Roza 2010-03-12 14:34
Bardzo dobra praca wszystko opisane w sposób jasny i czytelny pomogła mi w zrozumieniu i opracowaniu mojej pracy wielkie dzięki dla autora.
Odpowiedz | Odpowiedz z cytatem | Cytować
 
 
photo
0 # Waldek 2010-09-26 19:10
Cudownie, cudownie, cudownie!!!
Odpowiedz | Odpowiedz z cytatem | Cytować
 
 
photo
0 # Krzyś 2010-11-25 13:35
Czy przy filtracji filtrami gradientowymi obrazka monochromatyczn ego (.pgm) mogą wystąpić piksele będące liczbami ujemnymi?
Odpowiedz | Odpowiedz z cytatem | Cytować
 
 
photo
0 # mn 2011-01-18 23:32
pewnie
ujemnych pikseli nie dostaniesz tylko ujemne wartości jasnosci mozesz to normalizowac od 0-255 dzieje sie tak dlatego ze w masce filtru masz wspolczynniki wieksze od 1 lub ujemne
Odpowiedz | Odpowiedz z cytatem | Cytować
 
 
photo
0 # Potargany 2011-04-29 22:57
Witam, próbuję uruchomić przykład ale nie mam odpowiednich bibliotek.
Odpowiedz | Odpowiedz z cytatem | Cytować
 
 
photo
0 # likierek 2011-10-18 14:21
byłabym wdzieczna jakby ktos napisał troszke wiecej na temat filtru kuwahara...byłabym wdzięczna za pomoc...
Odpowiedz | Odpowiedz z cytatem | Cytować
 

Dodaj komentarz

Kod antysapmowy
Odśwież