2022年4月15日 星期五

s1081424 作業4

 一、作業說明:


    撰寫一個程式,讀取一張256色灰階圖像。

    (1)    計算輸入圖的離散傅立葉轉換結果,並將頻譜大小與相位角

            度各以灰階56色圖像方式呈現出。

    (2)    對圖像利用 Gaussian Low-Pass filter處理,輸出平滑後圖像。


二、開發環境:


    (1)    Windows 10 + Visual Studio2019 + Opencv3.4.6

    (2)    方案組態:Debug

    (3)    方案平台:x64

    (4)    使用到的Library:iostram、opencv/opencv.hpp、math.h、cmath

    (5)    使用的語言:C++


三、實作說明:


    1.    一開始先讀進圖片,若檔名不存在則顯示

      


2.    輸出原圖

        

           

    3.    利用下面的公式先計算Frequency Spectrum,



            



            

            f是空間域值,F是Frequency域值,變換之後的Frequency域值是複數,

           因此顯示傅立葉轉換之後的結果需要利用實數圖像加虛數圖像來顯現,    

           將成果圖片印製出來。

      

        



                          

    4.    利用Gaussian Low-Pass filter處理,高斯濾波是一種線性平滑濾波,適
            用於消除高斯噪聲,廣泛應用於圖像處理的減噪過程。通俗的講,高
            斯濾波就是對整幅圖像進行加權平均的過程,每一個像素點的值,都
            由其本身和鄰域內的其他像素值經過加權平均後得到。
            
            先對每一行進行一維高斯濾波,再對每一列進行一維高斯濾波。

        

            加上trackbar,使使用者可以選擇Sigma值,最後再將成果列印出來。

        




s1081515 作業4


作業說明:

  • 計算輸入圖的離散傅立葉轉換結果,並將頻譜大小與相位角度各以灰階256色圖像方式呈現出。
  • 對圖像利用Gaussian Low-Pass filter處理,輸出平滑後圖像。
  • 程式利用課本的frequency filter步驟者可得滿分,在網頁中將每個步驟結果呈現出。直接套用opencv函數得一半分數。

使用環境/語言:

  • Windows11
  • Visual Studio 2019
  • Opencv-4.3.0
  • C++

程式說明:

  1. 輸入圖片名稱或路徑(如要輸入名稱請把圖片和.cpp檔放一起)
  2. 以灰階模式讀取圖片
  3. 將圖片進行padding(長和寬都是兩倍)
  4. 定義傅立葉轉換後要存取實部和虛部的地方
  5. 用merge()合成起來
  6. 進行dft()來取得所需資訊
  7. 用split()分離出實部和虛部
  8. 使用magnitude()和phase()算出頻譜圖和象位角
  9. 因為此時的値無法在電腦上顯示出來因此進行log(1 + M)的運算
  10. 將兩張圖進行象限交換的處理令最大值在圖片中中心後用normalize()再進行輸出
  11. 將padding後的圖片每個點乘上pow((-1), (x + y))
  12. 進行dft()來取得所需資訊
  13. 利用公式計算filter(D0設為50)  H
  14. 將傅立葉轉換出的實部和虛部個別乘上H後合成形成G
  15. 將G進行逆傅立葉轉換idft()
  16. 在任何一張圖按0鍵已取得最後結果(即normalize後的圖)
  17. 分離出實部後將其normalize()得出模糊後的圖

執行方式/畫面:

                                                       原圖:

頻譜圖:

相位角(phase):

相乘的頻譜大小:

Normalize():

參考資料:

https://blog.csdn.net/xddwz/article/details/110938652






2022年4月14日 星期四

s1083303 作業4

  

1、作業說明

       請撰寫一個程式,讀取一張256色灰階圖像。

(a)計算輸入圖的離散傅立葉轉換結果,並將頻譜大小與相位角度各以灰階256色圖像方式呈現出

(b)對圖像利用Gaussian Low-Pass filter處理,輸出平滑後圖像。

2、開發環境

  • Windows 10
  • OpenCv 4.5.5
  • Python 3.10.1

3、程式說明

1)    計算輸入圖的離散傅立葉轉換結果

利用cv2.dft()計算離散傅立葉轉換結果

2)    將頻譜大小與相位角度個以灰階256色圖像方式呈現出

分別使用np.fft.fftshift()cv2.magnitude()將傅立葉的轉換結果shift成頻譜圖和相位角度圖

3)    對圖像進行gaussian low pass filter處理

使用子下兩條式子分別找到D(u,v)H(u,v),再使已進行傅立葉轉換的相位角圖與H(u,v)相乘進行low pass的濾波。

4)    對濾波完成的圖像反傅立葉轉換

使用cv2.idft()進行反傅立葉轉換並輸出

4、執行結果

執行程式後會跳出一個視窗如下,分別展示input image、轉換後頻譜圖、轉換後相位圖、高斯low-pass filter、平滑後圖像。












s1073353 作業4

 

作業說明

(1)    計算輸入圖的離散傅立葉轉換結果,並將頻譜大小與相位角度各以灰階256色圖像方式呈現出。

(2)    對圖像利用Gaussian Low-Pass filter處理,輸出平滑後圖像。

開發環境

  • Windows 10
  • Visual Studio 2019
  • OpenCV 4.5.5

程式說明

  1. imread讀取灰階圖片
  2. getOptimalDFTSize()和copyMakeBorder()調整圖片尺寸
  3. 用dft()做離散傅立葉轉換
  4. magnitude()和phase()取得頻譜圖和相位角
  5. 由於不清楚怎麼使用Gaussian Low-Pass filter,所以平滑圖片就直接用GaussianBlur()了OTZ
  6. imshow秀出圖片

執行結果

 
 

 
原圖

頻譜圖

相位角

高斯模糊