halcon边缘检测

       边缘检测 - ☆Ronny丶 - 博客园

        寻找边缘的传统方法,即图像中的暗/光转换,是应用边缘滤波器。这些滤光器可以在光和暗区域的边界找到像素。从数学术语中来说,这意味着这些滤波器决定了图像的梯度。此图像渐变通常作为边缘振幅和/或边缘方向返回。通过选择所有边缘振幅的像素,可以提取区域之间的轮廓。另一种寻找边缘的方法是使用一个训练过的深度学习模型来寻找边缘。该方法的优点是,通过再训练模型,可以进一步改进其结果。这样的再训练甚至可以在自定义任务中找到特定的边。 (官网翻译)

        边缘检测的目的就是找到图像中亮度变化剧烈的像素点构成的集合,表现出来往往是轮廓。如果图像中边缘能够精确的测量和定位,那么,就意味着实际的物体能够被定位和测量,包括物体的面积、物体的直径、物体的形状等就能被测量。在对现实世界的图像采集中,有下面4种情况会表现在图像中时形成一个边缘。

  1. 深度的不连续(物体处在不同的物平面上);
  2. 表面方向的不连续(如正方体的不同的两个面);
  3. 物体材料不同(这样会导致光的反射系数不同);
  4. 场景中光照不同(如被树萌投向的地面);halcon边缘检测_第1张图片

 边缘检测的一般流程:

获取图像

选择感兴趣区域:加快处理速度,减少计算量

图像滤波:使用边缘滤波器获取边缘的梯度和方向。

提取边缘:使用阈值处理将图像中的高亮边缘提取出来。

边缘处理:细化,生成轮廓,合并非连续的边缘,分离背景等。

显示结果:将结果绘制在窗口上,以表现直观的边缘提取效果。

边缘滤波器:Sobel

一、像素级边缘提取

图像滤波

        HALCON提供了广泛的边缘滤波器。最流行的滤波器之一是Sobel滤波器。这是最好的老式过滤器。它结合了速度和合理的质量。相应的运算符被称为sobel_amp和sobel_dir。

        相比之下,edges_image提供了最先进的边缘滤波器。这个操作符实际上不仅仅是一个过滤器。它包括一个使用非最大抑制的边缘细化和一个选择重要边缘点的滞后阈值。它还能非常准确地返回边缘方向和边缘振幅,而这不是Sobel滤波器的情况。如果更高的质量比较长的执行时间更重要,则建议使用此操作符。如果图像没有噪声或模糊,您甚至可以通过使用edges_image中的“sobel_fast”模式来结合精度和速度。在多通道图像中查找边缘的相应操作符为edges_color。

提取边缘

        从边缘振幅图像中提取边缘的最简单的方法是应用阈值来选择具有高边缘振幅的像素。此步骤的结果是一个包含所有边点的区域。对于骨架,这些边缘可以被减薄到一个像素的宽度。作为阈值的高级版本,hysteresis_threshold可以用于消除不重要的边。另一个高级的选择是在骨架之前调用操作符nonmax_suppression_dir,这在困难的情况下可能会产生更精确的边。请注意,要使用此操作符,您必须计算出边缘方向图像。相比之下,高级滤波器edges_image已经包括了非最大抑制和迟滞阈值。因此,在这种情况下,一个简单的阈值就足以提取一个像素宽的边。如果只需要边缘点作为一个区域,则可以使用运算符inspect_shape_model。在这里,所有步骤包括边缘滤波、非最大抑制和迟滞阈值都是高效的。

边缘处理

        如果您想提取边段的坐标,split_skeleton_lines是正确的选择。必须为每个连接的组件(连接的结果)调用此操作符,并返回线段的所有控制点。作为一种替代方法,可以使用霍夫变换来获得线段。在这里,有操作符hough_lines_dir和hough_lines。您还可以通过使用运算符gen_contours_skeleton_xld将边缘区域转换为XLD轮廓。该方法的优点是在第87页上提供了针对XLD轮廓处理的扩展操作符集,例如,针对轮廓分割、特征提取或近似。

        您可以使用background_seg轻松地提取被边缘所包围的区域。如果区域由于边缘中的间隙而合并,则可以预先使用运算符close_edges或close_edges_length在提取区域之前关闭间隙。作为一种替代方法,像opening_circle这样的形态学算符可以应用于background_seg的输出区域。

1.1  Sobel算子

#边缘检测
read_image(Image,'E:/C/Halcon/zhuyin2.jpg')
rgb1_to_gray(Image,GrayImage)
sobel_amp(GrayImage,Amp,'sum_abs',9)
threshold(Amp,Edg,100,255)
skeleton (Edg,Skeleton)
dev_clear_window()
dev_display(Skeleton)

sobel_amp()

sobel_dir()edges_image()

derivate_gauss()

laplace()

laplace_of_gauss()

1.2  Laplace算子

1.3  Canny算子

二、亚像素级边缘提取

三、轮廓处理

        轮廓必须是闭合的

四、基于深度学习的边缘提取

你可能感兴趣的:(机器视觉Halcon,图像处理,计算机视觉,opencv,halcon)