background image

 

 

 

 

 

SPRAWOZDANIE Z ĆWICZENIA 

LABORATORYJNEGO NR 4 

 

 

 

 

 

 

 

Wykonał: Wojciech Węgrecki 

Grupa: I9G2S1

background image

Treść zadania: 

4.1   
Wyświetlenie obrazu oraz jego widma amplitudowego w postaci obrazu, 
wykonanie operacji odbicia widma (fftshift). 
4.2 
Wykonaj operację na widmie obrazu polegającą na usunięciu z widma 
elementów poprzez wymnożenie tablicowe  jego elementów przez 
elementy macierzy maski  (filtracja dolnoprzepustowa - LP): 

 

 

 

 

 

Wykonaj transformatę odwrotną i wyświetl obraz. Porównaj z 
oryginałem.

 

 

4.3 
Czynności z zadania 4.2 wykonaj dla macierzy maski (filtracja 
górnoprzepustowa - HP): 

 

 

 

 

 

4.4 
Korzystając z DFT zwiększ rozdzielczość obrazu. 
 
4.5 
Korzystając z DFT zmniejsz rozdzielczość obrazu. 

 

 
 
 
 

background image

Wykonanie zadania: 

 
4.1 

Zadanie polegało na wyświetleniu obrazu oraz jego widma 
amplitudowego w postaci obrazu oraz wykonaniu operacji odbicia widma 
(fftshift) (rys. 1).  

 
Wszystkie te operacje realizuje kod: 

 

obraz = imread(

'Lisaw.bmp'

); 

%wczytanie obrazka

 

figure(1)

 

subplot(3,1,1)

 

imshow(obraz) 

%wyświetlenie obrazka

 

title(

'Obraz Lisaw.bmp'

)

 

obraz_dft=fft2(obraz); 

%wykonanie DFT

 

subplot(3,1,2)

 

imshow(obraz_dft) 

%wyświetlenie widma

 

title(

'Widmo obrazu Lisaw.bmp'

)

 

subplot(3,1,3)

 

imshow(fftshift(obraz_dft)); 

%odbicie i wyświetlenie widma

 

title(

'widmo obite obrazu Lisaw.bmp'

)

 

 

 

 

rys. 1 Wyświetlenie obrazka, widma obrazka oraz widma odbitego 

 

background image

 

 

4.2 

Zadanie polegało na wykonaniu filtracji dolnoprzepustowej. Następnie 
należało wykonać transformatę odwrotną i wyświetlić obraz (rys. 2 i 3).  

Kod skryptu: 

%#########################

 

%Filtr dolnoprzepustowy

 

 

 

macierz_maska_LP=obraz_dft; 

%stworzenie macierzy maski dla 

filtru dolnoprzepustowego

 

obraz_dft1=obraz_dft; 

%obraz pomocniczy

 

[wys,dl]=size(obraz_dft); 

%wielkosć obrazka

 

 

 

for

 i=1:wys

 

    

for

 j=1:dl

 

        macierz_maska_LP(i,j)=0; 

%wypełnienie całej macierzy 

maski dla filtru dolnoprzepustowego zerami

 

    

end

;

 

end

;

 

for

 i=1:20

 

    

for

 j=1:20

 

        macierz_maska_LP(i,j)=1; 

%wypełnienie lewego górnego 

rogu jedynkami

 

        macierz_maska_LP(wys-i+1,j)=1; 

%wypełnienie lewego 

dolnego rogu jedynkami

 

        macierz_maska_LP(i,dl-j+1)=1; 

%wypełnienie prawego 

górnego rogu jedynkami

 

        macierz_maska_LP(wys-i+1,dl-j+1)=1; 

%wypełnienie 

prawego dolnego rogu jedynkami

 

    

end

 

end

 

obraz_dft1=obraz_dft1.*macierz_maska_LP; 

%przemnożenie obrazka 

przez macierz maskę LP

 

 

 

figure(2)

 

imshow(uint8(obraz_dft1)) 

%wyświetlenie widma po filtracji 

dolnoprzepustowej

 

title(

'Widmo po filtracji dolnoprzepustowej'

)

 

figure(3)

 

imshow(uint8(real(ifft2(obrazek_dft1)))); 

%wykonanie 

tranformaty odwrotnej i wyświetlenie obrazka po filtracji

 

title(

'Obraz po filtracji dolnoprzepustowej'

)

 

 

background image

 

rys. 2 Widmo obrazu po filtracji dolnoprzepustowej 

 

rys. 3 Obraz po filtracji dolnoprzepustowej 

 

.  

 
 

background image

4.3 

Zadanie polegało na wykonaniu filtracji górnoprzepustowej. Następnie 
należało wykonać transformatę odwrotną i wyświetlić obraz (rys. 4 i 5).  

Kod skryptu: 

%#########################

 

%Filtr górnoprzepustowy

 

 

 

macierz_maska_HP=obraz_dft; 

%stworzenie macierzy maski dla 

filtru górnoprzepustowego

 

obraz_dft2=obraz_dft; 

%obraz pomocniczy

 

 

 

 

 

for

 i=1:wys

 

    

for

 j=1:dl

 

        macierz_maska_HP(i,j)=1; 

%wypełnienie całej macierzy 

maski dla filtru górnoprzepustowego jedynkami

 

    

end

;

 

end

;

 

for

 i=1:50

 

    

for

 j=1:50

 

        macierz_maska_HP(i,j)=0; 

%wypełnienie lewego górnego 

rogu zerami

 

        macierz_maska_HP(wys-i+1,j)=0; 

%wypełnienie lewego 

dolnego rogu zerami

 

        macierz_maska_HP(i,dl-j+1)=0; 

%wypełnienie prawego 

górnego rogu zerami

 

        macierz_maska_HP(wys-i+1,dl-j+1)=0; 

%wypełnienie 

prawego dolnego rogu zerami

 

    

end

 

end

 

obraz_dft2=obraz_dft2.*macierz_maska_HP; 

%przemnożenie obrazka 

przez macierz maskę HP

 

 

 

figure(4)

 

imshow(uint8(obraz_dft2)); 

%wyświeltlenie widma po filtracji 

górnoprzepustowej

 

title(

'Widmo po filtracji górnoprzepustowej'

)

 

figure(5)

 

imshow(ifft2(obraz_dft2),colormap(gray)); 

%wykonanie 

tranformaty odwrotnej i wyświetlenie obrazka po filtracji

 

title(

'Obraz po filtracji górnoprzepustowej'

)

 

 

background image

 

rys. 4 Widmo po filtracji górnoprzepustowej 

 

 

rys. 5 Obraz po filtracji górnoprzepustowej 

 

background image

4.4 

Zadanie polegało na zwiększeniu rozdzielczości za pomocą DFT. Powiększyłem 
dany obraz 4-krotnie. Najpierw należało stworzyć macierz o powiększonych 
rozmiarach (2*wysokość, 2*długość). Następnie wypełniłem ją jedynkami. 
Kolejnym krokiem było przerysowywanie poszczególnych ćwiartek widma 
obrazka oryginalnego w

 

odpowiadające im miejsca widma obrazka 

powiększonego (schemat przedstawiony na rys. 6).  
 

 

 
 
 

                        

 
 
 
 
 
 
 
 

rys. 6 Schemat powiększania obrazka 

 

Kod skryptu:  
 

%#########################

 

%Powiększanie obrazka 4-krotnie

 

 

 

wys_pow = 2*wys; 

%zwiększanie wysokości

 

dl_pow = 2*dl; 

%zwiększanie długości

 

 

 

powiekszony=ones(wys_pow,dl_pow); 

%wypełnienie widma obrazka 

powiększonego jedynkami

 

 

 

%przerysowywanie poszczególnych ćwiartek widma obrazka 
oryginalnego w

 

%odpowiadające im miejsce widma obrazka powiększonego

 

powiekszony(1:wys_pow/4,1:dl_pow/4) = 
obraz_dft(1:wys/2,1:dl/2); 

 

powiekszony(1:wys_pow/4,dl_pow-(dl_pow/4-1):dl_pow) = 
obraz_dft(1:wys/2,dl/2+1:dl);

 

powiekszony(wys_pow-(wys_pow/4-1):wys_pow,1:dl_pow/4) = 
obraz_dft(wys/2+1:wys,1:dl/2);

 

background image

powiekszony(wys_pow-(wys_pow/4-1):wys_pow,dl_pow-(dl_pow/4-
1):dl_pow) = obraz_dft(wys/2+1:wys,dl/2+1:dl);

 

powiekszony = powiekszony*4;

  

figure(6)

 

imshow(uint8(powiekszony)) 

%wyświetlenie widma powiększonego 

obrazu

 

title(

'Widmo powiekszanego obrazu'

)

 

obrazek_pow=uint8(ifft2(powiekszony)); 

%wykonanie transformaty 

odwrotnej

 

figure(7)

 

imshow(obrazek_pow,colormap(gray));

%wyświetlenie powiększonego 

obrazu

 

title(

'Obraz powiekszony 4-krotnie'

)

 

 

 

 

rys. 7 Widmo obrazka powiększonego 

background image

 

rys. 8 Obrazek powiększony 4-krotnie 

 
4.5 

 

Zadanie polegało na zmniejszeniu rozdzielczości za pomocą DFT. 
Pomniejszyłem dany obraz 4-krotnie. Najpierw należało stworzyć macierz o 
pomniejszonych rozmiarach (wysokość/2, długość/2). Następnie wypełniłem ją 
jedynkami. Kolejnym krokiem było przerysowywanie poszczególnych rogów 
widma obrazka oryginalnego w

 

odpowiadające im miejsca widma obrazka 

pomniejszonego (schemat przedstawiony na rys. 9).  

 

 

rys. 9 Schemat pomniejszania obrazka 

 

background image

Kod skryptu: 
 

%#########################

 

%Pomniejszanie obrazka 4-krotnie

 

 

 

wys_pom = wys/2;

 

dl_pom = dl/2;

 

 

 

%przerysowywanie poszczególnych ćwiartek widma obrazka 
oryginalnego w

 

%odpowiadające im miejsce widma obrazka powiększonego

 

 

 

pomniejszony=ones(wys_pom,dl_pom);

 

pomniejszony(1:wys_pom/2,1:dl_pom/2) = 
obraz_dft(1:wys/4,1:dl/4);

 

pomniejszony(1:wys_pom/2,dl_pom-(dl_pom/2-1):dl_pom) = 
obraz_dft(1:wys/4,dl-(dl/4-1):dl);

 

pomniejszony(wys_pom-(wys_pom/2-1):wys_pom,1:dl_pom/2) = 
obraz_dft(wys-(wys/4-1):wys,1:dl/4);

 

pomniejszony(wys_pom-(wys_pom/2-1):wys_pom,dl_pom-(dl_pom/2-
1):dl_pom) = obraz_dft(wys-(wys/4-1):wys,dl-(dl/4-1):dl);

 

 

 

pomniejszony=pomniejszony/4;    

 

 

 

figure(8);

 

imshow(uint8(pomniejszony)); 

%wyświetlenie widma 

pomniejszonego obrazu

 

title(

'Widmo pomniejszonego obrazu'

);

 

obrazek_pom=uint8(ifft2(pomniejszony)); 

%wykonanie 

transformaty odwrotnej

 

figure(9);

 

imshow(obrazek_pom,colormap(gray)); 

%wyświetlenie 

pomniejszonego obrazu

 

title(

'Obraz pomniejszony 4-krotnie'

 

background image

 

rys. 10 Widmo obrazka pomniejszonego 

 
 
 

 

rys. 11 Obrazek pomniejszony 4-krotnie 

 

 
 

background image

WNIOSKI 
 

 

Filtracja dolnoprzepustowa prowadzi do uzyskania widma, które po wykonaniu 
transformaty odwrotnej skutkuje powstaniem obrazu mniej ostrego, o 
niewidocznych szczegółach. Im większy jest zakres wypełnienia jedynkami tym 
obraz bardziej przypomina oryginał. 

Wynikiem filtracji górnoprzepustowej jest widmo, które po transformacji 
odwrotnej staje się obrazem , w którym piksele będące mieszanką czerni i bieli 
stają się całkowicie czarne, przez co nowopowstały obraz jest w zdecydowanej 
większości czarny. Pozostały na nim jedynie białe kontury. Im większy zakres 
jest wyzerowany tym obraz wynikowy jest bardziej zaciemniony, nieczytelny i 
zawiera coraz słabsze kontury. 

Przy kolejnym przekształceniu obrazu dyskretna transformata Fouriera została 
wykorzystana do zmiany rozdzielczości obrabianego obrazu. Rysunek w postaci 
widma podzielonego  na cztery równe narożne obszary  został wpisany do 
macierzy dwukrotnie większej od początkowych rozmiarów obrazu a pozostałe 
miejsca w macierzy pozostały wypełnione wartością „1”. Wykonanie odwrotnej 
transformaty Fouriera na wypełnionej w ten sposób macierzy doprowadziło do 
powstania obrazu o czterokrotnie zwiększonej rozdzielczości. Dodatkowo 
należało wzmocnić wynikowy obraz, żeby nie był przyciemniony. 
Niepożądanym efektem powiększenia okazała się utrata jakości obrazu.  

Przy zmniejszaniu obrazu nie zostało użyte całe widmo, a jedynie najbardziej 
skrajne jego części, z których każda stanowiła 1/16 całości, w rezultacie nowy 
obraz powstał na podstawie ¼ oryginalnego widma. Należało je jeszcze 
podzielić przez 4, gdyż energia oryginalnego obrazu rozkładana na mniejszym 
obszarze sprawiała, że wynikowy obrazek był prześwietlony. Po tym zabiegu w 
jakości obrazu nie dało zauważyć się żadnych znaczących strat jakości gdyż na 
zmniejszonym rysunku szczegóły są mniej widoczne.  

Dyskretna transformata Fouriera przekształca obraz na widmo, na którym 
można skutecznie dokonywać modyfikacji. Umiejętne nimi operowanie w 
połączeniu z wykorzystanie odwrotnej transformaty Fouriera daje nam szereg 
możliwości przekształcania obrazu w środowisku Matlab.