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