Halcon视觉之家 - 51Halcon专注于机器视觉技术

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,微信登录

查看: 6600|回复: 5

[LMI] Halcon中的3D技术

[复制链接]
  • TA的每日心情
    奋斗
    2021-9-30 17:29
  • 签到天数: 114 天

    连续签到: 1 天

    [LV.6]常住居民II

    36

    主题

    145

    帖子

    4512

    积分

    Rank: 7Rank: 7Rank: 7

    积分
    4512

    切换助手验证会员

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

    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

    该用户从未签到

    0

    主题

    1

    帖子

    25

    积分

    Rank: 1

    积分
    25
    发表于 2019-10-9 22:50:38 | 显示全部楼层
    没看懂怎么做的,可以具体写一下?怎么获得想要的两个平面?我想计算两个平面的距离如何计算?

    该用户从未签到

    0

    主题

    11

    帖子

    22

    积分

    Rank: 1

    积分
    22
    发表于 2020-10-27 17:16:36 | 显示全部楼层
    Mark一下,原图吗,Halcon直接导入你这个png文件可以获得这个z的值吗
  • TA的每日心情

    2021-5-20 08:48
  • 签到天数: 48 天

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    16

    帖子

    65

    积分

    Rank: 1

    积分
    65
    发表于 2021-1-19 09:52:30 | 显示全部楼层
    请问向量之间的运算相关算子在哪里找呢,没找到
  • TA的每日心情

    2021-1-24 19:22
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    0

    主题

    60

    帖子

    90

    积分

    Rank: 1

    积分
    90

    切换助手验证会员

    发表于 2021-1-24 18:28:19 | 显示全部楼层
    赞扬大神

    该用户从未签到

    0

    主题

    2

    帖子

    6

    积分

    Rank: 1

    积分
    6
    发表于 2021-2-2 16:04:52 | 显示全部楼层
    不错,受教了
    您需要登录后才可以回帖 登录 | 会员注册

    本版积分规则

    视觉培训招生

    建议您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流浏览器浏览本网站

    51Halcon会员技术交流会员技术交流 | 51Halcon官方客服咨询官方客服咨询 | Halcon切换助手使用反馈切换助手使用

    算子查询| 申请友链| 小黑屋| 手机版| Archiver|

    © 2015-2021 51Halcon机器视觉  X3.4  粤ICP备15095995号 粤公网安备44030602000670号

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