最近有感于部分网友对高斯模糊滤镜的研究,现总结如下。高斯模糊是数字图像模板处理法的一种。其模板是根据二维正态分布(高斯分布)函数计算出来的。
正态分布最早由a.棣莫弗在求二项分布的渐近公式中得到。c.f.高斯在研究测量误差时从另一个角度导出了它。p.s.拉普拉斯和高斯研究了它的性质。故名高斯模糊。
一维正态分布的函数定义:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.php.cn/
–>//guass radius=0.700000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000001 0.000012 0.000033 0.000012 0.000001 0.000000 0.000000
0.000000 0.000001 0.000093 0.001976 0.005481 0.001976 0.000093 0.000001 0.000000
0.000000 0.000012 0.001976 0.042189 0.117046 0.042189 0.001976 0.000012 0.000000
0.000000 0.000033 0.005481 0.117046 0.324724 0.117046 0.005481 0.000033 0.000000
0.000000 0.000012 0.001976 0.042189 0.117046 0.042189 0.001976 0.000012 0.000000
0.000000 0.000001 0.000093 0.001976 0.005481 0.001976 0.000093 0.000001 0.000000
0.000000 0.000000 0.000001 0.000012 0.000033 0.000012 0.000001 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
在网络上众所周知流传的高斯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(‘高斯模糊后’)
效果如下:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.php.cn/
–>%绘制高斯模糊曲面!——————–
r=0.849; %高斯半径(从0.1到250)
x=-3:0.2:3;
y=x;
[X,Y]=meshgrid(x,y);
Z=exp(-(X.^2+Y.^2)./(2*r*r))/(2*pi*r*r);
mesh(X,Y,Z)
效果如下图:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.php.cn/
–>#include math.h>
#include stdio.h>
#define N 3 /* 模板大小:(2N+1) * (2N+1) */
void main()
{
double a[2*N+1][2*N+1]; /* 高斯模板 */
double r=0.6; /* 高斯半径:[ 0.1, 250] */
double A=1/(2*M_PI*r*r);
int i,j;
for(i=-1*N;iN;i++)
for(j=-1*N;jN;j++)
a[i+N][j+N]=A*exp((-1)*(i*i+j*j)/ (2*r*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更多对Photoshop高斯模糊滤镜的算法总结相关文章请关注PHP中文网!
登录后复制
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2983377.html