Skip to content

3D转2D模板匹配

工程背景

测量背景

为了确保电池的质量和安全性,并优化其性能,制造商需要严格控制生产过程中的每一个环节,包括电池的尺寸精度。电池的高度宽度3D检测旨在通过2D结合3D检测工具,实现对电池物理尺寸的精确测量。

相机选型

海伯森LCF

测量项

电池长宽及高度

解决方案

AI-Vision首先将点云图转为深度图,对深度图进行模板创建与模板匹配确认样品位置,接着用3d工具对样品宽高进行测量。

设计思路

本地图片

执行效果展示

  • 工程结果展示

    • 宽度测量结果

    本地图片

    • 高度测量结果

    本地图片

项目流程

一、初始化

[00] 使用Lua脚本工具,全局变量初始化。

lua

SetVariable("count",1)

[01] 使用加载点云工具,加载需要处理的点云图。

本地图片

二、获取样品位置角度信息

[02] 使用点云转深度图工具,将3D点云图转为深度图。

本地图片 [03] 使用加载图片工具,加载深度图。

[04] 使用2D模板创建工具,创建2D模板。

本地图片

[05] 使用2D图像模板匹配工具,根据创建的模板对深度图进行模板匹配。

本地图片

[06] 使用Lua脚本工具,获取模板匹配结果:所有样品位置角度信息。数据输出到全局变量。

三、位置调整变换

[07] 使用标记工具,标记循环初始。

[08] 使用Lua脚本工具,获取当前需要测量的样品位置及角度。

lua

x = GetVariable("positionX")
y = GetVariable("positionY")
a = GetVariable("angles")
counts = GetVariable("counts")
count = GetVariable("count")

-- 获取当前需要测量的样品 XY位置 角度
if count < counts or count == counts then
    X = x[count]
    Y = y[count]
    Angle = a[count]
    SetVariable("jiaodu",Angle)
end

if Angle == 0 then
    linex = 0
    liney = 1
else
    linex = math.sin(Angle)
    liney = math.cos(Angle)
end

SetVariable("NowX",X)
SetVariable("NowY",Y)
SetVariable("linex",linex)
SetVariable("liney",liney)

[09] 使用3D位置调整工具,调整定位到当前待测样品XY位置。

本地图片

[10] 使用3D变换工具,根据待测样品模板匹配的角度旋转点云。

本地图片

四、长度宽度测量

[11-14] 使用方形探针工具,找到样品的四条边。

本地图片

[15-18] 使用3D几何交点工具,根据四条边找到四个交点。

本地图片

[19-20] 使用3D距离工具,测量样品长宽距离。

本地图片

五、高度测量

[21-22] 使用3D区域工具,选择拟合平面的区域。

本地图片

[23] 使用3D平面工具,根据上个工具选择的区域,拟合平面并将其设置为零平面。

[24] 使用3D高度工具,测量样品上层到底面的距离。

本地图片

[25] 使用3D高度工具,测量样品上层到样品下层的距离。

本地图片

[26] 使用Lua脚本工具,循环标记全局变量值+1。

lua
count = GetVariable("count")
counts = GetVariable("counts")
if count < counts then
    Jump("ReStart")
    SetVariable("count",count+1)
else
    Jump("End")
end

[27] 使用标记工具,创建循环停止标记位。

AI-Vision,让3D测量更简单