background image

PRZETWARZANIE OBRAZÓW: Filtracja 

w dziedzinie częstotliwości 

VI. 

 

 

 

 

 

 

 

  

© P.Ślusarczyk 2013 

 

   

 

 

 

 

 

 

Strona 1 z 1 

 

1.  P

rzeanalizuj działanie następującego programu 

 

 
#include "CImg.h" 
using namespace cimg_library; 
 
int main() { 
  

// Wczytanie obrazu z pliku 

  CImg<unsigned char> oryginal =  
     CImg<unsigned char>("lena.pgm").resize(256,256); 
 

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

  CImgList<> widmoFFT = oryginal.get_FFT(); 
       
  

// 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); 
       
  

// Widmo amplitudowe (tylko dla prezentacji w oknie) 

  CImg<unsigned char> widmoAmpl = 
   ((widmoFFT[0].get_pow(2)+widmoFFT[1].get_pow(2)). 
     sqrt()+1.0f).log().normalize(0,255); 
       

  // Utworzenie maski       

  CImg<unsigned char
     maska(oryginal.dimx(),oryginal.dimy(),1,1,1); 
  unsigned char one[] = { 1 }, zero[] = { 0 }, white[] = { 255 }; 
  int rmin = 25, rmax = 256; 
  maska.fill(0). 
    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) 

  CImg<unsigned char> noweWidmoAmpl(widmoAmpl); 
  noweWidmoAmpl.mul(maska); 
       

  // Filtracja      

  CImgList<> noweWidmoFFT(widmoFFT); 
  noweWidmoFFT[0].mul(maska). 
   translate(-oryginal.dimx()/2,-oryginal.dimy()/2,0,0,2); 
  noweWidmoFFT[1].mul(maska). 
   translate(-oryginal.dimx()/2,-oryginal.dimy()/2,0,0,2);                   
       
 
       

       
      CImg<unsigned char> filtrowany(oryginal); 
      filtrowany = noweWidmoFFT.FFT(true)[0].normalize(0,255);     
             
      CImgList<unsigned char> okno(oryginal, 
                                   widmoAmpl, 
                                   maska.normalize(0,255), 
                                   noweWidmoAmpl, 
                                   filtrowany); 
      CImgDisplay disp(okno,"Filtracja Fouriera"); 
       
      while (!disp.is_closed) { 
            okno.display(disp); 
      } 
      return 0; 
}

 

 

 

 

2. 

Wykorzystując program z zadania 1, przeprowadź idealną filtrację górno-, dolno- 
i pasmowo

przepustową obrazów: 

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

 

Powyższy obraz jest dostępny w pliku: 

http://www.imageprocessingplace.com/downloads_V3/dip3e_downloads/dip3e_book
_images/DIP3E_CH04_Original_Images.zip

 

 
Wyniki filtracji 

zostały zaprezentowane w dokumencie: 

http://www.imageprocessingplace.com/downloads_V3/dip3e_downloads/dip3e_class
room_presentations/DIP3E_CH04_Art_PowerPoint.zip

 

 
 

3.  Napisz program 

implementujący filtrację Gaussa w dziedzinie częstotliwości i 

przeprowadź idealną filtrację górno- i dolnoprzepustową następujących obrazów: 

•  Fig0441(a)(characters_test_pattern).tifFig0334(a)(hubble-original).tif 
•  Fig0450(a)(woman_original).tif 
•  Fig0451(a)(satellite_original).tif 
•  Fig0419(a)(text_gaps_of_1_and_2_pixels).tif