Skip to content

圓柱面缺陷檢測

工程背景

測量背景

對於圓柱形物體,如電池、軸承、管材等,表面質量直接影響其效能和使用壽命。為了確保這些產品的高品質,必須對圓柱面進行嚴格的質量控制,特別是對外觀缺陷(如劃痕、凹陷、裂縫、氣泡等)的檢測。本專案旨在開發一種基於非接觸式的圓柱面缺陷檢測系統,通過旋轉掃描技術將整個圓柱表面展開成一個平面圖像,並將其劃分為八個區域(片)進行詳細檢測。

相機選型

深視SR700

測量項

圓柱面表面缺陷

解決方案

Vision-Studio首先對點雲圖進行預處理,接著分別將八片需要檢測位置裁切出來進行表面檢測。

設計思路

本地圖片

執行效果展示

  • 工程結果展示

    • 表面缺陷檢測結果

    本地圖片

專案流程

一、初始化

  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. 其餘片處理邏輯和第一片相同

Vision Studio