halcon进化日记-0805halcon官方十大例程之提取物体边缘


01-源码

文件所在目录:edges_sub_pix.hdev
D:\MVTec\docDATA\HALCON-24.11-Progress-Steady\examples\hdevelop\Filters\Edges
源码:

halcon的程序是由一系列算子(operator)按照一定顺序执行,满足需求,实现功能。
什么顺序,通过控制语句(control)里面的条件(if...else)、循环(for/while)等约束算子。
通过 Procedure(过程)实现模块化。


02-代码分析

2.1 看现象

F5 运行
F2 重置运行
F6 单步 跳过 函数
F9 停止

F5,第一次按下,'fabrik'原图,及彩色边缘显现。
F5,第二次按下,stop()处停止,及局部放大。

初步得到:该段代码的功能是提取图像边缘,并将边缘显示出来。


2.2 看逻辑

要看逻辑,需看控制。观察一个树木,首先看主干,再看枝干。
先看看程序里面有没有,
■ 条件分支:if...elseif...else...endif、switch...case...end。
■ 循环结构:for循环(指定步长)、while循环(条件判断),支持break和continue控制流程 。

没有,此部分过。


2.3 看内容

文件源码:

  • This example shows how subpixel precise edges can be extracted from an image.

  • 此示例显示了亚像素精确边缘如何从图像中提取。

  • 1.关闭窗口及初始化
    dev_close_window ()
    read_image (Image, 'fabrik')
    dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)

  • The default parameter were adapted to find more connected edges in the image.

  • 默认参数经过调整,可在图像中找到更多连接的边缘。
    edges_sub_pix (Image, Edges, 'canny', 2, 12, 22)

  • 使用 subpixel 精度的 Canny 方法提取边缘
    🎯 作用: 调用 Halcon 的 亚像素级边缘检测算子,从图像 Image 中提取边缘,结果保存在 Edges(一个 XLD 结构,表示边缘轮廓)。

dev_set_part (0, 0, 511, 511)

  • 设置显示窗口的感兴趣区域 (ROI),这里是从 (0,0) 到 (511,511),即显示图像左上角的一部分
    dev_display (Image)
    dev_set_colored (6)
  • 设置边缘显示为彩色模式,6 表示使用多种颜色显示不同的 XLD 边缘轮廓,便于区分
    dev_display (Edges)
  • 在原图之上叠加显示,检测出的亚像素边缘(XLD 格式)
    disp_continue_message (WindowHandle, 'black', 'true')
  • 在窗口中显示 “按任意键继续” 的提示信息,黑色文字
    stop ()
  • 暂停程序执行,等待用户按键,用于观察当前结果
  • Zoom into the image to enable detailed edge inspection
  • 放大图像以实现详细的边缘检查

dev_set_part (160, 250, 210, 300)

  • 将显示区域缩小到图像的局部:从坐标 (160,250) 到 (210,300),用于放大观察某个区域的边缘
    dev_display (Image)
  • 再次显示原图(局部)
    dev_display (Edges)
  • 再次显示边缘(局部)
    仔细观察边缘是否准确、连续、噪音是否过多等。

2.4 看算子

edges_sub_pix (Image, Edges, 'canny', 2, 12, 22)

🔍 参数详解:

🔍 参数详解:

参数 含义
Image 输入图像,通常是单通道灰度图
Edges 输出的边缘轮廓,数据类型为 XLD(亚像素级轮廓对象)
'canny' 使用的边缘检测方法,Canny 算子,适合提取细腻、少噪声的边缘
2 Sigma(高斯平滑参数):控制图像平滑程度,值越大图像越模糊,小边缘越容易被抑制。2,是轻度平滑
12 低阈值(Low Threshold):低于此值的边缘会被丢弃
22 高阈值(High Threshold):高于此值的边缘被认定为强边缘,介于两者之间的可能是弱边缘(但 Canny 会连接强边缘)

--

🧠 小知识:
● Canny 是经典边缘检测算法,Halcon 的 edges_sub_pix 实现了其亚像素精度版本,即不仅检测出边缘,还能精确定位到像素之间的真实边缘位置(如小数坐标),比整数像素精度更高!

posted @ 2025-08-05 12:20  黛色星霜  阅读(149)  评论(0)    收藏  举报