影像雜訊去除 — 中央加權中值法(Center Weighted Median)
與中值濾波器(Median filter)類似,但透過加權運算讓去除雜訊的結果可以保有原始影像的「紋理(Texture)」特徵。
前言
之前文章提到過「平滑法(Smoothing method)」與「中值濾波器(Median filter)」,皆可去除影像中的雜訊。而這次要介紹的「中央加權中值法(Center Weighted Median)」算是 Median filter 的改良版,Median filter 雖然對唐突的點狀雜訊非常有效,但對於原始影像中的線性紋理(Texture)容易造成破壞。
為了直觀理解兩者之間的差異,接下來一樣用個 3 * 3 的影像作為例子。
中央加權中值法(Center Weighted Median)運算方式
這個範例與之前不太一樣,是個斜線紋理的影像:
為了方便比較,這邊並列顯示中值濾波器與中央加權中值法的運算結果:
中值濾波器的作法會將這 9 像素先做排列:
2, 3, 3, 4, 「5」, 6, 208, 208, 208
接著用中間的 5 直接取代原本的 208,這時如果是紋理的特徵就會造成斷裂的效果。
而中央加權中值法會需要先設定一個權重 W(Weight),然後在運算過程會將原本位在 Mask 中間的數值複製 W 次再進行排列。
如果一開始的 W 設成 5,那排序後的數列會是這樣:
2, 3, 3, 4, 5, 6, 「208」, 208, 208, 208, 208, 208, 208
這時中值就會是原本中央像素的值,那線性紋理就可被保留下來。
這邊設定 W 時有個技巧,因為原本中央的像素加上其他也是線性紋理的像素一定要大於其餘像素,才會讓紋理保留下來,寫成比較數學的公式是這樣:
W + 紋理像素 > 其餘像素(全部像素 - 紋理像素)
如果 Mask 大小是 3 * 3,那算法就是 W + 2 > ( 9 - 3 ),所以 W 只要 > 4,就能讓紋理保留。
如果 Mask 大小是 5 * 5,那就是 W + 4 > ( 25 - 5 ),所以 W 只要大於 16,就可以確保紋理不被破壞。
接下來透過實際圖片來呈現視覺上的差異。
中央加權中值法(Center Weighted Median)實作
這次的範例我故意選擇有線性紋理的影像:
不同於平滑法、中值濾波器,中央加權中值法並沒有現成的 function 可以使用,因此這邊我自己寫了一個捲積的 function 來完成加權、替換像素等動作,並將其結果與平滑法、中值濾波器一起比較:
結論
透過上方的比較圖,可以直觀地看見三種去雜訊方法之間的差異。若有線性紋理的影像,使用平滑法的效果最差;中值法雖然也能將雜訊去除,但整體相較之下,失真的程度更嚴重;中央加權中值法效果則是最好的。
每種算法都有它的特性,若能理解這些算法背後的原理,就有可能在不同的問題裏頭,更精準地使用不同種類的工具。
Source code: