Appearance
圆柱面缺陷检测
工程背景
测量背景
对于圆柱形物体,如电池、轴承、管材等,表面质量直接影响其性能和使用寿命。为了确保这些产品的高品质,必须对圆柱面进行严格的质量控制,特别是对外观缺陷(如划痕、凹陷、裂缝、气泡等)的检测。本项目旨在开发一种基于非接触式的圆柱面缺陷检测系统,通过旋转扫描技术将整个圆柱表面展开成一个平面图像,并将其划分为八个区域(片)进行详细检测。
相机选型
深视SR700
测量项
圆柱面表面缺陷
解决方案
AI-Vision首先对点云图进行预处理,接着分别将八片需要检测位置裁切出来进行表面检测。
设计思路
执行效果展示
工程结果展示
- 表面缺陷检测结果
项目流程
一、初始化
- 使用
lua语言脚本
,设置用于循环计数的全局变量
lua
SetIntVariable("Count", 0)
- 使用
加载点云
工具,加载需要处理的点云图。
二、预处理
使用
3D区域
工具,选择拟合平面的区域。使用
3D平面
工具,绑定3D区域
工具设置的区域,拟合平面并将其设置为零平面。
三、分别对不同片进行表面检测
选择
标记
工具,设置循环起点。使用
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)
使用
3D裁切
工具,绑定上一步lua脚本
工具输出变量box作为输入区域,裁切出要检测的圆柱片。使用
3D表面缺陷
工具,运行得到当前圆柱片凹陷或凸起缺陷的信息。使用
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
- 其余片处理逻辑和第一片相同