Skip to content

圆柱面缺陷检测

工程背景

测量背景

对于圆柱形物体,如电池、轴承、管材等,表面质量直接影响其性能和使用寿命。为了确保这些产品的高品质,必须对圆柱面进行严格的质量控制,特别是对外观缺陷(如划痕、凹陷、裂缝、气泡等)的检测。本项目旨在开发一种基于非接触式的圆柱面缺陷检测系统,通过旋转扫描技术将整个圆柱表面展开成一个平面图像,并将其划分为八个区域(片)进行详细检测。

相机选型

深视SR700

测量项

圆柱面表面缺陷

解决方案

AI-Vision首先对点云图进行预处理,接着分别将八片需要检测位置裁切出来进行表面检测。

设计思路

本地图片

执行效果展示

  • 工程结果展示

    • 表面缺陷检测结果

    本地图片

项目流程

一、初始化

  1. 使用lua语言脚本,设置用于循环计数的全局变量
lua
SetIntVariable("Count", 0)
  1. 使用加载点云工具,加载需要处理的点云图。 本地图片

二、预处理

  1. 使用3D区域工具,选择拟合平面的区域。 本地图片

  2. 使用3D平面工具,绑定3D区域工具设置的区域,拟合平面并将其设置为零平面。

本地图片

三、分别对不同片进行表面检测

  1. 选择标记工具,设置循环起点。

  2. 使用lua脚本工具,计算需要裁切的圆柱片区域并推送box

lua
x = 23.5

sx = (x + count * 10) - 5
sy = 0
sz = -5

ex = (x + count * 10) + 3.6
ey = 26
ez = 5

SetBox("box", sx,sy,sz,ex,ey,ez)
  1. 使用3D裁切工具,绑定上一步lua脚本工具输出变量box作为输入区域,裁切出要检测的圆柱片。

    本地图片

  2. 使用3D表面缺陷工具,运行得到当前圆柱片凹陷或凸起缺陷的信息。

    本地图片

  3. 使用Lua脚本工具

  • 绑定上一步3D表面缺陷工具输出变量缺陷信息

  • 编辑lua脚本将信息格式转换并显示到对应IM窗口。

  • 判断循环是否结束

经验

string.format 用于格式化字符串 %.nf表示将浮点数格式化为保留 n 位小数。

pi = 3.14159 str = string.format("Pi is approximately %.3f", pi) print(str) -- 输出: Pi is approximately 3.141

lua
--缺陷数量
defectcount = #defect_area

--循环显示缺陷高度
for i=1, defectcount, 1 do
    --获取缺陷中心位置
    x = defect_centroid_x[i]
    y = defect_centroid_y[i]
    
    --当前缺陷信息,并保留3位小数
    height = string.format("%.3f", defect_height[i])
    area = string.format("%.3f", defect_area[i])
    max_width = string.format("%.3f", defect_bbox_max_width[i])
    
    --绘制在IM1上
    DrawText3D(1, "green", x, y, 0, 15, "凹陷" .. i )
    DrawText3D(1, "green", x, y - 1.5, 0, 15, "高度:" .. height)
    DrawText3D(1, "green", x, y - 3, 0, 15, "面积:" .. area)
    DrawText3D(1, "green", x, y - 4.5, 0, 15, "最大宽度:" .. max_width)
end


if count == 7 then
    Jump("End")
else
    SetIntVariable("Count", count + 1)
    Jump("Start")
end

本地图片

  1. 其余片处理逻辑和第一片相同

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