首页 理论教育 基于Canny算子的图像边缘检测优化方法

基于Canny算子的图像边缘检测优化方法

时间:2023-06-20 理论教育 版权反馈
【摘要】:Canny边缘检测算子是边缘检测算子中最常用的一种,也是公认的性能优良的边缘检测算子,它经常被其他算子引用作为标准算子进行优劣的对比分析。Canny提出了边缘检测算子优劣评判的三条标准。边缘检测算子应该只对边缘进行响应,检测算子不漏检任何边缘,也不应将非边缘标记为边缘。非最大值抑制根据Canny关于边缘算子性能的评价标准,边缘只允许有一个像元的宽度,但经过Sobel滤波后,图像中的边缘是粗细不一的。

基于Canny算子的图像边缘检测优化方法

Canny边缘检测算子是边缘检测算子中最常用的一种,也是公认的性能优良的边缘检测算子,它经常被其他算子引用作为标准算子进行优劣的对比分析。Canny提出了边缘检测算子优劣评判的三条标准。

➢高的检测率。边缘检测算子应该只对边缘进行响应,检测算子不漏检任何边缘,也不应将非边缘标记为边缘。

➢精确的定位。检测到的边缘与实际边缘之间的距离要尽可能小。

➢明确的响应。对每一条边缘只有一次响应,只得到一个点。

Canny边缘检测算子能满足上述三条评判标准,这也正是其优秀之处。虽然Canny算子也是一阶微分算子,但它对一阶微分算子进行了扩展,即主要是在原一阶微分算子的基础上,增加了非最大值抑制和双阈值两项改进。利用非最大值抑制不仅可以有效地抑制多响应边缘,而且还可以提高边缘的定位精度;利用双阈值可以有效减少边缘的漏检率。

利用Canny算子进行边缘提取主要分四步进行:

(1)去噪声

通常使用高斯函数对图像进行平滑滤波。为了提高运算效率,可以将高斯函数作成滤波模板,如使用5×5的模板(σ≈1.4):

978-7-111-42352-2-Chapter04-33.jpg

(2)计算梯度值与方向角

分别求取去噪声后图像的在x方向和y方向的梯度MxMy。求取梯度可以通过使用前面的Sobel模板与图像进行卷积完成:

978-7-111-42352-2-Chapter04-34.jpg

梯度值为:

978-7-111-42352-2-Chapter04-35.jpg

梯度方向角:

θ=arctan(My/Mx

将0°~360°梯度方向角归并为四个方向θ':0°,45°,90°和135°。对于所有边缘,定义180°=0°,225°=45°等,这样,方向角在[-22.5°~22.5°]和[157.5°~202.5°]范围内的角点都被归并到0°方向角,其他的角度归并以此类推。

(3)非最大值抑制

根据Canny关于边缘算子性能的评价标准,边缘只允许有一个像元的宽度,但经过Sobel滤波后,图像中的边缘是粗细不一的。边缘的粗细主要取决于跨越边缘的密度分布和使用高斯滤波后图像的模糊程度。非最大值抑制就是将那些在梯度方向具有最大梯度值的像元作为边缘像元保留,将其他像元删除。梯度最大值通常是出现在边缘的中心,随着沿梯度方向距离的增加,梯度值将随之减小。

这样,结合在上一步得到的每个像元的梯度值和方向角,检查围绕点(x,y)的3×3范围内的像元:

➢如果θ′(xy)=0°,那么,检查像元(x+1,y)、(xy)和(x-1,y)。(www.xing528.com)

➢如果θ′(xy)=90°,那么,检查像元(xy+1)、(xy)和(xy-1)。

➢如果θ′(xy)=45°,那么,检查像元(x+1,y+1)、(xy)和(x-1,y-1)。

➢如果θ′(xy)=135°,那么,检查像元(x+1,y-1)、(xy)和(x-1,y+1)。

比较被检查的三个像元梯度值的大小,如果点(xy)的梯度值都大于其他两个点的梯度值,那么,点(xy)就被认为是边缘中心点并被标记为边缘,否则,点(xy)就不被认为是边缘中心点而被删除。

(4)滞后阈值化

由于噪声的影响,经常会出现本应该连续的边缘出现断裂的问题。滞后阈值化设定两个阈值:一个为高阈值thigh,一个为低阈值tlow。如果任何像素对边缘算子的影响超过高阈值,将这些像素标记为边缘;响应超过低阈值(高低阈值之间)的像素,如果与已经标为边缘的像素4-邻接或8-邻接,则将这些像素也标记为边缘。这个过程反复迭代,将剩下的孤立的响应超过低阈值的像素则视为噪声,不再标记为边缘。具体过程如下。

1)如果像元的梯度值小于tlow,则像元(xy)为非边缘像元。

2)如果像元(xy)的梯度值大于thigh,则像元(xy)为边缘像元。

3)如果像元(xy)的梯度值在tlowthigh之间,需要进一步检查像元(xy)的3×3邻域,看3×3邻域内像元的梯度是否大于thigh,如果大于thigh,则像元(xy)为边缘像元。

4)如果在像元(xy)的3×3邻域内,没有像元的梯度值大于thigh,进一步扩大搜索范围到5×5邻域,看在5×5邻域内的像元是否存在梯度大于thigh,如果有,则像元(xy)为边缘像元(这一步可选);否则,像元(xy)为非边缘像元。

在第三步的非最大值抑制过程中,上述方法采用了近似计算:将当前像元的梯度方向近似为4个方向,然后,将梯度方向对应到以当前点为中心的3×3邻域上,然后,通过邻域上对角线方向三个像元梯度值的大小比较,判断是否为边缘点。这一近似方法的优点是计算速度快,但精度较差。为提高精度,可以采用双线性插值方法求取当前点在梯度方向上两边点的梯度值,然后,再进行梯度值的比较,以确定当前点是否为边缘点。

在MATLAB中,也提供了相关的图像边缘检测的函数,其调用格式如下。

978-7-111-42352-2-Chapter04-36.jpg

其中,I是输入的灰度图像,thresh是阈值。

例程4-3是调用edge()函数,对输入图像进行边缘检测的MATLAB程序,其运行结果如图4-5所示。

例程4-3

978-7-111-42352-2-Chapter04-37.jpg

978-7-111-42352-2-Chapter04-38.jpg

图4-5 例程4-3的运行结果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈