發表文章

目前顯示的是 4月, 2023的文章

s1081415 作業4

圖片
   題目說明:  主題: 影像還原練習 附件中的 image4 似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像(將圖中雜訊去除)。 環境:   C++ (visual studio 2019) 實作:  (原圖) (去噪後的結果) 先把圖片讀進來,  之後再做高斯濾波法去噪,  去噪完後因為圖片變模糊所以再做圖片銳利化,  最後再做一些微調 程式碼說明:  GaussianBlur可以執行高斯濾波法去除圖片中的噪聲,  但會使圖片變得模糊 addWeighted可以執行圖片銳利化,  先設定遮罩後再進行銳利化 最後再利用addWeighted對圖片的對比度進行微調 實際Demo展示影片: 

s1091533 作業4

圖片
作業4說明 題目: 影像還原練習,附件中的 image4 似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像(將圖中雜 訊去除)。  開發環境 : Windows 10 + Visual Studio Code + OpenCV 4.7.0 + Python 程式說明 : 1.np.fft.fft2():將圖片進行傅立葉轉換。 2.mask = np.zeros((rows, cols), np.uint8):去除頻譜圖的雜訊,將頻譜圖與mask相乘,得到經過濾波器處理後的頻譜圖。 3. np.fft.ifft2():將處理過的頻譜圖進行反傅立葉轉換,得到新的圖像。 4.cv2.GaussianBlur():最後將圖片進行高斯模糊,去除邊緣效果和高頻噪聲, 得到較自然的圖像。 5. plt.imshow():套用matplotlib,將結果顯示出來。 Demo:

s1091438 作業4

圖片
   影像還原練習 一、題目說明           附件中的 image4 似乎受到某種頻域雜訊干擾,           撰寫一個程式嘗試復原此圖像(將圖中雜訊去除)。 二、開發環境         OS : Windows 11         Editor : Visual Studio Code         Language : Python         Package : OpenCV - 4.7.0 三、使用Function說明          (a) 原圖                1 .  imread()   :  從檔案中讀取一張 灰階 圖像        (b) 傅立葉              1 .  cv2.dft() :  傅立葉轉換, 將圖像轉由 時域換為頻域              2.   np.fft.fftshift() :  將傅立葉轉換後的 頻譜中心移至圖像中心位置 ,便於觀察             3.  cv2.magnitude() :  計算向量的長度(幅度),用於計算傅立葉變換的實部和虛部之間的歐幾                 里得距離(兩點之間的直線距離),進而得到每個頻率的振幅值             4.   np.log() :  為了增強高頻的幅度及降低低頻的幅度,使表現更明顯        (c) 設計Notch Filter             1.  先找出有雜質的點的 中心座標, 並設計半徑大小 (下圖C圈起來的地方)             2.  np.ones() :  此處用來創建和原圖大小相同的 二維數組 ,所有元素初始化為1                3. 接下來,透過 將位於 雜訊點半徑範圍內的所有值設為0 ,來削弱或抑制噪聲頻率分量 。                          4.  np.meshgrid() :  計算此處用來產生大小分別為圖像的寬、高的矩陣                 (包含了所有像素的座標)                      5.  np.arange() :   根據圖像的寬和高創建連續的數字序列                   6.  np.sqrt() :  計算每個像素到雜訊點中心的距

s1082046 作業 4

圖片
  主題 : 影像還原練習 附件中的 image4 似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像 ( 將圖中雜訊去除 ) 。 一、 開發環境 : l    Windows 11 l    Visual Studio 2022 C++ l    OpenCV 4.7.0 二、 程式功能 : ( 一 ) 主程式     Step1: 用 imread() 讀入灰階圖片 ”image4.png”     Step2: 將圖片 resize 成適當大小顯示 ( 在此將長寬縮小至原圖的一半 )     Step3: 利用 imshow() 顯示原圖     Step4: 用作業 3 方法,以 dft() 副程式獲取原圖片頻譜圖,並用 dft_shift() 副程式 重新排列傅立        葉轉換後圖像象限,使原點位於頻譜圖中心     Step5: 觀察原圖片頻譜圖,發現除了頻譜中心外,另有 6 個峰值,在此 以滑鼠點選         setMouseCallback() 頻譜圖峰值來獲得峰值所在座標 ( 二 ) 副程式 ( 以陷波濾波概念處理峰值,去除水平雜訊 )     Step1: 獲得滑鼠點選的座標點,利用 putText() 顯示於頻譜圖上 ( 設定字的大小、粗細、顏        色 ) ,顯示如下圖     Step2: 利用 vector<Point> p 儲存六個峰值點 ( p.push_back( Point ( x , y )) )     Step3: 當 6 個峰值點選擇完畢,關掉點選視窗 ( destroyWindow( " " ) )     Step4: 設計 notch filter ,在六個峰值座標畫上黑色實心圓 circle() 作為遮罩,經過 notch filter 後         的頻譜如下圖   Step 5 : 將 notch filter 後的頻譜經過 IDFT( 作法如作業 3) ,復原去除雜訊之圖像 notch filter 後的頻譜 ²   去除雜訊後的圖像 ²    程式 demo

s1093352 hw4

圖片
 影像還原練習 附件中的image4 似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像(將圖中雜訊去除)。 開發環境: Window 10 + Visual Studio 2019 + OpenCV 3.4.1  透過觀察作業3的頻譜圖可以發現中間有6個明顯的 periodic noise 創建一個全白的mask 接著把頻譜圖 noise 的地方用 circle() 來塗黑(可以找圖一邊的3個noise就好,因為對稱關係再用圖片尺寸去和 noise 相減來得到另一邊 noise 的位置) 因為之前顯示的頻譜圖有把低頻移到中間,所以mask塗黑的部分是移動過的位置,因此要在shift來還原到真正塗黑的頻譜圖的位置) 對 mask 用 planes()  多通道來儲存實數和虛數部分,merge() 來合併planes 接著用 mulSpectrums() 把頻譜圖和 mask 相乘來完成 noise 的 filtering idft() 來逆傅立葉轉換回去圖片 split() 來分離planes的實數和虛數部分並取實數的部分 用 normalize() 歸一化來把值設定在0~255之間 並用 convertTo() 來轉成整數 最後用GaussianBlur() 來使圖片更平滑一點 原圖 結果

s1081402 作業4

圖片
 開發環境:Python 3.9.13, Windows 10, OpenCV 4.7.0 功能: 附件中的 image4 似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像(將圖中雜訊去除)。 說明: 先從作業3中存下頻譜圖,並使用小畫家將頻譜圖中的雜訊去除 原頻譜圖 修改後頻譜圖 接著將image4進行傅利葉轉換後將修改後的頻譜圖與濾波器進行相乘後再進行逆傅利葉轉換,最後再把圖片進行高斯模糊 執行結果: 圖左:原圖、圖中:頻譜圖、圖右上:濾波後圖、圖右:高斯模糊後圖

s1081423 作業4

圖片
  一、作業說明 附件中的 image4 似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像 ( 將圖中雜 訊去除 ) 。 二、程式功能 (1) 輸出原圖          (2) 輸出頻譜圖,透過點選欲去除雜訊之位置生成 notch mask (3) 列印出 notch mask 圖片 (4) 列印去除雜訊之圖像     ( 左上 ) 原圖 ( 右上 ) 頻譜圖 ( 左下 ) notch mask ( 右下 ) 還原圖像 三、開發環境     Windows 10     Visual Studio 2022     OpenCV 4.7.0   四、實作討論 (1) 以灰階模式讀取影像並顯示,經過傅立葉轉換後顯示頻譜圖片 ( 作法同 HW3) ,並且提供點選雜訊位置,點選完畢後按下任意按鍵,將座標儲存在 notch_pos_arr 陣列中。 注意 : 只需點選圖像上半部,下半部之對稱點會自動加入 ( 左 ) 原圖   ( 中 ) 頻譜圖   ( 右 ) 點選之座標點 (2) 製作 notch mask 並顯示 根據剛剛點選的座標繪製出 notch mask ,其中 synthesizeFilterH() 為繪製出下半對稱點之函式。 ( 上圖 )notch mask (3) 將 notch mask 與原圖進行 filtering( 函式 filter2DFreq()) filter2DFreq() 中執行步驟為 :     a. 以原圖大小製作出雙通道儲存實數與複數的圖像 complexI ,並經過 dft()     b. 同理將 norch mask 製作成複數通道的 complexH 。 注意 : 由於先前 notch mask 是在經過象限轉換之圖像上所進行,故此處使用 notch mask 之前有先進行象限轉換來還原。     c. 將 complexI 與 complexH 進行點積計算,獲得 complexIH     d. 透過 idft() 還原圖像,並轉為 CV_8U 格式以供顯示 (4) 處理剩餘雜訊,獲得最後輸出圖 先進行高斯模糊,再經過銳化來過濾雜訊 ( 上圖 ) 經 notc

s1091447 作業4

圖片
作業說明 : 附件中的 image4 似乎受到某種頻域雜訊干擾,撰寫一個程式嘗試復原此圖像 ( 將圖中雜訊去除 ) 。 開發環境:      Windows 11+ Visual Studio 2022 + OpenCV 4.7.0 程式碼說明 : (a)    去除雜訊 先利用作業 3 取得頻譜圖,利用小畫家塗黑要去除的地方,得到下列圖片,然後利用 np.where() ,二值化此圖片, 從而實現頻譜遮罩的效果 。 spectrum.png 再來讀取 image4.png ,使用二維快速傅立葉轉換,將其轉換為頻譜圖,之後將傅立葉變換後得到的頻譜圖做移位操作,將頻譜圖的原點移至圖像中心,以方便後續的頻率域操作。 將頻譜圖與遮罩進行相乘,從而實現濾波器的效果,之後就和作業 3 一樣逆傅立葉轉換回去得到去除雜訊的圖片。 (a)    銳化圖片 cv2.convertScaleAbs() ,將處理過的圖像轉換為 8 位無符號整數型別,以便於後續的銳化處理。 np.array([[-1,-1,-1],[-1,9,-1],[-1,-1,-1]]) ,定義一個 3x3 的卷積核,用於圖像銳化。 cv2.filter2D(filtered_img_uint8, -1, kernel) :對圖像進行卷積運算,以實現銳化的效果。運算時使用的卷積核由上述步驟中定義。 -1 參數表示輸出圖像數據類型與輸入圖像相同。