1. 程式人生 > >影象處理之影象去噪

影象處理之影象去噪

假設影象退化過程被建模為一個退化函式和一個加性噪聲項,對輸入影象f(x,y)進行處理,產生退化後的影象g(x,y)。給定g(x,y)和退化函式H以及關於加性噪聲項\eta (x,y)的一些知識,影象復原的目的就是獲得原始影象的一個估計\hat{f}(x,y)

空間域的退化影象

g(x,y) = h(x,y)\bigstar f(x,y)+\eta(x,y)

其中h(x,y)是退化函式的空間表示,\bigstar表示卷積。

等價的頻率域表示為:

G(u,v) = H(u,v)F(u,v)+N(u,v)

下圖是影象退化/復原過程的模型:

噪聲概率密度函式

考慮加性噪聲\eta (x,y),我們關心的是這個噪聲分量中灰度值的統計特性,用概率密度函式(PDF)表徵。下面是一些重要的噪聲概率密度函式影象及說明:

高斯噪聲

\large p(z) = \frac{1}{\sqrt{2\pi}\sigma }e^{-(z-\bar{z})^{2}/2\sigma^{2}}

其中,z表示灰度值,\large \bar{z}表示z的平均值,\large \sigma表示z的標準差(\large \sigma ^{2}為方差),其值約有70%落在範圍\large [(\bar{z}-\sigma),(\bar{z}+\sigma)]

,約有95%落在範圍\large [(\bar{z}-2\sigma),(\bar{z}+2\sigma)]

瑞利噪聲

\large p(z) = \begin{cases} \frac{2}{b}(z-a)e^{-(z-a)^{2}/b}, & z\geqslant a \\ 0, & z<a \end{cases}

其中,概率密度的均值和方差為:

\large \bar{z} = a+\sqrt{\pi b/4}

\large \sigma^{2} = \frac{b(4-\pi)}{4}

愛爾蘭(伽馬)噪聲

\large p(z) = \begin{cases} \frac{a^{b}z^{b-1}}{(b-1)!}e^{-az}, & z\geqslant a \\ 0, & z<a \end{cases}

其中,a>0,b為正整數,概率密度均值和方差為:

\large \bar{z} = \frac{b}{a}

\large \sigma^{2} = \frac{b}{a^{2}}

指數噪聲

\large p(z) = \begin{cases} ae^{-az}, & z\geqslant 0 \\ 0, & z<0 \end{cases}

其中a>0,概率密度均值和方差為:

\large \bar{z} = \frac{1}{a}

\large \sigma^{2} = \frac{1}{a^{2}}

它是當b=1時愛爾蘭PDF的特殊情況。

均勻噪聲

\large p(z) = \begin{cases} \frac{1}{b-a}, & a\leqslant z\leqslant b \\ 0, & other \end{cases}

其中,概率密度的均值和方差為:

\large \bar{z} = \frac{a+b}{2}

\large \sigma^{2} = \frac{(b-a)^{2}}{12}

脈衝噪聲(椒鹽噪聲,胡椒(黑)+鹽粉(白)):

\large p(z) = \begin{cases} P_{a}, & z=a \\ P_{b}, & z=b \\ 1-P_{a}-P_{b}, & other \end{cases}

如果b>a,則灰度級b在影象中顯示為一個亮點,灰度級a顯示為暗點。若\large P_{a}\large P_{b}為0,則脈衝噪聲為單極脈衝,若均不為0,則稱為雙極脈衝(也叫椒鹽噪聲,散粒噪聲,尖峰噪聲)。

高斯噪聲源於如電子電路噪聲、低照明度或高溫帶來的感測器噪聲;指數密度和伽馬密度在鐳射成像中有用;脈衝噪聲在快速過渡的情況下產生。

原影象:

新增不同噪聲後的影象:

噪聲引數的估計

通常由合理的恆定灰度值的一小部分來估計PDF的引數。

下圖的直方圖使用左上角的小條帶的影象資料計算的,這些小條帶分別來自上圖的高斯、瑞利和均勻噪聲影象。

可以用來自影象條帶的資料計算灰度級的均值和方差。令p_{s}(z_{i}),i=0,1,2,...,L-1表示條帶S中畫素灰度的概率估計,則S的均值和方差如下:

\bar{z} = \sum_{i=0}^{L-1}z_{i}p_{s}(z_{i})

\sigma^{2} = \sum_{i=0}^{L-1}(z_{i}-\bar{z})^{2}p_{s}(z_{i})

觀察直方圖的形狀可確定最接近的PDF匹配。如果形狀近似於高斯,那麼均值和方差就是我們所需要確定引數;如果是其他形狀,那麼我們可以用均值和方差求出引數a和b。對於脈衝噪聲,我們要估計的是黑白像素髮生的實際概率,這需要一個相對恆定的中等灰度區域來計算直方圖,圖中黑白畫素尖峰的高度就是脈衝噪聲中P_{a},P_{b}

的估計值。

空間域去噪(僅存在噪聲退化)

當一幅影象中唯一存在的退化是噪聲時,根據前面的定義,退化影象相應地變為:

g(z,y) = f(x,y)+\eta(x,y)

G(u,v) = F(u,v)+N(u,v)

均值濾波器

算術均值濾波器

\hat{f}(x,y) = \frac{1}{mn}\sum_{(s,t)\in S_{xy}}g(s,t)

其中,g(x,y)是退化影象,\hat{f}(x,y)是得到的復原影象,S_{xy}表示中心在點(x,y)處、大小為m*n的矩形領域的一組座標。

幾何均值濾波器

\hat{f}(x,y) = \left [ \prod _{(s,t)\in S_{xy}}g(s,t) \right ]^{\frac{1}{mn}}

這種處理比幾何均值濾波器丟失的細節更少。

算術均值濾波器和幾何均值濾波器適合處理高斯或均勻隨機噪聲。

諧波均值濾波器:

\hat{f}(x,y) = \frac{mn}{\sum_{(s,t)\in S_{xy}}\frac{1}{g(s,t)}}

它對於鹽粒噪聲效果較好,不適用於胡椒噪聲。

逆諧波均值濾波器

\hat{f}(x,y) = \frac{\sum_{(s,t)\in S_{xy}}g(s,t)^{Q+1}}{\sum_{(s,t)\in S_{xy}}g(s,t)^{Q}} Q稱為濾波器的階數。當Q為正時,消除胡椒噪聲;Q為負時,消除鹽粒噪聲;當Q=0時,逆諧波均值濾波器簡化為算術均值濾波器;當Q=-1時,則為諧波均值濾波器。它有一個缺點,必須知道噪聲是暗噪聲還是亮噪聲,以便確定Q的正負。

統計排序濾波器

中值濾波器

\hat{f}(x,y) = \underset{(s,t)\in S_{xy}}{median}\{g(s,t)\}

它對脈衝噪聲很有效。

最大值和最小值濾波器

\hat{f}(x,y) = \underset{(s,t)\in S_{xy}}{max}\{g(s,t)\}

\hat{f}(x,y) = \underset{(s,t)\in S_{xy}}{min}\{g(s,t)\}

最大值濾波器對發現影象中最亮點很有效,最小值濾波器對發現影象中最暗點很有效。

中點濾波器

\hat{f}(x,y) = \frac{1}{2} \left[\underset{(s,t)\in S_{xy}}{max}\{g(s,t)\}+\underset{(s,t)\in S_{xy}}{min}\{g(s,t)\}\right]

它對隨機分佈的噪聲有效,如高斯噪聲、均勻噪聲。

修正的阿爾法均值濾波器

假設在鄰域S_{xy}內去掉g(s,t)最低灰度值的d/2個畫素和最高灰度值的d/2個畫素,令g_{r}(s,t)代表剩下的mn-d個畫素,由這些剩餘畫素的平均值形成的濾波器稱為修正的阿爾法均值濾波器:

\hat{f}(x,y) = \frac{1}{mn-d}\sum_{(s,t)\in S_{xy}}g_{r}(s,t)

d的取值範圍可為0到mn-1。當d=0時,它變為算術均值濾波器;當d = mn-1時,它變為中值濾波器;當d取其他值時,它在包括多種噪聲的情況下很有用,如高斯噪聲和椒鹽噪聲的混合。

自適應濾波器

自適應區域性降低噪聲濾波器在區域性區域S_{xy}中心任意一點(x,y)上的響應基於以下4個量:

  • g(x,y),帶噪影象在(x,y)上的值;
  • \sigma _{\eta}^{2},汙染f(x,y)形成g(x,y)的噪聲方差;
  • m_{L}S_{xy}中畫素的均值;
  • \sigma _{L}^{2}S_{xy}中畫素的區域性方差。

我們希望的濾波器效能如下:

  1. 如果\sigma _{\eta}^{2} = 0,則濾波器應該簡單的返回g(x,y)的值;
  2. 如果區域性方差\sigma _{L}^{2}\sigma _{\eta}^{2}是高度相關的,則濾波器返回g(x,y)的一個近似值。典型的,高區域性方差與邊緣相關,應該保護這些邊緣;
  3. 如果兩個方差相等,希望返回S_{xy}中畫素的算術平均。這種情況發生在區域性區域與整個影象有相同特性的條件下,區域性區域的噪聲將通過求平均降低。

根據這些假設,得到如下表達式:

\hat{f}(x,y) = g(x,y) - \frac{\sigma_{\eta}^{2}}{\sigma_{L}^{2}}(g(x,y)-m_{L})

需要知道或估計的量是全部噪聲的方差\sigma _{\eta}^{2},其他引數通過S_{xy}計算。這裡隱含的假設條件是\sigma _{\eta}^{2}\leqslant \sigma _{L}^{2},實際中可能違反這個條件,當\sigma _{\eta}^{2} > \sigma _{L}^{2}時,可以把比率設為1。

自適應中值濾波器:如果脈衝噪聲空間密度不大,中值濾波器效能會很好(根據經驗,P_{a},P_{b}小於0.2).而自適應中值濾波器可以處理更大密度的脈衝噪聲,它在進行濾波處理時會根據某些條件改變(或增大)S_{xy}的尺寸。

記以下符號:

  • z_{min}S_{xy}中最小灰度值;
  • z_{max} = S_{xy}中最大灰度值;
  • z_{med}S_{xy}中灰度值的中值;
  • z_{xy} = 座標(x,y)處的灰度值;
  • S_{max}S_{xy}允許的最大尺寸。

自適應中值濾波器演算法以兩個過程工作:

程序A:

A_{1} = z_{med}-z_{min}A_{2} = z_{med}-z_{max}

如果A_{1}>0A_{2}<0,則轉到程序B

否則增大視窗尺寸

如果視窗尺寸\leqslant S_{max},則重複程序A

否則輸出z_{med}

程序B:

B_{1} = z_{xy} - z_{min}

B_{2} = z_{xy} - z_{max}

如果B_{1}>0B_{2}<0,則輸出z_{xy}

否則輸出z_{med}

該演算法主要有3個目的

  • 去除椒鹽(脈衝)噪聲;
  • 平滑其他非脈衝噪聲;
  • 減少如物體邊界細化或粗化等失真

程序A的主要目的是確定中值濾波器的輸出是否是一個脈衝。如果z_{min}<z_{med}<z_{max}有效,則z_{med}不是脈衝,轉到程序B,看z_{xy}是否是一個脈衝,若z_{min}<z_{xy}<z_{max}z_{xy}就不是脈衝,這種情況下, 演算法輸出不變的畫素值z_{xy}。通過不改變這些中間灰度級的點,減少影象中的失真。如果條件B_{1}>0B_{2}<0為假,則z_{xy} = z_{min}z_{xy} = z_{max}。這種情況下,畫素值都是一個極端值,演算法輸出中值z_{med},從程序A可知z_{med}不是脈衝。若程序A找到一個脈衝,z_{med} = z_{min}z_{med} = z_{max},演算法會增大視窗尺寸並重復程序A,直到找到一個非脈衝中值(並跳到程式B)或達到最大視窗值。如果達到最大視窗值,則返回z_{med}(不能保證不是一個脈衝)。

頻率域濾波消除週期噪聲

帶阻濾波器:主要應用之一是在頻率域噪聲分量的一般位置近似已知的應用中消除噪聲,一個典型的例子是一幅被加性週期噪聲汙染的影象。

帶通濾波器:與帶阻濾波器相反的操作。通常不會在一幅影象上直接執行帶通濾波,因為這樣會消除太多影象細節。

餡波濾波器:阻止或通過事先定義的中心頻率的鄰域內的頻率。

參考資料:岡薩雷斯《數字影象處理》