SPRAWOZDANIE Z ĆWICZENIA LABORATORYJNEGO NR 4
Wykonał: Wojciech Węgrecki
Grupa: I9G2S1Treść zadania:
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.
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.
1
1
1
1
0
0
0
0
0
1