51Halcon机器视觉

 找回密码
 会员注册

QQ登录

只需一步,快速开始

查看: 165|回复: 1
收起左侧

[资料] Halcon中的3D技术

[复制链接]
  • TA的每日心情
    耍酷
    昨天 09:20
  • 签到天数: 57 天

    连续签到: 2 天

    [LV.5]常住居民I

    20

    主题

    85

    帖子

    661

    积分

    Rank: 3

    积分
    661
    发表于 2019-10-8 14:50:37 | 显示全部楼层 |阅读模式

    部门助理 |主题 20|帖子 85|积分 661

    51Halcon诚邀您的加入,专注于机器视觉开发与应用技术,我们一直都在努力!

    您需要 登录 才可以下载或查看,没有帐号?会员注册

    x
    对于检测一些产品的3d信息,我们通过3d相机能获取其点云数据或一张带有高度信息的图像。
    这边我们用SmartRay相机,获取到一张16位的png图像。实际上就是一张高度信息图。
    这边X、Y缩放比例为0.019,Z方向为0.0016,意思就是你xyz乘这系数就是相对距离。
    20190704100531352.png
    在那个相机软件中能看到如上的3d图。
    我们获取到的是一张16位的PNG图,如下
    20190704100641664.png
    Halcon中建立一个3d模型,需要3张图像,每张图的灰度值分别代表X、Y、Z。
    现在我们有的是上面这张Z方向的还没缩放的图。转乘real的,缩放就能得到Z。X、Y图自己创建就行。这边讲原点设在图像左上角。
    halcon代码:
    1. convert_image_type (Zmap112653, ImageConverted, 'real')
    2. get_image_size (ImageConverted, Width, Height)
    3. gen_image_surface_first_order (ImageSurface, 'real', 1, 0, 0, 0, 0, Width, Height)
    4. gen_image_surface_first_order (ImageSurface1, 'real', 0, 1, 0, 0, 0, Width, Height)
    5. scale_image (ImageSurface, X, 0.019, 0)
    6. scale_image (ImageSurface1, Y, 0.019, 0)
    7. scale_image (ImageConverted, Z, 0.0016, 0)
    8. compose3 (X, Y, Z, MultiChannelImage)
    9. xyz_to_object_model_3d (X, Y, Z, ObjectModel3D)
    复制代码

    好了,我们就得到这个3d模型了。
    下面举个应用的例子:测量两平面的夹角
    20190704101403273.png
    如上图,我们要测量我画的两块红框位置,它们两平面的夹角。在3D模型中也能看出,这个差不多90度的样子。
    我们需要分别拟合这两块平面,然后得到其单位法向量,向量点乘得到这个角的cos,就知道夹角了。
    当然拟合平面是注意去躁,这个成像上面有很多丢失点,这边在Z图上一个阈值分割就能把它们去掉,得到有效的region来拟合平面。
    halcon代码:
    我们得到了那个有效的红色框region(排除了其中的躁点区域)RegionIntersection
    1. reduce_domain (X, RegionIntersection, ImageReduced3)
    2. xyz_to_object_model_3d (ImageReduced3, Y, Z, ObjectModel3D1)
    3. fit_primitives_object_model_3d (ObjectModel3D1, ['primitive_type','fitting_algorithm'], ['plane','least_squares_tukey'], ObjectModel3DOut)
    4. get_object_model_3d_params (ObjectModel3DOut, 'primitive_parameter', ParamValue)
    5. get_object_model_3d_params (ObjectModel3DOut, 'primitive_rms', ParamValue4)
    复制代码

    解释下这段代码:
    reduce了X,然后生成一个3D模型ObjectModel3D1,这样这个3D模型就只有那个用来拟合的平面部分,
    fit_primitives_object_model_3d 这个算子用来拟合的,这边填入了一些参数拟合类型:plane,算法:最小二乘法。然后我们
    得到一个模型:ObjectModel3DOut。这是那个拟合出来的3D平面模型。
    然后我们通过get_object_model_3d_params,从拟合的模型中获取信息
    这个primitive_parameter获取这平面的单位法向量和这个平面距离原点的距离,4个参数。[x,y,z,D]
    primitive_rms就是rms喽。
    照着这么做,把另外一个平面搞出来,就能求两平面的夹角了。

    至于其他应用,如找两平面的交线,点到平面的距离,就是一些向量运算。

    原文链接:https://blog.csdn.net/Isaac320/article/details/94596144

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

    该用户从未签到

    0

    主题

    2

    帖子

    33

    积分

    Rank: 1

    积分
    33
    发表于 2019-10-9 22:50:38 | 显示全部楼层

    试用员工 |主题 0|帖子 2|积分 33

    没看懂怎么做的,可以具体写一下?怎么获得想要的两个平面?我想计算两个平面的距离如何计算?

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

    您需要登录后才可以回帖 会员登录 | 会员注册

    本版积分规则

    51Halcon会员技术交流会员技术交流 | 51Halcon官方客服咨询官方客服咨询 | Halcon切换助手使用反馈切换助手使用反馈 | 51Halcon论坛管理团队论坛管理团队

    申请友链| 小黑屋| 手机版| Archiver|  

    粤ICP备15095995号-2 粤公网安备44030602000670号

    Powered by 51Halcon机器视觉 X3.4 Licensed© 2015-2019 Comsenz Inc.

    快速回复 返回顶部 返回列表