opencv非線性濾波 中值 雙邊濾波

2021-09-24 23:10:56 字數 2950 閱讀 1879

中值濾波的核心係數全是1,通過對模板係數對應的影象畫素進行統計排序,找到中值,能夠很好地排除掉較大或較小的雜訊,例如椒鹽雜訊(形象的說就是在影象中的一些黑、白點),脈衝雜訊等。

缺點:統計排序時間較長

void medianblur( inputarray src, outputarray dst, int ksize );
引數src:當ksize為3,5時,深度可以是cv_8u, cv_16u, or cv_32f;若ksize更大,深度只能是cv_8u。

引數dst:和原圖一樣的大小、型別

引數ksize:只能是正、奇數。

1、簡介

相比較高斯模糊,得到的是一整張影象被模糊,細節邊緣會丟失,只考慮了畫素間的空間距離的關係(空間距離影響權重),而雙邊濾波既考慮了畫素空間距離的關係,又考慮了畫素之間相似程度的關係,所以可以達到影象模糊的作用的同時又保留了邊緣細節

2、雙邊濾波原理

2.1、濾波器核由空間域核和值域核兩個函式生成:

空間域核:由畫素位置歐式距離決定的模板權重值wdw_

wd​wd(

i,j,

k,l)

=exp

(−(i

−k)2

+(j−

l)22

σd2)

w_(i,j,k,l)=exp(-\frac+(j-l)^}^})

wd​(i,

j,k,

l)=e

xp(−

2σd2

​(i−

k)2+

(j−l

)2​)

注:其中(k,l)是模板中心點的座標,(i,j)是模板中其他係數的座標,σ

d\sigma_

σd​是高斯函式的標準差。

值域核:由畫素的差值決定的模板權重值wrw_

wr​wr(

i,j,

k,l)

=exp

(−∥f

(i,j

)−f(

k,l)

∥22σ

r2

)w_(i,j,k,l)=exp(-\frac}^})

wr​(i,

j,k,

l)=e

xp(−

2σr2

​∥f(

i,j)

−f(k

,l)∥

2​)

注:f(i,j),f(k,l)是影象對應模板位置的畫素值,σ

r\sigma_

σr​是高斯函式的標準差。

不管是空間域核還是值域核,其大小均在[0,1]之間。

③空間域核×值域核 = 實際模板權值w(i

,j,k

,l)=

wd(i

,j,k

,l)∗

wr(i

,j,k

,l

)w(i,j,k,l)=w_(i,j,k,l)\ast w_(i,j,k,l)

w(i,j,

k,l)

=wd​

(i,j

,k,l

)∗wr

​(i,

j,k,

l)④求得實際畫素值:g(k

,l)=

∑f(i

,j)∗

w(i,

j,k,

l)∑w

(i,j

,k,l

)g(k,l) = \frac

g(k,l)

=∑w(

i,j,

k,l)

∑f(i

,j)∗

w(i,

j,k,

l)​2.2、原理:

在影象平坦區域,臨近畫素的畫素差值較小,對應的值域權重值wrw_

wr​趨近於1,此時空間域權重值wdw_

wd​起主要作用,相當於對平坦區域進行高斯模糊;

在影象邊緣區域,臨近畫素的畫素差值較大,對應的值域權重值wrw_

wr​趨近於0,使得w

ww減小,對畫素的影響就越小,從而保持了原圖的邊緣細節。

3、api介紹

void bilateralfilter( inputarray src, outputarray dst, int d,

double sigmacolor, double sigmaspace,

int bordertype = border_default );

不支援就地操作

引數src:8位或浮點數單通道、3通道圖。

引數dst:和原圖一樣的大小和型別。

引數d:鄰域大小,鄰域內的畫素納入計算,d越大,計算範圍越大。

引數sigmacolor:代表σ

r\sigma_

σr​,顏色(差值)空間中濾波器的sigma值,決定了畫素鄰域中多少差值之內的畫素會被計算,值越大,畫素領域內就會有更多的顏色被混合計算,超過這個值的畫素會當作邊緣計算;一般設定在10~150之間。

引數sigmaspace:代表σ

d\sigma_

σd​,座標(距離)空間中濾波器的sigma值,值越大,表示領域內更遠的畫素會相互影響,從而使更大區域中足夠相似的顏色獲取相同的顏色;若d > 0,則d指定了鄰域大小且與sigmaspace無關,否則d正比於sigmaspace.;一般設定為5

雙邊濾波能夠很好地儲存影象邊緣細節而去除掉低頻分量的噪音,但是花費時間相對其他濾波較長,對於簡單的雙邊濾波而言,可以將兩個sigma設定相同,如果值小於10,則對濾波器影響較小,如果值大於150,則對濾波器影響很大,會使影象看起來像**圖。

非線性濾波 中值濾波 雙邊濾波

線性濾波是兩個訊號之和的響應等於它們響應的和,也就是每個畫素的輸出值是由其周邊的畫素加權得到的。所以當雜訊的分布不符合高斯分布或者某種線性分布時,而是散粒雜訊時,使用線性濾波只能使雜訊變得柔和或者模糊,不能真正的消除雜訊,這時候就需要非雜訊濾波來處理。取待處理畫素及其鄰域畫素的灰度值按大小的順序排列...

C C OpenCV中值濾波 雙邊濾波

中值濾波 void medianblur inputarray src,outputarray dst,int ksize 只能3,5,7,9後的奇數 如下 include include include using namespace cv int main 執行結果 雙邊濾波bilateralf...

(13)中值濾波和雙邊濾波

其實中值濾波,就是那九個數值,進行排序,選擇中間的數值來代替那九個數的中間位置的值,然後再從左到右,從上到下,這樣移動運算 下面是均值濾波和高斯濾波的基礎知識 中值濾波基礎知識 運用中值濾波,就是防止乙個畫素點的周圍落差太大,影響該點的畫素值,所以,用中值濾波可以很好的去除的瑕點 下面是中值濾波的 ...