2022年4月14日 星期四

s1081408 作業4

 

  • 1. 開發環境: 

      • Windows 10 
      • OpenCV 4.5.5 
      • Visual Studio 2022
      • 語言:C++ 

 
 

  • 2. 作業說明: 

      • Discrete Fourier Transform:  
        • 計算輸入圖像DFT結果,將頻譜大小相位角度以灰階圖像方式顯示出來。
        • 利用Gaussian Low-Pass filter處理圖像並輸出經過平滑後的圖像。 
  •  

  • 3. 程式功能: 

      • 讀取圖片:輸入圖片路徑後,若路徑存在,使用imread(IMG_PATH, IMREAD_GRAYSCALE),把圖片以灰階形式讀進來。若路徑不存在的話則提示使用者,並結束程式。 
      • 獲取頻譜大小與相位角度圖像 
        1. 經過 copyMakeBorder() 將原圖用0填充。 
        2. 傅立葉轉換的結果會是複數,因此結果會有兩個值,分成實部和虛部,將兩個部分合併成一個多通道的矩陣。 
        3. 將多通道矩陣放進dft()進行傅立葉轉換後,再針對實部和虛部進行相對應的計算。
          1. 頻譜大小使用magnitude()實現公式,然後再對magnitude求log來看到轉換後的效果。 
          2. 相位角度使用atan()實現公式。 
        4. fftshift()重新排列象限,讓原點在圖像中間。 
        5. Normalize()將變換結果轉換成0-1浮點數。 
        6. 獲取Gaussian Low Pass Filter後的平滑圖像。 
          1. 由上述步驟得到的傅立葉轉換F(u,v),得到D(u,v) 與H(u,v)。 
          2. G(u,v)=H(u,v)*F(u,v),將G(u,v)進行IDFT。 
        7. imshow()顯示操作後結果,waitKey()等待使用者按任意鍵後關閉視窗,使用者可再次輸入圖片,回到步驟1 
  • 4. 執行結果:

      • Spectrum:


      • Phase Angle:

      • Low-pass filter:

沒有留言:

張貼留言