我们给出一个模板[-1,0,1]和一幅图象。不难发现原图中左边暗,右边亮,中间存在着一条明显的边界。进行模板操作后的结果如下:
。可以看出,第3、4列比其他列的灰度值高很多,人眼观察时,就能发现一条很明显的亮边,其它区域都很暗,这样就起到了边沿检测的作用。
为什么会这样呢?仔细看看那个模板就明白了,它的意思是将右邻点的灰度值减左邻点的灰度值作为该点的灰度值。在灰度相近的区域内,这么做的结果使得该点的灰度值接近于0;而在边界附近,灰度值有明显的跳变,这么做的结果使得该点的灰度值很大,这样就出现了上面的结果。
这种模板就是一种边沿检测器,它在数学上的涵义是一种基于梯度的滤波器,又称边沿算子,你没有必要知道梯度的确切涵义,只要有这个概念就可以了。梯度是有方向的,和边沿的方向总是正交(垂直)的。
1. Sobel算子
在边沿检测中,常用的一种模板是Sobel算子。Sobel算子有两个,一个是检测水平边沿的,
另一个是检测垂直平边沿的 。与
相比,Sobel算子对于象素的位置的影响做了加权,因此效果更好。
Sobel算子另一种形式是各向同性Sobel(Isotropic Sobel)算子。
2. 高斯拉普拉斯算子
由于噪声点(灰度与周围点相差很大的点)对边沿检测有一定的影响,所以效果更好的边沿检测器是高斯拉普拉斯(LOG)算子。它把高斯平滑滤波器和拉普拉斯锐化滤波器结合了起来,先平滑掉噪声,再进行边沿检测,所以效果会更好。
常用的LOG算子是5×5的模板,如下所示,到中心点的距离与位置加权系数的关系用曲线表示为图7.4。是不是很象一顶墨西哥草帽?所以,LOG又叫墨西哥草帽滤波器。