慕 陽
(南昌理工學院,江西 南昌 330044)
計算機科學和圖像處理技術在快速發展中,尤其最近幾年,隨著計算機算力的提高,眾多圖像處理相關的算法能夠不斷運用到實際中,圖像在醫學成像、模式識別等各個領域取得了相當廣泛的應用,隨著最近幾年神經網絡的興起,圖像技術的應用更是百花齊放、爭奇斗艷。然而,圖像數據在各個階段都有可能發生改變,改變圖像原有的像素數據,這樣會使得圖像喪失原有的視覺效果,帶來更多的干擾,造成不好的視覺感受。尤其是圖像的一些細節信息,比如物體的邊緣紋理等高頻信息。根據圖像產生噪聲的原因,可以將圖像的噪聲信息劃分為不同的種類。針對不同種類的噪聲,需要采取不同的降噪方案,采取最適合的方案就夠取得較好的處理效果。總之,需要對圖片進行一系列的操作從而降低圖像中的干擾信息,以便能夠將經過降噪處理的圖片作為其他步驟的原始圖片,以實現更好的數據分析、處理和利用。圖像降噪要考慮的問題就是如何在盡可能減少圖像中噪聲對圖像造成的干擾的同時,盡可能保留圖像的原始特征,如紋理信息、邊緣細節信息、形狀信息以及拓撲結構等。
均值濾波是最常用和最基礎的先行濾波算法,它的算法思想很簡潔,但可以從簡潔中擴展出更多更復雜的改進算法,用來針對不同類型的噪聲,獲得更好的去噪效果。均值濾波的大致思想如下:針對某一特定位置像素,規定一個半徑范圍,對范圍內的像素計算平均值后得到一個數值,用來替換當前的中心像素值,對整體圖像的每個像素值都進行上述計算[1]。一般基于圖片數據的局部性原理考慮,經常采取比較小的半徑來盡量控制數據間的相似性,增加使用平均值替換中心元素的合理性,又為了計算方便,常選擇半徑為1 或2 的方形范圍。
傳統的中值濾波由最簡單的均值濾波算法改進而來。兩種算法的基本思想和實現步驟大致相同[2]。相較于均值濾波而言,中值濾波的改進在于計算的并不是半徑范圍內的均值,而是使用范圍內的中值作為替換中心像素的值,取到的像素中值一定屬于原本的圖像,相比于均值濾波有更大的合理性。用數學語言表示如下:用f(x,y),g(x,y)分別表示原始圖像和處理后的圖像,W為二維模板,即選取的范圍,與上述均值濾波中介紹的類似,通常采用半徑為1 或2 的方形范圍,即3×3 或5×5 的方形范圍,最終的輸出結果就是g(x,y)=med{f(x-k,y-l)},k,l∈W。其中W的形狀還可以選作線狀、圓形或其他各種形狀,但處理效果可能不佳,一般還是使用方形,還可以方便計算,簡化算法。簡單的中值濾波仍然存在許多缺點,在噪聲密度很大的情況下(基于日常經驗,噪聲密度很大的標準大概是噪聲出現的概率大于20%),在取到的范圍內噪聲數值過多,通過計算范圍得到的中值也依然有很大概率是噪點像素值,這時處理的效果就會大打折扣[3]。此時可以在中值濾波的基礎上進行進一步改進。
對圖像進行邊緣檢測研究的過程中,有研究人員提出一個優秀的圖像邊緣提取算法應該滿足兩個標準。一是能夠有效地抑制圖像噪聲,因為圖像噪聲和圖像細節、紋理、圖像邊緣信息在圖像信息中都屬于高頻信息,如果直接單純地對圖像的高頻信息進行提取,勢必會將噪聲也當作圖像的邊緣信息,造成不太理想的邊緣檢測效果[4]。因此,在對圖像進行基于頻率域的高頻信息提取操作之前,應該先對圖像進行一定程度的降噪。二是圖像邊緣提取算法應該盡可能精確地確定邊緣的位置,畢竟算法的最終目的是提取圖像邊緣,一定要使提取出的邊緣數據與原圖像數據的偏差盡可能地小。依據上述兩個基本標準,得到的最優化逼近算子就是Canny 邊緣檢測算法。還有很多與之類似的其他算法步驟也與之類似,都是先對圖像采用某些降噪手段,對圖像進行平滑處理以減少圖像噪聲信息,再對圖像進行求導數。Canny 算法的具體步驟如下:首先,用高斯濾波器平滑圖像,其次,用一階偏導的有限差分來計算梯度的幅值進行非極大值抑制,最后,用雙閾值算法檢測和連接邊緣[5]。
整體嵌套邊緣檢測(Holistically-Nested Edge Detection,HED)網絡模型是在VGG16 網絡結構的基礎上設計而來[6]。HED 網絡是一種多尺度多融合的網絡結構。多尺度的直觀解釋就是對圖像在多個不同維度進行處理,每一個維度都可以得到一副處理后的圖像,直觀表現為把VGG16 網絡的每一組的最后一個卷積層的輸出取出來作為一個階段處理結果供最后的圖像使用[7]。每一層都可以看作圖像經過一定處理后的處理結果。不過因為每一組得到的圖像的長寬尺寸不同,所以還需對每一部分的輸出圖像進行進一步處理,這里采用轉置卷積/反卷積對每一組得到的圖像再做一遍處理。通俗地說就是把神經網絡在每一組的輸出圖像做尺寸放大處理,讓每一組輸出圖片擴大為原來的2n-1 倍,即第一部分不變,第二部分輸出圖像擴大為原來的2 倍,第三部分擴大為原來的4 倍,以此類推。這樣在每個尺度(VGG16 的每一組就是一個尺度)上得到的圖像都是相同的大小,方便后續進一步處理。
本文中改進的自適應中值濾波算法與改進前的自適應中值濾波算法類似,在思想上大致分為兩個階段。第一個階段是先對圖片進行噪聲檢測,確定濾波范圍中心點的像素是否可以看作圖像噪聲。第二階段,根據第一階段的判斷結論對中心點像素進行進一步的處理。如果判斷結果為濾波中心像素屬于原始圖像像素,即中心像素是圖像的原始像素數據,那么就可以不用替代當前的中心像素。如果中心點是圖像噪聲,還要看濾波范圍內的中值是否還是噪聲,如果不是,可以直接使用中值進行替換,如果還是可以看作噪聲,可以按照自適應中值濾波算法,擴大濾波半徑,然后繼續以上步驟,觀察范圍內中值是否屬于圖像噪聲。但是若圖像噪聲分布較多,一直擴大濾波半徑再重復上述算法依然不能用中值替代原始像素,這時可以使用除了噪聲點外的其他像素的均值作為替代。當濾波半徑范圍擴大一定程度之后中值像素依然是噪聲,說明圖像的噪聲含量巨大,就不再尋找濾波范圍內的中值,轉而計算濾波范圍內除了噪聲像素點之外的其他像素的均值,用它來替代中心像素。改進的自適應中值濾波算法的具體步驟如下。
Wij為正被處理的、中心在(i,j)處的濾波窗口,W0為默認的初始窗口大小,Wmax為允許的最大窗口大小。fij為(i,j)處的灰度值,fmin為Wij中的極小灰度值,fmax為Wij中的極大灰度值,fmed為Wij中的灰度中值。
步驟1:如果fmin<fij<fmax,輸出fij,否則轉到步驟2。
步驟2:如果fmin<fmed<fmax,輸出fmed,否則轉到步驟3。
步驟3:如果Wij+2 ≤Wmax,增大窗口,Wij=Wij+2,轉到步驟1,否則轉到步驟4。
步驟4:輸出最大窗口中除了所有到極小灰度像素和極大灰度像素之外的灰度均值favg(k為極值灰度像素的數量)fmin<f(x,y) 相較于標準的自適應中值濾波算法,該算法克服了兩個違背數據局部性原理的缺點。 第一,自適應中值濾波算法是先判斷中值像素再判斷中心像素是否為噪聲,若中值像素是噪聲,會直接擴大濾波范圍,就會出現當中心像素屬于原始圖像數據而中值像素是噪聲情況下會直接擴大濾波范圍,之后再用更大濾波范圍內的中值來替代原本合理的中心像素,顯然這種做法違背了數據相關性,濾波范圍越大,數據間的相關性就越低,這時取得的中值像素一定不如非噪聲的原始中心像素合理[8]。 第二,如果圖像的噪聲比例非常多,濾波范圍內找到的中值可能一直都是噪聲,這時就需要不斷擴大濾波范圍。濾波范圍越大,像素間的相關性越低,直接替代中心像素的合理性越低,會造成圖像的細節邊緣信息被模糊[9]。況且,在噪聲含量很多的情況下,可能一直擴大到規定的最大濾波半徑發現中值依然是噪聲,這時直接使用中值來替代中心像素顯然不合理。而改進算法可以在濾波范圍擴大一次之后若沒有找到合理的可替換中值像素,就直接用非噪聲像素均值來替換,盡可能地保持了像素數據間的相關性,在非極端情況下并不會將噪聲作為替換中心像素的數據,算法有了更多的合理性。 Canny 算法過程中需要確定幾個參數,人為地確定不同的參數使之能夠盡可能獲得逼近理想效果的處理結果[10]。而且在實際使用過程中,經常會在原有算法基礎上做進一步的基于實際使用場景的優化,這時勢必會引入更多的參數,參數的增多將導致難以確定固定的數值使算法達到較好的效果,只能通過多次嘗試不同參數值觀察處理效果,最后選擇一個較好結果。但隨著參數個數的增多,各種參數間的組合種類越多,使得人為工作量大大增加。這些參數的手動設置同樣會大大降低算法的健壯性,很難在不同的場景下使用相同的參數值取得較好的效果,邊緣檢測效果會大打折扣。 對圖像的邊緣進行數學建模難度很大,代碼實現難度較大,且得到的算法的健壯性較低,取得的檢測效果不夠理想。可考慮采用基于神經網絡的邊緣提取技術,采用神經網絡結構,包括卷積層、池化層、全連接層及softmax 層,下面依次介紹每個結構的作用和原理。 池化層中可以采用多種不同但類似的方法,比如最大池化、均值池化、中值池化等[11]。采取不同的算法,最后的輸出結果也不盡相同。每個算法的側重點和想要提取的圖像特征不同,一般采用最大池化的較多。池化層在對圖像數據進行特征提取的同時,也對圖像數據進行了壓縮,只保留圖像的關鍵特征信息,舍去一些可能相比較沒那么重要的特征,通過多層池化可以大大壓縮圖像數據,使得每個卷積層的學習成本大大降低,提高整體算法的運行效率。保留圖像的主要特征,還可以防止預測結果的過擬合,使得整個算法的主要精力放在相對比較重要的特征上面。而且,使用池化層而不是卷積來降低圖像尺寸的好處是池化層不需要保留參數,直接使用某個固定函數對圖像進行像素運算,可以大大減少網絡的參數量,大大降低網絡的訓練成本。 全連接層的核心操作就是矩陣向量乘積y=Wx,經過W的處理,實際上就是將一個特征空間映射到另一個特征空間的過程。而W就是這個變化過程的中間步驟,起到的就是空間映射的作用。從另一種角度也可以說目標向量y是原始向量x的關于W加權和。在日常的使用過程中,全連接層一般放在網絡的最后幾層,用來對前面經過處理后的特征做進一步的整合,整合處理后特征之間的關聯性,盡可能地發現特征間的規律,對特征加權計算之后輸出作為輸出圖像。與卷積層相比,卷積層相當于對圖像特征做一些弱化和抽離,將圖像特征打散,而全連接層是將打散并提取學習強化后的特征做一個整合,是一種特征強化的方法。強化整合后的特征集合可以作為一個圖片的特征表達[12]。 本文主要討論了針對椒鹽噪聲的圖像降噪算法的設計,討論了本算法與傳統的中值濾波算法的區別和優勢,總結了算法在傳統算法上做出的改進,基于神經網絡的圖像邊緣提取算法的網絡結構和實現細節及原理。使用改進的自適應中值濾波算法和基于神經網絡提取邊緣算法結合的方式相較于傳統的自適應中值濾波有明顯的改進,在一些指標上和直觀的視覺體驗上都有明顯的優勢。改進的自適應中值濾波算法與傳統的自適應中值濾波算法相比效率有了更大的提升,最后的降噪結果也有明顯的提升,遵循了數據的局部性原則,盡可能地保留了圖像的邊緣細節信息。所述降噪算法的優化對圖像數據的處理與優化起到了促進性的作用。3.2 基于神經網絡的圖像邊緣提取算法設計
4 結語