引用 高斯(核)函數簡介

1函數的基本概念



 

所謂徑向基函數 (Radial Basis Function 簡稱 RBF), 就是某種沿徑向對稱的標量函數。 通常定義爲空間中任一點x到某一中心xc之間歐氏距離的單調函數 , 可記作 k(||x-xc||), 其作用往往是局部的 , 即當x遠離xc時函數取值很小。最常用的徑向基函數是高斯核函數 ,形式爲 k(||x-xc||)=exp{- ||x-xc||^2/(2*σ)^2) } 其中xc爲核函數中心,σ爲函數的寬度參數 , 控制了函數的徑向作用範圍。


 

高斯函數具有五個重要的性質,這些性質使得它在早期圖像處理中特別有用.這些性質表明,高斯平滑濾波器無論在空間域還是在頻率域都是十分有效的低通濾波器,且在實際圖像處理中得到了工程人員的有效使用.高斯函數具有五個十分重要的性質,它們是:


 

(1)二維高斯函數具有旋轉對稱性,即濾波器在各個方向上的平滑程度是相同的.一般來說,一幅圖像的邊緣方向是事先不知道的,因此,在濾波前是無法確定一個方向上比另一方向上需要更多的平滑.旋轉對稱性意味着高斯平滑濾波器在後續邊緣檢測中不會偏向任一方向.


 

(2)高斯函數是單值函數.這表明,高斯濾波器用像素鄰域的加權均值來代替該點的像素值,而每一鄰域像素點權值是隨該點與中心點的距離單調增減的.這一性質是很重要的,因爲邊緣是一種圖像局部特徵,如果平滑運算對離算子中心很遠的像素點仍然有很大作用,則平滑運算會使圖像失真.


 

(3)高斯函數的付立葉變換頻譜是單瓣的.正如下面所示,這一性質是高斯函數付立葉變換等於高斯函數本身這一事實的直接推論.圖像常被不希望的高頻信號所污染(噪聲和細紋理).而所希望的圖像特徵(如邊緣),既含有低頻分量,又含有高頻分量.高斯函數付立葉變換的單瓣意味着平滑圖像不會被不需要的高頻信號所污染,同時保留了大部分所需信號.


 

(4)高斯濾波器寬度(決定着平滑程度)是由參數σ表徵的,而且σ和平滑程度的關係是非常簡單的.σ越大,高斯濾波器的頻帶就越寬,平滑程度就越好.通過調節平滑程度參數σ,可在圖像特徵過分模糊(過平滑)與平滑圖像中由於噪聲和細紋理所引起的過多的不希望突變量(欠平滑)之間取得折衷.


 

(5)由於高斯函數的可分離性,大高斯濾波器可以得以有效地實現.二維高斯函數卷積可以分兩步來進行,首先將圖像與一維高斯函數進行卷積,然後將卷積結果與方向垂直的相同一維高斯函數卷積.因此,二維高斯濾波的計算量隨濾波模板寬度成線性增長而不是成平方增長.


 

2函數的表達式和圖形


 

在這裏編輯公式很麻煩,所以這裏就略去了。可以參看相關的書籍,僅給出matlab繪圖的代碼


 

alf=3;


 

n=7;%定義模板大小


 

n1=floor((n+1)/2);%確定中心


 

for i=1:n


 


a(i)= exp(-((i-n1).^2)/(2*alf^2));


 


for j=1:n


 


b(i,j) =exp(-((i-n1)^2+(j-n1)^2)/(4*alf))/(4*pi*alf);


 


end


 

end


 

subplot(121),plot(a),title('一維高斯函數' )


 

subplot(122),surf(b),title('二維高斯函數' )


 

圖像濾波


 

1 圖像濾波的基本概念


 

圖像常常被強度隨機信號(也稱爲噪聲)所污染.一些常見的噪聲有椒鹽(Salt & Pepper)噪聲、脈衝噪聲、高斯噪聲等.椒鹽噪聲含有隨機出現的黑白強度值.而脈衝噪聲則只含有隨機的白強度值(正脈衝噪聲)或黑強度值(負脈衝噪聲).與前兩者不同,高斯噪聲含有強度服從高斯或正態分佈的噪聲.研究濾波就是爲了消除噪聲干擾。


 

圖像濾波總體上講包括空域濾波和頻域濾波。頻率濾波需要先進行傅立葉變換至頻域處理然後再反變換回空間域還原圖像,空域濾波是直接對圖像的數據做空間變換達到濾波的目的。它是一種鄰域運算,即輸出圖像中任何像素的值都是通過採用一定的算法,根據輸入圖像中對用像素周圍一定鄰域內像素的值得來的。如果輸出像素是輸入像素鄰域像素的線性組合則稱爲線性濾波(例如最常見的均值濾波和高斯濾波),否則爲非線性濾波(中值濾波、邊緣保持濾波等)。


 

線性平滑濾波器去除高斯噪聲的效果很好,且在大多數情況下,對其它類型的噪聲也有很好的效果。線性濾波器使用連續窗函數內像素加權和來實現濾波。特別典型的是,同一模式的權重因子可以作用在每一個窗口內,也就意味着線性濾波器是空間不變的,這樣就可以使用卷積模板來實現濾波。如果圖像的不同部分使用不同的濾波權重因子,且仍然可以用濾波器完成加權運算,那麼線性濾波器就是空間可變的。任何不是像素加權運算的濾波器都屬於非線性濾波器.非線性濾波器也可以是空間不變的,也就是說,在圖像的任何位置上可以進行相同的運算而不考慮圖像位置或空間的變化。


 

2 圖像濾波的計算過程分析


 

濾波通常是用卷積或者相關來描述,而線性濾波一般是通過卷積來描述的。他們非常類似,但是還是會有不同。下面我們來根據相關和卷積計算過程來體會一下他們的具體區別:


 

卷積的計算步驟:


 

(1)       卷積核繞自己的核心元素順時針旋轉180


 

(2)       移動卷積核的中心元素,使它位於輸入圖像待處理像素的正上方


 

(3)       在旋轉後的卷積核中,將輸入圖像的像素值作爲權重相乘


 

(4)       第三步各結果的和做爲該輸入像素對應的輸出像素


 

相關的計算步驟:


 

1
移動相關核的中心元素,使它位於輸入圖像待處理像素的正上方


 

2
將輸入圖像的像素值作爲權重,乘以相關核


 

3
將上面各步得到的結果相加做爲輸出


 


可以看出他們的主要區別在於計算卷積的時候,卷積核要先做旋轉。而計算相關過程中不需要旋轉相關核。


 

例如: magic(3) =[8 1 6;3 5 7;4 9 2],旋轉180度後就成了[2 9 4;7 5 3;6 1 8]


 

高斯平滑濾波器的設計


 

  高斯函數的最佳逼近由二項式展開的係數決定,換句話說,用楊輝三角形(也稱Pascal三角形)的第n行作爲高斯濾波器的一個具有n個點的一維逼近,例如,五點逼近爲:


 

1 4 6 4 1


 

它們對應於Pascal三角形的第5行.這一模板被用來在水平方向上平滑圖像.在高斯函數可分離性性質中曾指出,二維高斯濾波器能用兩個一維高斯濾波器逐次卷積來實現,一個沿水平方向,一個沿垂直方向.實際中,這種運算可以通過使用單個一維高斯模板,對兩次卷積之間的圖像和最後卷積的結果圖像進行轉置來完成.
這一技術在模板尺寸N約爲10時的濾波效果極好.對較大的濾波器,二項式展開係數對大多數計算機來說都太多.但是,任意大的高斯濾波器都能通過重複使用小高斯濾波器來實現.高斯濾波器的二項式逼近的σ可用高斯函數擬合二項式係數的最小方差來計算.


 

   設計高斯濾波器的另一途徑是直接從離散高斯分佈中計算模板權值。爲了計算方便,一般希望濾波器權值是整數。在模板的一個角點處取一個值,並選擇一個K使該角點處值爲1。通過這個係數可以使濾波器整數化,由於整數化後的模板權值之和不等於1,爲了保證圖像的均勻灰度區域不受影響,必須對濾波模板進行權值規範化。



 

  高斯濾波器的採樣值或者高斯濾波器的二項式展開係數可以形成離散高斯濾波器.當用離散高斯濾波器進行卷積時,其結果是一個更大的高斯離散濾波器.若一幅圖像用N*N離散高斯濾波器進行平滑,接着再用M*M離散高斯濾波器平滑的話,那麼平滑結果就和用(N+M-1)*(N+M-1)離散高斯濾波器平滑的結果一樣.換言之,在楊輝三角形中用第N行和第M行卷積形成了第N+M-1行.


 

使用高斯濾波器進行圖像的平滑


 

   如果適應卷積運算對圖像進行濾波,在matlab中可以通過2個不同的函數來實現conv2imfliter。他們的調用方式如下:


 

Img_n = conv2(Img,g,'same');  和
Img_n = imfilter(Img,g,'conv');


 

這兩種函數處理的結果是完全一樣的。


 


   
imfiler函數在默認的情況下,對圖像的濾波計算用的是相關


 

Img_n = imfilter(Img,g);%使用相關運算濾波


 

下面是一個簡單的例子展示了使用相同的高斯濾波核函數,相關運算和卷積運算對圖像平滑的效果可以直接後邊附的程序查看。


 


由結果可以看出相關運算和卷積運算的在用於圖像平滑濾波時效果差別不大。當模板大小N>50的時候。邊界的係數已經非常小,對運算起到的作用和微乎其微,所以平滑的結果差別已經非常細微,肉眼幾乎難以察覺。


 

example.m


 

clear all


 

I = imread('lena.bmp');


 

Img = double(I);


 

alf=3;


 

n=10;%定義模板大小


 

n1=floor((n+1)/2);%計算中心


 

for i=1:n


 


for j=1:n


 


b(i,j) =exp(-((i-n1)^2+(j-n1)^2)/(4*alf))/(4*pi*alf);


 


end


 

end


 

Img_n = uint8(conv2(Img,b,'same'));


 

K=uint8(imfilter(Img,b));


 

Img_n2=uint8(imfilter(Img,b,'conv'));


 

J=(Img_n2)-Img_n;


 

flag=mean(J(:))


 

subplot(131),imshow(I);title('原圖')


 

subplot(132),imshow(Img_n);title('卷積運算圖')


 

subplot(133),imshow(K);title('相關運算圖')


 

figure(2),surf(b);


 



怎樣將高斯核表達式離散化?





 

對於一個均值爲零的高斯卷積核,知道其方差,怎樣求出其離散表達形式,
例如matlab中,輸入filter=fspecial('gaussian',3,1)
會得到:
filter =

0.0751 0.1238 0.0751
0.1238 0.2042 0.1238
0.0751 0.1238 0.0751
請問這是怎麼求出來的?

~~~~~~~~~~~~~~~~~~~~~~~~~
自己琢磨了一下,寫了一個程序,與matlab的程序結果一致。
sigma=3; %sigma
delta=1; %取值步長爲1
width=9; %卷積核尺寸
filter=zeros(width,width);
for i=-1*floor(width/2):floor(width/2)
for j=-1*floor(width/2):floor(width/2)
filter(i+1+floor(width/2),j+1+floor(width/2))=exp(-1*((i*delta)^2+(j*delta)^2)/(2*sigma^2))/(2*sigma^2);
end
end

filtersum=sum(sum(filter));
filter=filter/filtersum;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章