Filtracja obrazów
Filtr cyfrowy:
Zapis programu: h(1,1)=str2num(get(e1,'string')); % odczyt elementu maski filtru h(1,2)=str2num(get(e2,'string')); h(1,3)=str2num(get(e3,'string')); h(2,1)=str2num(get(e4,'string')); h(2,2)=str2num(get(e5,'string')); h(2,3)=str2num(get(e6,'string')); h(3,1)=str2num(get(e7,'string')); h(3,2)=str2num(get(e8,'string')); h(3,3)=str2num(get(e9,'string')); waga=sum(sum(h)) im2=filter2(h,im); subplot('position',[0.03 0.22 0.45 0.73]), imshow(im), title('Obraz oryginalny') minimum1=min(min(im2)) maksimum1=max(max(im2))
Zapis programu cd.: im3=mat2gray(im2); subplot('position',[0.53 0.22 0.45 0.73]), imshow(im3), title('Obrazek intensywności') minimum2=min(min(im3)) maksimum2=max(max(im3)) im4=uint8(round(im3*255)); minimum3=min(min(im4)) maksimum3=max(max(im4)) pause(1) subplot('position',[0.53 0.22 0.45 0.73]), imshow(im4), title('Obrazek uint8 z gray')
Filtr medianowy z szumem:
Filtr medianowy z szumem 0.2 i medianą 3x3:
Filtr medianowy z szumem 0.2 i medianą 5x5 :
Zapis programu: subplot('position',[0.03 0.6 0.45 0.3]), imshow(im), title('Obraz oryginalny') den=str2num(get(t4,'string')); im2=imnoise(im,'salt & pepper',den); subplot('position',[0.53 0.6 0.45 0.3]), imshow(im2), title(['Obraz zaszumiony z gęstością szumu ',num2str(gam)]) poz=str2num(get(t7,'string')); im3=medfilt2(im,[poz,poz]); subplot('position',[0.03 0.22 0.45 0.3]), imshow(im3), title(['Obraz po filtracji medianowej z otoczeniem: ',num2str(poz),' x ',num2str(poz)]) im4=medfilt2(im2,[poz,poz]); subplot('position',[0.53 0.22 0.45 0.3]), imshow(im4), title(['Obraz po filtracji medianowej po zaszumieniu z otoczeniem: ',num2str(poz),' x ',num2str(poz)])
Detekcja brzegów za pomocą operatorów gradientowych:
Detektory linii - wyglądają tak, jak linia którą próbują znaleźć. Duża wartość w środku otoczona małymi wartościami.
Detektory linii:
Detektory linii:
Maski do wykrywania narożników: Gradient Wschód Zachód Południowy-Wschód Północny-Zachód Gradient Południe Północ Południowy-Zachód Północny-Wschód
Maski do wykrywania narożników:
Podstawowe własności operatorów gradientowych: pierwsza pochodna obrazu może być wykorzystana do detekcji brzegu oraz jego kierunku, punkt zmiany znaku drugiej pochodnej, tj. jej miejsce zerowe (ang. zero crossing) obrazu może służyć do wyznaczenia miejsca wystąpienia brzegu. Wadą operatorów gradientowych jest uwypuklanie zakłóceń impulsowych w obrazach (może to powodować pogorszenie jakości obrazu lub detekcje fałszywych brzegów).
Gradient obrazu f(x,y) w punkcie (x,y) określa wektor: Wektor gradientu wskazuje kierunek największej zmiany jasności obrazu. Długość tego wektora nazywamy gradientem i obliczamy z zależności:
Dla obrazów dyskretnych gradient jest aproksymowany różnicami jasności obrazów dla kierunku poziomego i pionowego: lub też kierunków ukośnych:
Gradient Sobela: 0 stopni 90 stopni
Gradient Sobela: (0 stopni) (180 stopni) (45 stopni) (225 stopni)
Gradient Sobela: Wynik działania gradientu Sobela 0 stopni:
Gradient Sobela 45o i 135o:
Gradient Sobela złożenie 45o i 135o:
Gradient Sobela złożenie 0o i 45o:
Zapis programu: %h=[-1 -2 -1; 0 0 0; 1 2 1]; im2=filter2(h,im); %h=[1 0 1; -2 0 2; -1 0 1]; %h=[1 0 -1; 2 0 -2; 1 0 -1]; h=[0 1 2; -1 0 1; -2 -1 0]; %h=[0 -1 -2; 1 0 -1; 2 1 0]; im3=filter2(h,im); im4=sqrt(im2.*im2+im3.*im3); im5=mat2gray(im4); minimum=min(min(im5)) maksimum=max(max(im5))
Zapis programu cd.: subplot('position',[0.53 0.22 0.45 0.73]), imshow(im5), title('Obrazek po złożeniu i normalizacji') gr=graythresh(im5) sr=mean2(im5) st=std2(im5) bw=im2bw(im5,sr+st); pause(1) subplot('position',[0.03 0.22 0.45 0.73]); imshow(bw), title('Obrazek binarny') subplot('position',[0.03 0.22 0.45 0.73]), imshow(im); title('Wprowadzony obraz') subplot('position',[0.53 0.22 0.45 0.73]); imshow(bw), title('Obrazek binarny')
Gradient Prewitta: (0 stopni) (180 stopni) (45 stopni) (225 stopni)
Gradient Kirscha: (0 stopni) (180 stopni) (45 stopni) (225 stopni)
Gradient Robertsa: Pionowy Poziomy Poziom/Pion
Analiza obrazów: metody segmentacji obrazu (obraz binarny); pomiar obiektów i ich kształtu (współczynniki kształtu, momenty geometryczne); wymiar fraktalny; szkieletyzacja; operacje morfologiczne na obrazach binarnych oraz w skali szarości.
Miejsce segmentacji w procesie rozpoznawania
Obraz po segmentacji powinien mieć następujące cechy: Obraz, powinien być jednorodny i jednolity (nie dotyczy to tekstur); Wnętrza obszarów powinny być proste bez wielu małych otworów; Obszary przylegające (graniczące ze sobą) do siebie powinny mieć inne wartości; Brzegi obszarów powinny być proste, nie poszarpane.
Segmentacja przez progowanie: Przykładowy obraz zapisany w stopniach szarości: f(x,y) Fragment powyższego obrazu przedstawiony jako funkcja dwuwymiarowa y x
Segmentacja przez progowanie cd.: Segmentacja obrazu ryżu z progiem 100: Rozciągnięty histogram oryginalnego obrazu ryżu
Inne przykłady segmentacji przez progowanie:
Inne przykłady segmentacji przez progowanie:
Inne przykłady segmentacji przez progowanie:
Inne przykłady segmentacji przez progowanie:
Przykłady nieudanej segmentacji przez progowanie: próg 40 próg 55 próg 75 próg 110 próg 120 próg 130
Przykład segmentacji przez wykrywanie krawędzi: obraz oryginalny Krawędzie po rozciągnięciu histogramu Krawędzie po wyrównaniu histogramu Krawędzie na oryginale
Przykład segmentacji przez wykrywanie krawędzi cd.: Krawędzie po przekształceniu gamma Krawędzie po filtracji medianowej Krawędzie po przekształceniu gamma oraz filtracji medianowej