PRZETWARZANIE OBRAZÓW: Filtracja w dziedzinie częstotliwości VI.

1. Przeanalizuj działanie następującego programu

CImg< unsigned char> filtrowany(oryginal); filtrowany = noweWidmoFFT.FFT(true)[0].normalize(0,255);

CImgList< unsigned char> okno(oryginal,

#include "CImg.h"

using namespace cimg_library;

widmoAmpl,

maska.normalize(0,255),

int main() {

noweWidmoAmpl,

filtrowany);

// Wczytanie obrazu z pliku

CImg< unsigned char> oryginal =

CImgDisplay disp(okno,"Filtracja Fouriera");

CImg< unsigned char>("lena.pgm").resize(256,256); while (!disp.is_closed) {

okno.display(disp);

// Obliczenie FFT (dwie macierze, bo FFT jest zespolona)

}

CImgList<> widmoFFT = oryginal.get_FFT();

return 0;

}

// Wyśrodkowanie widma Fouriera

widmoFFT[0].

translate(oryginal.dimx()/2,oryginal.dimy()/2,0,0,2);

widmoFFT[1].

translate(oryginal.dimx()/2,oryginal.dimy()/2,0,0,2);

2. Wykorzystując program z zadania 1, przeprowadź idealną filtrację górno-, dolno-i pasmowoprzepustową obrazów:

// Widmo amplitudowe (tylko dla prezentacji w oknie)

• Fig0441(a)(characters_test_pattern).tif

CImg< unsigned char> widmoAmpl =

• Fig0334(a)(hubble-original).tif

((widmoFFT[0].get_pow(2)+widmoFFT[1].get_pow(2)).

sqrt()+1.0f).log().normalize(0,255);

Powyższ

y obraz jest dostępny w pliku:

// Utworzenie maski

http://www.imageprocessingplace.com/downloads_V3/dip3e_downloads/dip3e_book

CImg< unsigned char>

_images/DIP3E_CH04_Original_Images.zip

maska(oryginal.dimx(),oryginal.dimy(),1,1,1);

unsigned char one[] = { 1 }, zero[] = { 0 }, white[] = { 255 }; Wyniki filtracji zostały zaprezentowane w dokumencie:

int rmin = 25, rmax = 256;

http://www.imageprocessingplace.com/downloads_V3/dip3e_downloads/dip3e_class

maska.fill(0).

room_presentations/DIP3E_CH04_Art_PowerPoint.zip

draw_circle(widmoAmpl.dimx()/2,widmoAmpl.dimy()/2,rmax,one).

draw_circle(widmoAmpl.dimx()/2,widmoAmpl.dimy()/2,rmin,zero);

// Nowe widmo amplitudowe (tylko dla prezentacji w oknie) 3. Napisz program implementujący filtrację Gaussa w dziedzinie częstotliwości i CImg< unsigned char> noweWidmoAmpl(widmoAmpl); przeprowadź idealną filtrację górno- i dolnoprzepustową następujących obrazów: noweWidmoAmpl.mul(maska);

• Fig0441(a)(characters_test_pattern).tifFig0334(a)(hubble-original).tif

• Fig0450(a)(woman_original).tif

// Filtracja

• Fig0451(a)(satellite_original).tif

CImgList<> noweWidmoFFT(widmoFFT);

•

noweWidmoFFT[0].mul(maska).

Fig0419(a)(text_gaps_of_1_and_2_pixels).tif

translate(-oryginal.dimx()/2,-oryginal.dimy()/2,0,0,2);

noweWidmoFFT[1].mul(maska).

translate(-oryginal.dimx()/2,-oryginal.dimy()/2,0,0,2);

© P.Ślusarczyk

Strona 1 z 1