温故而知新,学习的知识整理出来时常翻一下还是好的。下面将从高斯模糊的定义和应用上来说明。
高斯模糊定义
高斯模糊其实是一个低通滤波器,它的核心在于使用高斯函数作为模糊模板与输入图像做卷积运算,去除图像的高频分量,达到模糊图像的目的(其实就是滤波)。
经过高斯模糊处理的图片视觉效果类似于通过透过半透明的屏幕去查看,高斯模糊在图像预处理阶段用的非常广泛,就比如在SIFT算法中构建尺度空间中就要用到。
如上,高斯模糊的核心在于高斯函数,下面将贴出高斯函数的具体表达式:
一维:
二维:
其中: x、y 分别是原点到 x 轴或 y 轴之间的距离。 σ 为正态分布的标准差。
当应用于二维时,这个公式生成的曲面的等高线是从中心开始呈正态分布的同心圆。该分布的值用于构建一个应用于原始图像的卷积矩阵。
每个像素的新值被设置为周围像素值的加权平均值。原来的像素值具有最高的高斯值,因此具有最大的权重。而相邻的像素随着与中心距离的增加,则权重越来越小。所以经过高斯模糊处理后更好地保留了边缘效果。
理论上,图像上每个点的高斯分布都不为0,也就是说每个像素的计算都需要包含整幅图像。在实际应用中,在计算高斯函数的离散近似时,超过 3σ 的像素是非常小甚至接近0,这些点可看作不起作用的点。在计算时可以忽略。一般在图像处理中我们只需计算 (6σ+1)×(6σ+1) 的像素矩阵就可以确保得到的结果接近高斯分布。
还有最重要一点,我们对同一图像先后作 σ=σ1 和 σ=σ2 的高斯平滑和直接作 σ=σ21+σ22−−−−−−√ 高斯平滑的结果是一样的(也叫高斯核的半群性质)。
wiki中给出的高斯模糊矩阵如下,其中 σ=0.84089642 ,中心元素具有最大值,随着离中心距离的增加,元素对称减小。
注意中心元素0.22508352是离中心 3σ 处0.00019117的1177倍,所以前面说 3σ 外的点可以忽略不计。
高斯模糊的应用
在图像处理上运用的非常多,下面先贴一个具体用例
clear;close;clc;
img1=imread('2.png');
w=fspecial('gaussian',[7 7],0.84089642);
img2=imfilter(img1,w);
w=fspecial('gaussian',[7 7],2);
img3=imfilter(img1,w);
w=fspecial('gaussian',[7 7],10);
img4=imfilter(img1,w);
subplot(2,2,1)
imshow(img1);
subplot(2,2,2)
imshow(img2);
subplot(2,2,3)
imshow(img3);
subplot(2,2,4)
imshow(img4);
当
σ=0.84088642
时,上面代码中的
w
结果就是上面提到的模板矩阵。模糊结果如下:
可以看到随着
σ
的不断增大,图片越来越模糊。