在网络上众所周知流传的高斯3*3模板实际上是对高斯曲面的一个整数除法形式的近似:
1 2 1
2 4 2 /16
1 2 1
实际验证,我们发现这个3*3模板实际上是对高斯半径约为0.849时的一个近似,当r=0.849时,其3*3归一模板为(在MATLAB中,输入h=fspecial('gaussian', 3, 0.849);即可得到这个模板):
(guass radius=0.849000)
0.062467 0.125000 0.062467
0.125000 0.250131 0.125000
0.062467 0.125000 0.062467
然后我们可以用Matlab中的imfilter来对图像进行高斯模糊的处理:
img = imread('c:\demo.bmp');
h = fspecial('gaussian', 3, 0.849);
img2 = imfilter(img, h);
subplot(121), imshow(img); title('原图')
subplot(122), imshow(img2); title('高斯模糊后')
效果如下:
我们可以在Matlab中用如下语句绘制高斯曲面:
绘制高斯曲面的Matlab代码
效果如下图:
在数字信号处理中,高斯模糊算法是一种滤波器,它的时域和频域曲线如下所示:
从频域曲线看出,高斯模糊本质上一种低通滤波器。体现在图像处理上,图像的边缘等灰度变化剧烈的地方对应高频信息,将被滤除。
最后,我们给出计算高斯模糊模板的C语言代码,请注意,由于高斯模板是对称的,实际上我们只需要计算出大约1/4模板即可。但这里的代码我们没有做这样的优化。我们输出的模板是(2*N+1)*(2N+1),高斯半径用r表示。
计算高斯模板
同时,作为比较,我们给出在Matlab中生成高斯模板的代码(fspecial的代码局部,其中p3是第三个参数即高斯半径):
case 'gaussian' % Gaussian filter siz = (p2-1)/2; %注:p2即模板边长,默认值为33 std = p3; %注:p3即高斯半径,默认为为0.5 [x,y] = meshgrid(-siz(2):siz(2),-siz(1):siz(1)); arg = -(x.*x + y.*y)/(2*std*std); h = exp(arg); h(h<eps*max(h(:))) = 0; sumh = sum(h(:)); %注:模板归一化 if sumh ~= 0, h = h/sumh; end;
更多对Photoshop高斯模糊滤镜的算法总结相关文章请关注PHP中文网!
……