Halcon边缘检测Sobel、Laplace和Canny算子

提示:文章参考了网络上其他作者的文章,以及相关书籍,如有侵权,请联系作者。


前言

       除了阈值分割外,也可以通过检测区域的边缘得到目标区域。区域的边缘像素的灰度值往往会发生灰度上的突变,针对这些跳跃性的突变进行检测和计算,可以得到区域的边缘轮廓,并作为分割图像的依据。Halcon 中有许多边缘滤波器能计算出边缘的幅值和方向,用以实现边缘的提取。本文就以常用的Sobel算子、Laplace 算子和Canny 算子为例,介绍边缘检测的常用方法。
       本文涉及的知识点如下:
       1)、像素级边缘提取:学会如何使用边缘滤波器寻找图像中梯度变化明显的部分。
       2)、亚像素级边缘提取:学会完成亚像素边缘提取、轮廓合并以及XLD轮廓输出。
       3)、轮廓处理:学会轮廓的生成、分割、筛选、连接以及拟合操作。


一、像素级边缘提取

       像素级边缘提取,直观地说,也就是颜色的边缘提取。传统的颜色边缘检测方法是使用边缘滤波器,这些滤波器通过寻找较亮和较暗的区域边界像素点的方式提取边缘,即使用这些滤波器寻找图像中梯度变化明显的部分。这些梯度一般描述为边缘的振幅和方向。将边缘振幅高的所有像素选择出来,就完成了区域的边缘轮廓提取。
       Halcon也提供了许多标准的边缘滤波器,如Sobel、Roberts、Robinson和Frei滤波器。此外,还提供了非极大值抑制算子,用于进行提取边缘后的处理。

1.经典的边缘检测算子

       关于边缘检测,有许多经典的算子,各大图形处理库都有各自的边缘检测算子,这里简要介绍几种。
       1)、1.Sobel 算子
       Sobel算子结合了高斯平滑和微分求导。它是一阶导数的边缘检测算子,使用卷积核对图像中的每个像素点做卷积和运算,然后采用合适的阈值提取边缘。Soble算子有两个卷积核,分别对应x与y两个方向。其计算过程如下。
       a)、分别在x和y两个方向求导。
       b)、在图像的每一个像素点上,结合以上两个结果求出近似梯度。
       2)、Laplace 算子
       Laplace算子是一种二阶导数算子。在图像的边缘区域,像素值会发生比较大的变化,对这些像素求导会出现极值。在这些极值位置,其二阶导数为0,所以也可以用二阶导数来检测图像边缘。
       3)、Canny 算子
       Canny算子的基本思想是寻找梯度的局部最大值。首先使用高斯平滑滤波器卷积降噪,再用一对卷积阵列计算边缘梯度和方向,然后使用非极大值抑制移除非边缘线条,最后使用滞后阈值(高阈值和低阈值)检测并连接边缘。
       对比上述3种算子,有如下总结。
       a)、Sobel算子在边缘检测的同时尽量减少了噪声的影响,比较容易实现。它对像素位置的影响进行了加权,因此效果比较好,是很常用的边缘检测方法。
       b)、Laplace算子是一种各向同性算子,比较适用于只关心边缘的位置而不考虑其周围像素的灰度差值的情况。Laplace算子对孤立像素的响应要比对边缘或线的响应更强烈,因此只适用于无噪声图像。存在噪声的情况下,使用Laplace算子进行边缘检测之前需要先进行低通滤波处理。
       c)、Canny 算子是目前理论上相对最完善的一种边缘检测算法,但其也存在不足之处:为了得到较好的边缘检测结果,它通常需要使用较大的滤波尺度,这样容易丢失一些细节。

2.边缘检测的一般流程

       边缘检测的一般流程如下。
       a)、获取图像。
       b)、选择感兴趣区域。这是为了减少计算量,加快处理速度。
       c)、图像滤波。对输入图像使用边缘滤波器是采集后的一个关键步骤,为了获取图像的边缘部分,在读取了输入图像之后,可以使用边缘滤波器获取边缘的梯度和方向。对于像素级边缘,Halcon中提供了常用算子,如 sobel_amp、sobel_dir、edges_image、derivate_gauss、edges_color等。
       d)、提取边缘。将符合条件的边缘提取出来,应用滤波器之后,可以使用阈值处理将图像中的高亮边缘提取出来。这里可以使用前文介绍的threshold算子,也可以使用hysteresis_threshold 算子减少非关键的边缘,将符合条件的边缘提取出来。还可以进一步对结果进行非极大值抑制,然后使用skeleton 算子将边缘绘制出来。
       e)、边缘处理。根据检测的需要对提取出的边缘进行处理,有时得到的边缘可能会比较粗略,往往大于1个像素,需要进行一些细化;有时得到的边缘并不连续,因此还需要对边缘做一些处理,如生成轮廓、合并非连续的边缘、分离背景等。
       f)、显示结果。将结果绘制在窗口中,以表现直观的边缘提取效果。

3.sobel_amp 算子

       Halcon提供了大量的边缘滤波器,最常用的是Sobel滤波器。它是一种经典的边缘检测算子,速度和效率都非常令人满意。其在Halcon中对应的算子为sobel_amp算子和sobel_dir算子,二者都是使用Sobel算子进行边缘检测。前者用于计算边缘的梯度,后者除了能表示梯度外,还能表示边缘的方向,本小节主要介绍sobel_amp算子。
       下面以一个简单的例子说明sobel_amp算子的用法。该例子输入的是一幅灰度值图像,读取图像后,使用sobel_amp 算子进行边缘滤波。滤波类型参数选择sum_abs,以获得细节比较多的边缘;然后通过阈值处理选择符合梯度阈值的区域,提取出的区域宽度大于1个像素;最后使用skeleton算子将边缘框架显示出来,如下图所示。
在这里插入图片描述
       上述过程的实现代码如下:

read_image (Image,' data/flower')
rgb1_to_gray (Image,,GrayImage)
sobel_amp 
  • 6
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Halcon边缘检测算子是用于提取图像中物体边缘的工具。根据引用的信息,Halcon中常用的边缘检测算子包括以下几种: 1. edges_image: 用于提取2D图像的边缘。 2. edges_sub_pix: 用于提取2D图像的亚像素边缘。 3. edges_object_model_3d: 用于提取3D图像的边缘。 4. edges_color和edges_color_sub_pix: 用于提取彩色图像的边缘。 这些算子可以根据需要选择不同的边缘检测算法来提取物体边缘。其中,edges_image以像素为单位提取边缘特征,而edges_sub_pix以比像素更小的单位来提取边缘特征,通常采用矩法、插值法和拟合法等方法。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [halcon边缘缺陷检测.zip](https://download.csdn.net/download/u014652390/13703647)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Halcon —— 边缘检测算子详解](https://blog.csdn.net/baidu_35536188/article/details/112351198)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值