s1091444 作業4

 同步發布於 titaliu1224.github.io


功課要求


圖片似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像。



成果


開發環境


  • Windows 10 
  • Visual Studio Code 
  • Python 3.9.16 
  • OpenCV 4.5.4


實作

使用的 libraries 如下:

import cv2
import matplotlib.pyplot as plt
import numpy as np


1/ 使用 DFT 取得頻域圖像與頻譜圖


這裡和作業3步驟都一樣。


2/ 用滑鼠點選 notch points


notch point 通常用來消除圖像上的特定頻率,這裡我們透過觀察,可以發現頻譜圖上有六個週期性出現的亮點,所以來進行手動選取。

建立一個 function def add_notch_point(event, x, y, flags, img) 將點擊處的值設為 0。


並使用 cv2.setMouseCallback() 建立一個可供點擊的視窗。


在這裡就能知道當時有平移 DFT 圖像的好處了,可以很快的發現哪些亮點是週期性的重複出現。


3/ 平移得到的 notch points 圖像


剛才我們都是看著平移過的頻譜圖進行點擊,但原先的 DFT 結果並非這樣,所以我們要反向的把 notch points 圖像給平移回來。


4/ 套用 notch filter


將原本的 DFT 圖像的兩個通道和平移過的 notch filter 相乘,消除滑鼠點過的黑點部分,週期性雜訊就會被去除掉。

# apply notch filter
planes[0] = planes[0] * notch_points_img
planes[1] = planes[1] * notch_points_img
dftB = cv2.merge(planes)


5/ 利用反向 DFT 還原圖片


最後使用 cv2.idft() 還原圖像,由於前面已經把刪除好雜訊的 dftB 做出來了,所以這邊只要還原就能得到去除雜訊後的圖像。


總結


將影像轉換至頻域後,透過觀察可以消除一些週期性出現的亮點,從而消除週期性雜訊。


參考資料



留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1091537 Homework #1