使用halcon实现3维点云物体与模型的匹配并显示差异

这篇具有很好参考价值的文章主要介绍了使用halcon实现3维点云物体与模型的匹配并显示差异。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、读取3D模型文件,并采样生成对应的模板文件

在这里插入代码片
dev_get_window (WindowHandle)
*读取3D模型
read_object_model_3d('C:/Users/VIBOT/Desktop/img_tmp/3d缺陷检测/A319空中客机_A319空中客机1.stl', 'mm', 'convert_to_triangles', 'true', ObjectModel3D, Status)
Title := 'Reference object (uncalibrated measurement)'
Instructions[0] := 'Rotate: Left button'
Instructions[1] := 'Zoom:   Shift + left button'
Instructions[2] := 'Move:   Ctrl  + left button'
*显示3D模型
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], [], [], Title, [], Instructions, PoseOut)

*计算三维对象模型的三维曲面法线
surface_normals_object_model_3d (ObjectModel3D, 'mls', 'mls_force_inwards', 'true', ObjectModel3DNormals)
*3D模型的最大直径
max_diameter_object_model_3d (ObjectModel3DNormals, Diameter)
*3D模型采样
sample_object_model_3d (ObjectModel3DNormals, 'fast', Diameter * 0.005, [], [], Model3DSampled)
* visualize_object_model_3d (WindowHandle, Model3DSampled, [], [], [], [], Title, [], Instructions, PoseOut)
*创建基于表面匹配所需的数据结构。
create_surface_model (ObjectModel3DNormals, 0.03, 'model_invert_normals', 'true', SurfaceModelID)

二、一次读取3D的模型文件进行配准显示差异

for SceneIndex := 1 to NumScenes by 1
    read_object_model_3d('C:/Users/VIBOT/Desktop/img_tmp/3d缺陷检测/quexian_fly/tmp'+ SceneIndex$'01d'+'.STL', 'mm', 'convert_to_triangles', 'true', Scene3D, Status)
    rigid_trans_object_model_3d (Scene3D, Pose, ObjectModel3DRigidTrans)
    sample_object_model_3d (ObjectModel3DRigidTrans, 'fast', Diameter * 0.005, [], [], Model3DScene3D)
    find_surface_model (SurfaceModelID, Model3DScene3D, 0.02, 0.2, 0, 'false', [], [], Pose, Score, NotUsed)
    refine_surface_model_pose (SurfaceModelID, Model3DScene3D, Pose, 0, 'false', [], [], Pose, Score, SurfaceMatchingResultID)
    *反转姿势
    pose_invert (Pose, PosesInvert)
    *刚性变换
    rigid_trans_object_model_3d (Model3DScene3D, PosesInvert, ObjectModel3DRigidTrans)
    
    *visualize_object_model_3d (WindowHandle1, [ObjectModel3DRigidTrans,Model3DSampled], [], [], [], [], Title, [], Instructions, PoseOut)
    * Measure the distances between the scene and the model.测量场景和模型之间的距离。 
    *计算一个 3D 对象模型的点到另一个 3D 对象模型的距离 
    * 'signed_distances' 该参数可用于计算三维对象模型ObjectModel3DFrom中的点到三维对象模型ObjectModel3DTo中的点、三角形或原语的带符号距离。
    distance_object_model_3d (ObjectModel3DRigidTrans, Model3DSampled, [], 0.0, 'signed_distances', 'true')
    * Select points with a high distance below the model
    * (negative distance) and the points above the model
    * (positive distance).
    *.选择模型下方距离较大的点(负距离)和模型上方距离较大的点(正距离)。
    select_points_object_model_3d (ObjectModel3DRigidTrans, '&distance', -1000, -0.0003, ObjectModel3DThresholdedUp)
    select_points_object_model_3d (ObjectModel3DRigidTrans, '&distance', 0.0003, 1000, ObjectModel3DThresholdedDown)
    *visualize_object_model_3d (WindowHandle1,[ObjectModel3DThresholdedUp], [], [], [], [], Title, [], Instructions, PoseOut)
    * Calculate connected components of the points below
    * (negative distance) and the connected components of the
    * points above (positive distance) the model.
    * The distance threshold should be greater than the distance
    * between two scanlines (> ScaleY).
    *计算模型下方(负距离)点的连接组件和上方(正距离)点的连接组件。
   * 距离阈值应大于两条扫描线之间的距离(>ScaleY)。 
   *'distance_3d' : 测试 3D 点集的点坐标之间的欧氏距离。对于低于值值的任何距离,这些点被视为连接点。
   * 小于ScaleY + 5 阈值的作为连接点
    connection_object_model_3d (ObjectModel3DThresholdedUp, 'distance_3d', 0.01, ObjectModel3DConnectedUp)
    connection_object_model_3d (ObjectModel3DThresholdedDown, 'distance_3d', 0.01, ObjectModel3DConnectedDown)
    * Keep the large components, discard small ones as noise.保留大部件,丢弃小部件作为噪声。 
    select_object_model_3d (ObjectModel3DConnectedUp, 'num_points', 'and', 20, 1000000, ObjectModel3DSelectedUp)
    select_object_model_3d (ObjectModel3DConnectedDown, 'num_points', 'and', 20, 1000000, ObjectModel3DSelectedDown)
    * Set the visualization parameters and values depending on
    * the position of the error points.
    NumErrors := |ObjectModel3DSelectedDown| + |ObjectModel3DSelectedUp|
    Title := 'Found ' + NumErrors + ' error(s)'
    ErrorColorUp := 'blue'
    ErrorColorDown := 'red'
    ErrorColorNames := 'color_' + [2:NumErrors + 1]
    VisParamNames := ['point_size','point_size_1','color_0','color_1',ErrorColorNames,'alpha_' + NumErrors,'disp_background']
    VisParamValues := [5.0,2.0,'white','green',gen_tuple_const(|ObjectModel3DSelectedUp|,ErrorColorUp),gen_tuple_const(|ObjectModel3DSelectedDown|,ErrorColorDown),0.8,'true']
    * Display the errorneous regions.
    dev_clear_window ()
    *disp_message (WindowHandle, ['Bent up','Bent down'], 'window', 12, 500, [ErrorColorUp,ErrorColorDown], 'false')
    visualize_object_model_3d (WindowHandle1, [ObjectModel3DNormals,ObjectModel3DRigidTrans,ObjectModel3DSelectedUp,ObjectModel3DSelectedDown], [], [], VisParamNames, VisParamValues, Title, ['','','#' + [1:NumErrors]], Instructions, PoseOut1)

endfor

三、效果展示
halcon 点云 映射,3d,算法蓝色为模型相对于3D模板多出的部分

halcon 点云 映射,3d,算法
红色为模型相对于3D模板缺少的部分文章来源地址https://www.toymoban.com/news/detail-571434.html

到了这里,关于使用halcon实现3维点云物体与模型的匹配并显示差异的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于C#调用halcon实现模板匹配【附部分源码】

    本文主要实现基于C#实现视觉定位的基础框架,与前面的python版、MFC版、Qt版一样,可供不同的开发者进行学习使用。 本文也是包括多模板算法匹配:基于形状、基于灰度、基于相关性、基于可变比例等。 编程环境:dotnet4.7 halcon20.05 IDE: VisualStudio 2022 本次项目的效果视频:

    2024年02月06日
    浏览(54)
  • 基于qt+halcon实现视觉定位模板匹配【附部分源码】

    本文主要实现基于qt5.3做一个视觉定位识别的功能,halcon版本使用的是halcon12.0,调用halcon的dll来实现二次开发,下边从头开始设置。 与前面的python版、MFC版、Qt版一样,可供不同的开发者进行学习使用。 编程环境:qt5.3 halcon12.0 IDE: VisualStudio 2010 本次项目的效果视频: 基于

    2024年01月24日
    浏览(46)
  • cesium加载显示点云及倾斜模型(3dtiles)

            在cesium加载并显示点云或者倾斜模型之前,需要将不同格式的数据转为3dtiles,具体参考倾斜、点云转3dtiles(osgb、las转3dtiles)切片         转换完成后就可以写代码将其加载到cesium地球上。         有时候加载完成并不能贴地显示,或者贴地显示的具体位置和底

    2024年04月23日
    浏览(27)
  • 点云数据做简单的平面的分割 三维场景中有平面,杯子,和其他物体 实现欧式聚类提取 对三维点云组成的场景进行分割

    点云分割是根据空间,几何和纹理等特征对点云进行划分,使得同一划分内的点云拥有相似的特征,点云的有效分割往往是许多应用的前提,例如逆向工作,CAD领域对零件的不同扫描表面进行分割,然后才能更好的进行空洞修复曲面重建,特征描述和提取,进而进行基于3D内

    2024年02月10日
    浏览(37)
  • Halcon 简单入门3D点云计算高度

    入门级别的学习,就是简单的计算一个高度差,其原理如下: 1、先选出上面一个面的点,然后计算出在一个坐标系想的均值高度 2、筛选出下面一个面的点,然后计算出这个平面上的点的均值高度 3、高度差 4、显示  

    2024年02月11日
    浏览(35)
  • Fast SAM与YOLOV8检测模型一起使用实现实例分割以及指定物体分割(有代码)

    Fast SAM与YOLOV8检测模型一起使用 VX 搜索”晓理紫“ 关注并回复yolov8+fastsam获取核心代码 晓理紫 实例分割数据集的获取要比检测数据的获取更加困难,在已有检测模型不想从新标注分割数据进行训练但是又想获取相关物体的mask信息以便从像素级别对物体进行操作,这时就可以

    2024年02月13日
    浏览(23)
  • [3D&Halcon] 3D鞋点胶的点云边界提取

    📢博客主页:https://loewen.blog.csdn.net 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 丶布布 原创,首发于 CSDN, 转载注明出处 🙉 📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨ 一. 边界提取的常规思路 3D鞋实物图如下所示: 鞋点胶的点云边界

    2024年02月15日
    浏览(101)
  • [Halcon&3D] 3D鞋点胶的点云边界提取

    📢博客主页:https://loewen.blog.csdn.net 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 丶布布 原创,首发于 CSDN, 转载注明出处 🙉 📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨ 一. 边界提取的常规思路 3D鞋实物图如下所示: 鞋点胶的点云边界

    2024年02月09日
    浏览(31)
  • Halcon3d 点云计算平面度

    2024年02月11日
    浏览(28)
  • 史上超全的Halcon常用3D算子:点云处理

    在计算机视觉和机器人领域,点云处理是一项重要的任务。Halcon作为一款强大的图像处理软件,提供了丰富的3D算子来进行点云数据的处理和分析。本文将介绍一些常见的Halcon 3D算子,并提供相应的源代码示例。 读取点云数据 点云数据通常以文件的形式存在,可以通过Halco

    2024年02月02日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包