halcon中的划痕检查实例surface_scratch

本文介绍了一种通过局部阈值和形态学后处理提取表面划痕的算法。该方法包括图像获取、分割、区域处理等步骤,实现了划痕的有效识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

* surface_scratch.hdev: extraction of surface scratches via local thresholding and morphological post-processing
* 划痕检查实例


dev_close_window ()
dev_update_window ('off')
* ****
* step: acquire image
* ****
*读取图片

read_image (Image, 'surface_scratch')

*获取图片大小

get_image_size (Image, Width, Height)

*开窗口

dev_open_window_fit_image (Image, 0, 0, Width, Width, WindowID)
set_display_font (WindowID, 12, 'Courier', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (4)
dev_display (Image)
disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* step: segment image
* ****

* -> using a local threshold

*平滑图片

mean_image (Image, ImageMean, 7, 7)

*动态阀值分割

dyn_threshold (Image, ImageMean, DarkPixels, 5, 'dark')

* -> extract connected components

*计算连通区域

connection (DarkPixels, ConnectedRegions)
dev_set_colored (12)
dev_display (ConnectedRegions)
disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* step: process regions

* ****


* -> select large regions

*选择大点的区域

select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 10, 1000)
dev_display (Image)
dev_display (SelectedRegions)
disp_continue_message (WindowID, 'black', 'true')
stop ()
* -> visualize fractioned scratch
open_zoom_window (0, round(Width/2), 2, 303, 137, 496, 3, WindowHandleZoom)
dev_set_color ('blue')
dev_display (Image)
dev_display (SelectedRegions)
disp_continue_message (WindowID, 'black', 'true')
stop ()

* -> merge fractioned scratches via morphology

**并运算,把所有的区域合并成一个变量,这样膨胀处理更有完整性.

union1 (SelectedRegions, RegionUnion)


*肿胀区域,肿胀处理,注意试验,如果不union1,处理后的结果线的完整性就不好了.

dilation_circle (RegionUnion, RegionDilation, 3.5)


dev_display (Image)
dev_display (RegionDilation)
disp_continue_message (WindowID, 'black', 'true')

stop ()

*提取骨架

skeleton (RegionDilation, Skeleton)


connection (Skeleton, Errors)
dev_set_colored (12)
dev_display (Image)
dev_display (Errors)
disp_continue_message (WindowID, 'black', 'true')
stop ()
* -> distinguish small and large scratches
close_zoom_window (WindowHandleZoom, Width, Height)
select_shape (Errors, Scratches, 'area', 'and', 50, 10000)

select_shape (Errors, Dots, 'area', 'and', 1, 50)


dev_display (Image)
dev_set_color ('red')
dev_display (Scratches)
dev_set_color ('blue')
dev_display (Dots)
<think>我们正在讨论的是HALCON中的`add_deformable_surface_model_reference_point`函数。该函数用于可变形表面匹配(DeformableSurface-BasedMatching)中,其作用是为可变形表面模型添加参考点。###函数功能在可变形表面匹配中,我们首先需要创建一个可变形表面模型(使用`create_deformable_surface_model`)。然后,我们可以使用`add_deformable_surface_model_reference_point`函数向该模型添加参考点。这些参考点用于在匹配过程中帮助确定物体的姿态(pose)。参考点通常选择在物体表面具有显著特征的位置,以便在匹配时能够更准确地定位。###参数说明函数的完整调用形式如下:```halconadd_deformable_surface_model_reference_point(::DeformableSurfaceModel,ReferencePointX,ReferencePointY,ReferencePointZ:)```参数含义:-`DeformableSurfaceModel`(in):可变形表面模型的句柄,由`create_deformable_surface_model`创建。-`ReferencePointX`(in),`ReferencePointY`(in),`ReferencePointZ`(in):参考点的三维坐标(X,Y,Z)。这些坐标是在模型坐标系中定义的。###使用步骤1.创建可变形表面模型:```halconcreate_deformable_surface_model(:DeformableSurfaceModel:ObjectModel3D,RelSamplingDistance,GenParamName,GenParamValue:)```2.添加参考点(可多次调用添加多个参考点):```halconadd_deformable_surface_model_reference_point(DeformableSurfaceModel,X,Y,Z)```3.进行后续的匹配操作(例如`find_deformable_surface_model`)。###使用案例假设我们有一个3D物体模型(例如一个CAD模型),我们想为其创建一个可变形表面模型,并在模型上设置一个参考点(例如物体的中心点)。以下是一个示例代码:```halcon*读取3D物体模型read_object_model_3d('object.om3','m',[],[],ObjectModel3D,Status)*创建可变形表面模型create_deformable_surface_model(ObjectModel3D,0.03,[],[],DeformableSurfaceModel)*设置参考点(假设物体中心在(0,0,0))add_deformable_surface_model_reference_point(DeformableSurfaceModel,0,0,0)*接下来可以进行匹配操作...*例如:读取场景点云,进行匹配read_object_model_3d('scene.om3','m',[],[],SceneObjectModel3D,Status)find_deformable_surface_model(SceneObjectModel3D,DeformableSurfaceModel,0.5,0.1,0.1,0.9,0,0.5,[],[],Pose,Score,ResultObjectModel3D)*清理模型clear_deformable_surface_model(DeformableSurfaceModel)```###注意事项-参考点可以添加多个,但通常一个就足够了(例如物体的中心)。-参考点的坐标是在模型坐标系中定义的,因此需要确保与创建模型时使用的坐标系一致。-在匹配过程中,参考点会被用来计算物体的姿态(Pose),即参考点从模型坐标系到场景坐标系的变换。###相关函数-`create_deformable_surface_model`:创建可变形表面模型。-`find_deformable_surface_model`:在场景中查找可变形表面模型。-`clear_deformable_surface_model`:清除模型,释放资源。###参考文献[^1]:HALCONProgressDocumentation,"SolutionGuideIII-C-3DVision",Chapter3:"DeformableSurface-BasedMatching".§§相关问题§§1.可变形表面匹配与传统刚体匹配有何区别?2.如何优化可变形表面匹配的性能?3.在可变形表面匹配中,参考点的选择有哪些最佳实践?4.如何处理匹配过程中出现的变形?</think>### HALCON中`add_deformable_surface_model_reference_point`函数详解 `add_deformable_surface_model_reference_point`是HALCON中用于**可变形表面匹配**的关键函数,它在3D物体识别和姿态估计中起重要作用。以下是参数功能和使用案例的详细说明: --- #### 一、函数功能 该函数为可变形表面模型添加**参考点**(reference points),这些点作为模型的关键特征锚点,用于: 1. **提高匹配精度**:在变形表面匹配中提供稳定的定位参考 2. **加速搜索过程**:减少姿态空间搜索范围[^1] 3. **支持局部匹配**:允许匹配部分可见的物体 --- #### 二、参数详解 ```halcon add_deformable_surface_model_reference_point( : : DeformableSurfaceModel, // 输入:可变形表面模型句柄 ReferencePointX, // 输入:参考点X坐标(m) ReferencePointY, // 输入:参考点Y坐标(m) ReferencePointZ // 输入:参考点Z坐标(m) : ) ``` | 参数 | 类型 | 单位 | 说明 | |------|------|------|------| | `DeformableSurfaceModel` | Handle | - | 由`create_deformable_surface_model`创建的模型句柄 | | `ReferencePointX/Y/Z` | Real | 米 | 模型坐标系中的3D坐标点 | > **关键特性**:参考点应选择在物体表面**高曲率区域**或**显著特征点**,如边缘、角点等不易变形的部位[^2] --- #### 三、使用案例:柔性物体识别 ```halcon * 创建可变形表面模型 read_object_model_3d ('deformable_object.om3', 'm', [], [], ObjectModel3D, Status) create_deformable_surface_model (ObjectModel3D, 0.01, [], [], ModelID) * 添加关键参考点(示例:选择4个角点) add_deformable_surface_model_reference_point (ModelID, -0.1, -0.1, 0.0) // 左下角 add_deformable_surface_model_reference_point (ModelID, 0.1, -0.1, 0.0) // 右下角 add_deformable_surface_model_reference_point (ModelID, -0.1, 0.1, 0.0) // 左上角 add_deformable_surface_model_reference_point (ModelID, 0.1, 0.1, 0.0) // 右上角 * 在场景中执行匹配 find_deformable_surface_model (SceneCloud, ModelID, 0.8, 0.1, 0.9, 0.9, 0.0, 0.1, [], [], Pose, Score) * 可视化结果 dev_display_object_model_3d (SceneCloud, [], [], [], Pose, []) get_deformable_surface_matching_result (ModelID, 'all', 'points', ResultPoints) dev_set_color ('red') dev_display_object_model_3d (ResultPoints, [], [], [], [], []) ``` --- #### 四、最佳实践 1. **参考点数量**:通常添加**3-5个**关键点即可,过多会降低效率 2. **位置选择**: - 优先选择**刚性部位**(如电子元件的焊点) - 避免选择**易变形区域**(如布料中心) 3. **坐标精度**:使用CAD模型精确坐标或通过`get_object_model_3d_params`获取特征点坐标 4. **性能优化**:与`set_deformable_surface_model_param`配合使用,调整参数: ```halcon set_deformable_surface_model_param (ModelID, 'ref_point_weight', 0.7) // 参考点权重 ``` --- #### 五、典型应用场景 1. 柔性电路板的装配检测 2. 汽车内饰件的变形分析 3. 纺织品/皮革制品质量检验 4. 生物组织形变测量 > **注意**:参考点添加后不可修改,需调用`clear_deformable_surface_model`释放模型后重建[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值