2021年4月24日 星期六

s1073342 影像處理作業 3

 

  • 作業題目:
    • 請撰寫一個程式,讀取一張 256 色灰階圖像。
    •  (1)計算輸入圖的離散傅立葉轉換結果,並將頻譜大小與相位角度各以灰階 256 色圖像 方式呈現出。 
    • (2)對圖像利用 Gaussian Low-Pass filter 處理,輸出平滑後圖像。(程式利用課本的 frequency filter 步驟者可得滿分!)
  •  使用環境:
    • window 10
    • python 3.9.2
    • numpy 1.20.1
    • opencv-python 4.5.1.48
  • 程式功能:
    • 輸入圖片檔案名稱,在同資料夾下,會輸出"original_fileName.jpg", "visible_real_fileName.jpg", "angle_fileName.jpg", "output_fileName.jpg"。
  • 程式碼相關資訊:
    • (-1)^(x+y) 使用mask遮罩x+y為偶數的位置,再利用mask進行運算。
    • 計算到正中央的距離,使用Gaussian函數計算出low pass圖片,對計算出的low pass圖片修正(調整值域)
    • 取出傅立葉後的實部,進行微調,方便觀察。
  • 執行結果:
輸入圖片

轉換黑白圖片
頻譜圖
相位角
輸出圖片
執行時間:3秒
優化程式碼後加速到1.4秒

4K原圖
執行時間:40秒
優化程式碼後加速到17秒


8K原圖

執行時間:164秒(發現主要是Gaussian占太多時間,目前不知道加速方法)
優化程式碼後加速到75秒(還是有好久,依然是Gaussian佔大部分時間)
已找到解決方法,使用兩個一維Gaussian,矩陣相乘,可以快速得到二維的矩陣,不過相乘的矩陣沒辦法非常的平滑,最快的方式還是用小的Gaussian kernel 對圖片卷積。

參考資料:https://wallpaperaccess.com/7680x4320#648057 
https://images.app.goo.gl/96uAAKZCz5HBUvdh9












沒有留言:

張貼留言