高斯公式:
\[G(x,y)=\frac{1}{{2\pi{\sigma ^2}}}{e^{ - \frac{{{x^2} + {y^2}}}{{2{\sigma ^2}}}}}\ \]
代碼
clear;close all;clc
% 高斯濾波器參數
s1 = 15; s2 = 20;
sigma = 15;
% 按公式編寫
[x, y]=meshgrid(-((s2-1)/2):(s2/2),(-((s1-1)/2):(s1/2)));
gauss=exp(-(x.^2+y.^2)/(2*sigma*sigma));
G1=gauss/sum(gauss(:));
% Matlab 自帶
G2 = fspecial('gaussian',[s1,s2],sigma);
isequal(G1,G2)
figure
subplot(1,2,1);mesh(G1);title('按公式編寫')
subplot(1,2,2);mesh(G2);title('Matlab 自帶')
結果
ans =
logical
1
結論
- 按公式編寫:先構造 x 和 y 軸方向的數值刻度,形成一張網格點,然后按照公式計算高斯濾波器中各位置的取值,最后做一個歸一化(因為歸一化會將前面的系數消掉,所以一般不加前面的系數)。則此時的 G 滿足求和為 1,相當於積分為1。
- Matlab 自帶:通過 fspecial 實現,設置好濾波器類型,和參數即可。
- 以上兩種方式完全等效。