Site Overlay

高斯分布:二维形式、加权模板和滤波

从一维到二维

高中某课本里,我们曾经学习过正态分布,也即高斯分布。其公式如下:

$$
\displaystyle f(x)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{{(x-\mu})^2}{2\sigma^2}}
$$
其中 $\mu$是分布的对称轴——均值,$\sigma$ 是标准差。$\mu=0$时,上式变为:

$$
f(x) =\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{x^2}{2\sigma^2}}
$$

我们将其拓展到二维,只需要将$f(x)$和$f(y)$相乘即可。记 $g(x,y) = f(x)f(y)$,并将$\sigma$也引入作为变量,则有:

$$
g(x,y,\sigma) = {1\over 2 \pi\sigma^2}e^{ - {x^2 + y^2 \over2\sigma^2}}
$$

这就是二维的高斯分布。

作为权重的高斯函数

我们在图像处理中常常用到高斯函数,例如高斯滤波器。图像可以用矩阵表示,假定有一图像:
$$
\left[
\begin{matrix}
1 & 2 & 3 & 4 \
2 & 1 & 4 & 2 \
3 & 2 & 1 & 1 \
4 & 3 & 2 & 1 \
\end{matrix}
\right]
$$
我们要对其进行高斯滤波。这种滤波是针对每一个像素的,我们不妨以 1 行 1 列的像素为例,将其周围 3x3 的区域抽出:

$$
\left[
\begin{matrix}
1 & 2 & 3\
2 & \boxed{1} & 4\
3 & 2 & 1\
\end{matrix}
\right]
$$
以中间的 1 为坐标原点$(0, 0)$建立坐标系。把周围数字的坐标带入二维高斯分布,取标准差$\sigma=1.3$。得到:
$$
\left[
\begin{matrix}
0.0174 & 0.0405 & 0.0174\
0.0405 & 0.094 & 0.0405\
0.0174 & 0.0405 & 0.0174\
\end{matrix}
\right]
$$

这个是我临时写的 g 的计算脚本,欢迎拿去用~

var g = function (x,y,sigma){return 1 / (Math.PI*2*sigma*sigma) * Math.exp(-(x*x + y*y)/2*sigma*sigma);}

我们也让每个值等于其占总体的比例,使得总体和为 1:
$$
\left[
\begin{matrix}
0.053 & 0.124 & 0.053\
0.124 & 0.289 & 0.124\
0.053 & 0.124 & 0.053\
\end{matrix}
\right]
$$
得到的这个东西我们叫做权重模板。有了这个,我们就可以对之前的 3x3 小块的中心元素进行高斯滤波。对应相乘:
$$
\left[
\begin{matrix}
0.053\times1 & 0.124\times2 & 0.053\times3\
0.124\times2 & 0.289\times1 & 0.124\times4\
0.053\times3 & 0.124\times2 & 0.053\times1\
\end{matrix}
\right]
$$

把得到的矩阵的所有值加起来,就是中心像素的值。这样我们就完成了对这个像素的滤波。依次对所有像素的所有通道执行,即可完成对图像的高斯滤波。

怎么样,是不是很简单?

发表评论

电子邮件地址不会被公开。 必填项已用*标注