项目上对图像处理需要用到点高斯算法,网上找到一篇对原理及部分问题分析讲解的还不错的文章,分享一下,后付自己的一段代码
- 理论 -
高斯分布函数可表示为一个一维的函数G(x)
或者一个二维的函数G(x,y)
在这些函数中, X和Y代表了相对于原始中心点(center tap)像素的偏移(pixel offsets)值。也就是说,他们距离中心多少像素。这里的center tap,通常翻译为“中心抽头”,它在电学中的概念是:在整个次级线圈的中心拉出的一段导线上,它相对于另外两边的抽头电压居中,而为0,两边的电压就是一正一负。在这里,我们也可以做相似的理解。即,它表示,以某个像素为中心进行取样,假设它的坐标为(x,y),那么周围四个点的坐标就是(x-1,y)(x+1,y)(x,y-1)(x,y+1)。对于整个分布来说,我们也可以用一个平均参数来实施位移,从而取代center tap的作用。但这样的模糊不符合我们的要求,我们希望我们的分布是基于中心的。
函数中的σ,即“西格玛”。在统计学中,它常用来表示“标准差”。高斯模糊的标准差,表示模糊的延伸距离。它的缺省值一般设为1,你可以提高它,来获得更强的效果。
函数中的e是欧拉数(Euler's number),它的值一般取2.7。你可以到http://blog.sina.com.cn/s/blog_54ab9583010007u5.html看看精确到小数点后10000位的e。
这个函数的结果,就是以x(在一个方向上),或者(x,y)(在两个方向上),为中心的加权(weight)值,或者说该点在多大程度上影响模糊后的像素。
那么,它能获得什么样的结果呢?当σ 值取1时,我们可以得到:
G(0) = 0.3989422804
G(1) = G(-1) = 0.2419707245
G(2) = G(-2) = 0.0539909665
G(3) = G(-3) = 0.0044318484
......
这些结果有什么意义呢?
当x = 0时,表示这一点就是原始中心点(center tap), 这个点需要保留0.39(39%)的颜色
当x = 1以及x = -1时, 即有一个像素的位移时, 这一点需要保留0.24的颜色值
当x = 2以及x = -2时, 即有两个像素的位移时, 这一点需要保留0.05的颜色值
......</