1. 程式人生 > >opencv--圖形模糊【2】

opencv--圖形模糊【2】

1、中值濾波

1.1、 定義

中值濾波對脈衝噪聲有良好的濾除作用,特別是在濾除噪聲的同時,能夠保護訊號的邊緣,使之不被模糊。這些優良特性是線性濾波方法所不具有的。此外,中值濾波的演算法比較簡單,也易於用硬體實現。所以,中值濾波方法一經提出後,便在數字訊號處理領得到重要的應用。

中值濾波方法:對一個數字訊號序列xj(-∞<j<∞)進行濾波處理時,首先要定義一個長度為奇數的L長視窗,L=2N+1,N為正整數。設在某一個時刻,視窗內的訊號樣本為x(i-N),…,x(i),…,x(i+N),其中x(i)為位於視窗中心的訊號樣本值。對這L個訊號樣本值按從小到大的順序排列後,其中值,在i處的樣值,便定義為中值濾波的輸出值。

在這裡插入圖片描述
中值濾波是在“最小絕對誤差”準則下的最優濾波。

在實際應用中,隨著所選用視窗長度的增加,濾波的計算量將會迅速增加。因此,尋求中值濾波的快速演算法,是中值濾波理論的一個重要研究內容。
中值濾波的快速演算法,一般採用下述三種方式:
①直方圖資料修正法;
②樣本值二進位制表示邏輯判斷法;
③數字和模擬的選擇網路法。

對中值濾波的理論研究,還集中於統計特性分析和根序列的描述方面。當一個訊號序列經一特定視窗長度的中值濾波反覆處理後,它會收斂於某一個不再變化的序列,這個序列稱為中值濾波的根序列。根序列是描述中值濾波特性的一個重要概念。通過對根序列結構的研究,可以確定原訊號序列中,哪些成分可以經中值濾波後保留下來,哪些成分將被抑制。這對確定中值濾波器的視窗長度,提供了重要依據。用VLSI實現的中值濾波器晶片,可供實時處理中應用。

1.2、 實現方法

中值濾波是基於排序統計理論的一種能有效抑制噪聲的非線性訊號處理技術,中值濾波的基本原理是把數字影象或數字序列中一點的值用該點的一個鄰域中各點值的中值代替,讓周圍的畫素值接近的真實值,從而消除孤立的噪聲點。方法是用某種結構的二維滑動模板,將板內畫素按照畫素值的大小進行排序,生成單調上升(或下降)的為二維資料序列。二維中值濾波輸出為g(x,y)=med{f(x-k,y-l),(k,l∈W)} ,其中,f(x,y),g(x,y)分別為原始影象和處理後圖像。W為二維模板,通常為33,55區域,也可以是不同的的形狀,如線狀,圓形,十字形,圓環形等。

  1. 通過從影象中的某個取樣視窗取出奇數個數據進行排序
  2. 用排序後的中值取代要處理的資料即可

1.3、 應用

中值濾波法對消除椒鹽噪聲非常有效,在光學測量條紋圖象的相位分析處理方法中有特殊作用,但在條紋中心分析方法中作用不大。

椒鹽噪聲


椒鹽噪聲也稱為脈衝噪聲,是影象中經常見到的一種噪聲,它是一種隨機出現的白點或者黑點,可能是亮的區域有黑色畫素或是在暗的區域有白色畫素(或是兩者皆有)。鹽和胡椒噪聲的成因可能是影像訊號受到突如其來的強烈干擾而產生、類比數位轉換器或位元傳輸錯誤等。例如失效的感應器導致畫素值為最小值,飽和的感應器導致畫素值為最大值。

中值濾波在影象處理中,常用於保護邊緣資訊,是經典的平滑噪聲的方法。


2、雙邊濾波

2.1、 定義

雙邊濾波(Bilateral filter)是一種非線性的濾波方法,是結合影象的空間鄰近度和畫素值相似度的一種折中處理,同時考慮空域資訊和灰度相似性,達到保邊去噪的目的。具有簡單、非迭代、區域性的特點 。雙邊濾波器的好處是可以做邊緣儲存(edge preserving),一般過去用的維納濾波或者高斯濾波去降噪,都會較明顯地模糊邊緣,對於高頻細節的保護效果並不明顯。

雙邊濾波是一種非線性濾波器,它可以達到保持邊緣、降噪平滑的效果。和其他濾波原理一樣,雙邊濾波也是採用加權平均的方法,用周邊畫素亮度值的加權平均代表某個畫素的強度,所用的加權平均基於高斯分佈。最重要的是,雙邊濾波的權重不僅考慮了畫素的歐氏距離(如普通的高斯低通濾波,只考慮了位置對中心畫素的影響),還考慮了畫素範圍域中的輻射差異(例如卷積核中畫素與中心畫素之間相似程度、顏色強度,深度距離等),在計算中心畫素的時候同時考慮這兩個權重。
在這裡插入圖片描述在這裡插入圖片描述

https://www.cnblogs.com/qiqibaby/p/5296681.html
http://www.cnblogs.com/Imageshop/p/3406823.html

相關API

在這裡插入圖片描述

CV_EXPORTS_W void medianBlur( InputArray src, OutputArray dst, int ksize );
ksize: 濾波模板的尺寸大小,必須是大於1的奇數,如357……
CV_EXPORTS_W void bilateralFilter( InputArray src, OutputArray dst, int d,
                                   double sigmaColor, double sigmaSpace,
                                   int borderType = BORDER_DEFAULT );
1. 值域和空域的兩個方差sigma可以簡單的設定為相等,小於10,無太大效果,大於150效果太強,像卡通片似的。
2. 濾波器尺寸d:大於5將較慢(5 forreal-time),d=9for off-lineapplications,d 是畫素鄰域“直徑”。
3. Sigma_color較大,則在鄰域中的畫素值相差較大的畫素點也會用來平均。
4. Sigma_space較大,則雖然離得較遠,但是,只要值相近,就會互相影響。
5. 將sigma_sapce設定較大,sigma_color設定較小,可獲得較好的效果(椒鹽噪聲)。

舉例:

int main() {
	Mat src = imread("D:\\first.jpg");
	if (!src.data) {
		cerr << "open error" << endl;
		return -1;
	}
	Mat dst,dst1,dst2;
	medianBlur(src, dst, 7);
	bilateralFilter(src, dst1,5,100, 150);
	GaussianBlur(src, dst2, Size(5, 5), 11, 11);
	imshow("src", src);
	imshow("MedianBlur", dst);
	imshow("Bilateralfilter", dst1);
	imshow("GaussianBlur", dst2);
	waitKey(0);
	return 0;


}

在這裡插入圖片描述

https://blog.csdn.net/piaoxuezhong/article/details/78302920