图像边缘检测是图像处理、图像分析、模式识别、计算机视觉的最基本的步骤。其结果的正确性和可靠性直接影响到机器视觉系统对客观世界的理解。实现边缘检测有很多不同的方法,也一直是图像处理中的研究热点,人们一直期望找到一种抗噪强、定位准、不漏检、不误检的检测算法,但迄今为止尚未能取得期待的成果。
在经典图像理论中,有一种观点是将边缘定义为图像灰度值剧烈变化处。如果以灰度变化作为边缘检测的依据,则可以运用导数的方法提取边缘,导数的输出值作为该边缘的强度。在此基础上,可根据某一阈值确定其是否为边缘点,将边界点连接起来就形成边缘。
由于数字图像数据是离散的,最短距离是在两个相邻像素之间距离h。故导数常使用下列简单的近似公式:
为了提高运算速度,避免平方和运算及开放运算,实际中一般用两个偏导数的绝对值之和或最大绝对值来表示,即:
幅度的输出值作为该边缘的强度。在此基础上,可根据是否大于某一阈值来确定其是否为边缘点,将边界点连接起来就形成边缘。
模板运算:
如果我们沿如下图方向角度求其交叉方向的偏导数,则得到Roberts于1963年提出的交叉算子边缘检测方法。该方法最大优点是计算量小,速度快。但该方法由于是采用偶数模板,如下图所示,所求的(x,y)点处梯度幅度值,其实是图中交叉点处的值,从而导致在图像(x,y)点所求的梯度幅度值偏移了半个像素(见下图)。
四、Prewitt算子
上述偶数模板使得提取的点(x,y)梯度幅度值有半个像素的错位。为了解决这个定位偏移问题,目前一般是采用奇数模板。
奇数模板:
在图像处理中,一般都是取奇数模板来求其梯度幅度值,即:以某一点(x,y)为中心,取其两边相邻点来构建导数的近似公式:
这样就保证了在图像空间点(x,y)所求的梯度幅度值定位在梯度幅度值空间对应的(x,y)点上(如下图所示)。
前面我们讲过,判断某一点的梯度幅度值是否是边缘点,需要判断它是否大于设定的阈值。所以,只要我们设定阈值时考虑到加权系数产生的影响便可解决,偏导数值的倍数不是一个问题。
Prewitt算子
在一个较大区域中,用两点的偏导数值来求梯度幅度值,受噪声干扰很大。若对两个点的各自一定领域内的灰度值求和,并根据两个灰度值和的差来计算x,y的偏导数,则会在很大程度上降低噪声干扰。源于这种思想,Prewitt于1970年提出了提取边缘的Prewitt算子,其系数加权模板如下:
换言之,我们求得是模板中红色区域的灰度值之和与绿色区域的灰度值之和二者之间的偏导数值。
五、Sobel算子
Sobel于1970年提出了Sobel算子,与Prewitt算子相比较,Sobel算子对检测点的上下左右进一步加权。其加权模板如下:
文章转自: http://hi.baidu.com/liujianz/blog/item/af3818cfa461c238f8dc61d5.html