SPRAWOZDANIE Z ĆWICZENIA
LABORATORYJNEGO NR 4
Wykonał: Wojciech Węgrecki
Grupa: I9G2S1
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.
1
1
1
1
0
0
0
0
0
1
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
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'
)
rys. 2 Widmo obrazu po filtracji dolnoprzepustowej
rys. 3 Obraz po filtracji dolnoprzepustowej
.
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'
)
rys. 4 Widmo po filtracji górnoprzepustowej
rys. 5 Obraz po filtracji górnoprzepustowej
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).
1
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);
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
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
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'
)
rys. 10 Widmo obrazka pomniejszonego
rys. 11 Obrazek pomniejszony 4-krotnie
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.