1. 程式人生 > >數字影象去噪典型演算法及MATLAB實現

數字影象去噪典型演算法及MATLAB實現

影象去噪是數字影象處理中的重要環節和步驟。去噪效果的好壞直接影響到後續的影象處理工作如影象分割、邊緣檢測等。影象訊號在產生、傳輸過程中都可能受到噪聲的汙染,一般數字影象系統中的常見噪聲主要有:高斯噪聲(主要由阻性元器件內部產生)、椒鹽噪聲(只要是影象切割引起的黑影象上的白點噪聲或者光電轉換過程中產生的泊松噪聲)等;

目前比較經典的影象去噪演算法主要有以下三種:

均值濾波演算法:也稱線性濾波,只要思想為領域平均法,急用幾個畫素灰度的平均值來代替每個畫素的灰度。有效抑制加性噪聲,但容易引起影象模糊,可以對其進行改進,只要避開對景物邊緣的平滑處理。

中值濾波:基於排序統計理論的一種能有效抑制噪聲的非線性平滑濾波訊號處理技術。中值濾波的特點即是首先確定一個以某個畫素為中心點的鄰域,一般為方形鄰域,也可以為圓形、十字形等等,然後

將鄰域中各畫素的灰度值排序,取其中間值作為中心畫素灰度的新值,這裡領域被稱為視窗,當視窗移動時,利用中值濾波可以對影象進行平滑處理。

Wiener維納濾波:使原始影象和其恢復影象之間的均方誤差最小的復原方法,是一種自適應濾波器,根據區域性方差來調整濾波器效果。對於去除高斯噪聲效果明顯。

實驗一:均值濾波對高斯噪聲的效果

fspecial用法

功能:fspecial函式用於建立預定義的濾波運算元,其格式為:

h=fspecial(type);     h=fspecial(type,parameters)

引數type制定運算元型別,parameters指定相應的引數,具體格式為:

type=‘average’,為均值濾波,引數為n,代表模板尺寸,用向量,預設值為【3,3】。

type=‘gaussian’,為高斯低通濾波器,引數有兩個,n表示模板尺寸,預設值為【3,3】,sigma表示濾波器的標準差,預設值為0.5。

type=‘laplacian’,為拉普拉斯運算元,引數alpha,用於控制拉普拉斯運算元的形狀,取值範圍【0,1】,預設值為0.2。

type=‘log’,為拉普拉斯高斯運算元,引數有兩個,n表示模板尺寸,預設值為【3,3】,sigma表示濾波器的標準差,預設值為0.5。

type=‘prewitt’,為prewitt運算元,用於邊緣增強,無引數。

type=‘sobel’,為著名的sobel運算元,用於邊緣提取,無引數。

type=‘unsharp’,為對比度增強濾波器,引數alpha用於控制濾波器的形狀,範圍為【0,1】,預設值為0.2。

實驗二:二維自適應維納濾波對高斯噪聲的濾除效果

維納濾波的兩個函式wiener2deconvwnr都能夠完成維納濾波的功能,deconvwnr強調圖象復原方面,wiener2強調圖象空間域銳化的作用,其中J=wiener2(I,[m,n])返回有噪聲影象I經過wierner(維納)濾波後的影象,[m,n]指定濾波器視窗大小為m*n,預設值為3*3J=wiener2(I,[m,n],noise)指定噪聲的功率,[J,noise]=wiener2(I,[m,n])在影象濾波的同時,返回噪聲功率的估計值noiseimnoise的語法格式為
    J = imnoise(I,type)
    J = imnoise(I,type,parameters)
其中J = imnoise(I,type)返回對原始影象I新增典型噪聲的有噪影象J
引數typeparameters用於確定噪聲的型別和相應的引數。

實驗三:對加入椒鹽噪聲的影象分別作均值、中值和維納濾波

MATLAB中提供了卷積運算的函式命令conv2,其語法格式為:
    C = conv2(A,B)
C = conv2(A,B)
返回矩陣AB的二維卷積C。若Ama×na的矩陣,Bmb×nb的矩陣,則C的大小為(ma+mb+1)×(na+nb+1)
MATLAB影象處理工具箱提供了基於卷積的圖象濾波函式filter2filter2的語法格式為:
    Y = filter2(h,X)
其中Y = filter2(h,X)返回影象X經運算元h濾波後的結果,預設返回影象Y與輸入影象X大小相同。例如:
其實filter2conv2是等價的。MATLAB在計算filter2時先將卷積核旋轉180度,再呼叫conv2函式進行計算。
Fspecial函式用於建立預定義的濾波運算元,其語法格式為:
    h = fspecial(type)
    h = fspecial(type,parameters)
引數type制定運算元型別,parameters指定相應的引數,具體格式看上面。

執行效果:通過執行可以得出結論,即中值濾波對於去除椒鹽噪聲效果最好,而維納濾波去除效果則較差。中值濾波對於去除椒鹽噪聲效果明顯,是因為椒鹽噪聲只在畫面上的部分點隨機出現,而中值濾波根據資料排序,將未被汙染的點代替噪聲點的值的概率較大,所以抑制效果好。對點、線和尖頂較多的影象不宜採用中值濾波,因為一些細節點可能被當成噪聲點。

實驗四:分別使用二維統計濾波對椒鹽噪聲和高斯噪聲進行濾波
MATLAB小波分析工具箱提供的用於影象去噪的函式有wrcoef2wpdencmp,其語法格式分別為:    X=wrcoef2(type,C,S,’wname’)    [xd,treed,datad,perf0,perfl2]=wpdencmp(x,sorh,N,’wname’,crit,par,keepapp)其中,X=wrcoef2(type,C,S,’wname’)返回基於小波分解結構[C,S]的小波重構影象X。引數“type”等於a表示重構近似係數;等於h表示重構水平細節係數;等於v表示重構垂直細節係數,等於d表示重構對角細節係數。[xd,treed,datad,perf0,perfl2]=wpdencmp(x,sorh,N,’wname’,crit,par,keepapp)是通過小波包定限(閾值化),返回輸入訊號或影象X的除噪結果xd。輸入引數中,[treed,datad]為xd的最佳小波包分解結構;perfl2perf0表示L^2復原和壓縮百分數;perf12=100*(xd的小波包係數向量範數/X的小波包係數向量範數) ^2Keepapp=1表示近似係數不能閾值化,否則可以閾值化;sorh=’s’為軟閾值化,h為硬閾值化。