圖像處理筆記(十一):噪聲模型


本節筆記致力於討論什么樣的噪聲用什么樣的方法來降噪,及找出每種噪聲的特點以識別噪聲

  1. 高斯噪聲:概率密度函數(PDF)符合正態分布
  2. 瑞利噪聲
  3. 伽馬噪聲
  4. 指數噪聲
  5. 均勻噪聲
  6. 椒鹽噪聲
  7. 周期噪聲:圖像獲取過程中由於電力或機電干擾產生,通過頻率域濾波處理,使用帶阻濾波器消除

前五種噪聲用肉眼很難區分,需要結合灰度直方圖看與哪一種噪聲的概率密度函數圖像更相似來區分。

在研究高斯噪聲的時候嘗試了一下自己消除噪聲,下面是代碼:

dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
read_image(GaussianImage1, 'Fig0504(a)(gaussian-noise)')
get_image_size(GaussianImage1, Width, Height)
* 生成一個高斯濾波器,注意這里的傳出值的類型是Image,即f是一個Image類型
* 這里第二三個參數越大,過濾的越厲害,最終獲得的圖像越模糊
gen_gauss_filter(f, 3, 3, 0, 'none', 'dc_edge', Width, Height)
fft_generic(GaussianImage1, ImageFFT1, 'to_freq', -1, 'none', 'dc_edge', 'complex')
convol_fft(ImageFFT1, f, ImageConvol)
fft_generic(ImageConvol, ImageFFT2, 'from_freq', -1, 'none', 'dc_edge', 'real')
convert_image_type(ImageFFT2, ImageConverted, 'int8')

這里面將圖像做了傅里葉變換以轉換成頻譜圖,在頻率域上使用了一個高斯濾波器進行過濾后再轉換成圖片。
轉換的過程發現一個現象,濾波后的圖像的灰度值非常非常高,本來是byte類型的像素,現在的像素必須要用Int8來存儲。
按照我已學的內容,很多東西都是在灰度域上做變換的,要在灰度域上做變換,像素需要是byte類型的,這時候我們就需要把很高的灰度轉換到0-255之間。
這個轉換我在網上搜了很久都沒有搜到相關的算子,只是有人說要除以2的n次方,根據這個線索,我找了算子scale_image,竟然在這個算子的幫助文檔上發現了轉換的方法,真的是太感動了。
這個故事告訴我們,halcon的官方文檔一定要好好看啊。下面上代碼:

gen_rectangle1(Rectangle, 0, 0, Width, Height)
* 獲取最大最小灰度,第一個參數是一個Region,按照文檔中建議要使用draw_region,發現不好用,可能是非常耗時,要很久很久程序還在運行
* 所以我就直接創建了一個矩形的Region,和圖像等寬高
min_max_gray(Rectangle, ImageConverted, 0, Min, Max, Range)
m := 255 / (Max - Min)
a := - m * Min
* 曾經我以為這只是一個線性變換的算子,原來還有這么好用的功能,這一步做完之后,圖像的灰度就在0-255之間了
scale_image(ImageConverted, ImageScaled, m, a)
* 把圖像類型轉換為byte,圖像就具有能操作的像素類型和灰度值了
convert_image_type(ImageScaled, ImageConverted1, 'byte')

話說我為什么想要用灰度值呢,因為做完高斯濾波之后的圖像變得很模糊,我想要把圖像變清晰一些。
這里我沒有用直接提供的高斯濾波算子,其實我也試了一下,發現自己這樣寫過濾出的效果比較好,噪聲基本上不見了,雖然圖像模糊了些,肯定還有辦法的嘛。
上對比圖:

處理高斯噪聲一般使用均值濾波器,感覺直接用mean_image的效果也沒有我上面那么做好。

有的噪聲在做處理時,應當要提前知道是被具有什么樣的特征的噪聲污染了,才更好處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM