SprawozdanieLab4, WAT, SEMESTR V, Cfrowe przetwarzanie sygnałów, Ćwiczenia, cps lab 4


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):

0x08 graphic

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):

0x08 graphic

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')

0x01 graphic

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')

0x01 graphic

rys. 2 Widmo obrazu po filtracji dolnoprzepustowej

0x01 graphic

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')

0x01 graphic

rys. 4 Widmo po filtracji górnoprzepustowej

0x01 graphic

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).

0x08 graphic

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')

0x01 graphic

rys. 7 Widmo obrazka powiększonego

0x01 graphic

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).

0x01 graphic

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')

0x01 graphic

rys. 10 Widmo obrazka pomniejszonego

0x01 graphic

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



Wyszukiwarka