s1093332 作業4

 Assignment4 : 影像還原練習

功能:

    (a)附件中的 image4 似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像(將圖中雜訊去除)。

開發環境:Windows11 + Visual Studio 2022 + Opencv4.7.0

程式說明:

1.以灰階模式讀取圖片

  • imread((path, IMREAD_GRAYSCALE)以灰階模式讀取圖片位置。
2.做傅立葉轉換,並顯示頻譜圖
  • getOptimalDFTSize():計算DFT的優化尺寸的函數,該函數會接受一個整數參數,並返回大於或等於該參數的最小2的冪次方。如果輸入參數本身已經是2的冪次方,則直接返回輸入參數。
  • copyMakeBorder():對圖像進行複製邊界的操作。其功能為將圖像四周複製一份,擴展圖像邊界。
  • merge():將多個矩陣按通道合併成一個多通道的矩陣。
  • dft():進行離散傅立葉轉換。
  • split():將多通道圖像分離為單通道圖像,使通道之間進行轉換。
  • magnitude():用於計算複數的模,即幅度
  • Scalar():數據類型,用於表示像素值或其他數值。可以表示包含一個或多個元素的向量,每個元素都是浮點數或整數。
  • log():計算傅立葉變換的頻譜,以獲得更好的顯示效果,並且在正規化之前使用。
  • normalize():將輸入矩陣的值範圍進行線性映射,將其調整為指定範圍內的值。用於正規化頻譜圖像的像素值。
3.分析輸入圖像的頻譜後,可以看到頻譜中心外有6個峰值用滑鼠在圖像上畫出一個矩形框,並將這個矩形框的位置和大小信息存入一個容器(notch_Rect)中。
  • EVENT_MOISEMOVE表示滑鼠移動事件。
  • EVENT_LBUTTONDOWN:表示滑鼠左鍵按下事件。
  • EVENT_LBUTTONUP:表示滑鼠左鍵釋放事件。
  • setMouseCallback(): 用於設置鼠標事件回調函數的函數。該函數可以用於為指定的窗口綁定鼠標事件,當用戶在窗口中執行鼠標操作時,可以調用指定的回調函數來處理鼠標事件。
4.設計notch_filter
  • ones():是一個函數,可以用來創建一個指定大小的矩陣,其中所有元素的值均為1。
  • multiply():用來計算兩個矩陣(Mat)或矩陣和標量之間逐元素相乘的函數。
5.將圖像象限重新排列,使原點位於圖像中心。
  • copyTo():將一個 Mat 物件的數據複製到另一個 Mat 物件中。
6.還原影像
  • divide():用於進行數組除法操作的函數。該函數可以將一個數組的每個元素都除以指定的標量或另一個數組的對應元素
  • idft():執行反離散傅立葉變換。
成果展示:
(原圖)

(還原後圖像)


參考資料:
  • https://blog.csdn.net/cyf15238622067/article/details/88734512

留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1091537 Homework #1