基于Halcon深度图的曲面圆柱凹坑缺陷处理方法

一、概述

可以选用海康机器人或深视智能的3D轮廓仪完成曲面圆柱表面缺陷的扫描,获取一张平铺的3D深度图进行处理。首先对采集的深度图通过高度平滑拟合出基准面差分提取下凹区域,再结合像素分辨率换算实际面积。

3D轮廓仪输出的数据包括点云(X/Y/Z)、深度图、亮度图三种数据,在做 "凹陷面积 + 深度" 定量检测(轮对颈这种金属圆柱面),优先用深度图;精度要求极高、要做圆柱展开 / 三维拟合时,再用原始点云;亮度图只适合辅助定位、区分油污 / 脏污,不能算面积和深度。

二、实现过程

  1. 基准面拟合

曲面圆柱即使经过机械加工,其表面也会存在微小的曲线起伏或安装倾斜。不能直接用一个固定常数做全局阈值分割。代码中采用 mean_image(核大小需大于最大缺陷尺寸的2倍)来提取背景基准线,确保只提取局部下凹

2.物理单位转换

3D轮廓仪输出的图像,其像素距离与实际物理尺寸存在比例关系:

X方向分辨率:通常与轮对旋转编码器的触发频率、轴颈直径相关。

Y方向分辨率:取决于3D激光相机的线激光X轴点间隔。

必须确保 PixelAreaSize(单像素面积)计算准确,否则会导致面积筛选误判。

3.深度与面积的双重过滤

算法中通过 threshold (ImageDiff, ..., 0.1, 99999) 先行过滤了深度不足 0.1mm (举例数据)的微小波动,随后通过面积元组 过滤 AreaReal >= 60.0(举例数值) 剔除了面积不达标的区域。

说明:这里计算面积时,需根据基准面的Z值,需先求出对应的XY像素坐标值之间的距离信息来求出面积。

三、逻辑代码

通过读取深度图图像的数据,实现的Halcon代码缺陷检测的代码如下所示

bash 复制代码
* 1. 读取或引入展开后的深度图像 (Z图)
read_image (ImageDepth, 'wheel_journal_depth_image.tif')

* 2. 预处理:去除无效点(噪点),填充缺失值
* 假设无效值为0,将其替换为周围均值或背景高度
threshold (ImageDepth, RegionValid, 0.1, 99999)
reduce_domain (ImageDepth, RegionValid, ImageReduced)

* 3. 拟合基准面(消除轴颈整体的微小倾斜或圆柱度偏差)
* 使用大核均值滤波或中值滤波模拟无缺陷的理想表面
mean_image (ImageReduced, ImageBackground, 151, 151)

* 4. 图像差分:寻找下凹区域
* 基准面减去原始深度图,得到正值代表下凹深度的图像
sub_image (ImageBackground, ImageReduced, ImageDiff, 1.0, 0)

* 5. 深度阈值分割:提取深度超过 0.1 毫米的区域
* 假设深度图的灰度值单位就是毫米(如果是数据精度需乘以算子系数)
ThresholdDepth := 0.1
threshold (ImageDiff, RegionDefectsRaw, ThresholdDepth, 99999)

* 6. 区域连通性分析与形态学去噪
connection (RegionDefectsRaw, ConnectedDefects)
* 使用闭运算消除内部空洞,开运算消除毛刺
closing_circle (ConnectedDefects, RegionClosed, 3.5)
connection (RegionClosed, ConnectedDefectsFinal)

* 7. 计算每个缺陷的实际物理面积并筛选
* ⚠️ 请根据相机实际标定参数修改以下两个像素分辨率(单位:毫米/像素)
PixelSizeX := 0.05  * X方向(圆周展开方向)每个像素代表的毫米数
PixelSizeY := 0.05  * Y方向(轴向)每个像素代表的毫米数
PixelAreaSize := PixelSizeX * PixelSizeY * 1.0

* 计算每个连通域的像素面积
area_center (ConnectedDefectsFinal, AreaPixels, Row, Column)

* 将像素面积转换为物理面积(平方毫米)
AreaReal := AreaPixels * PixelAreaSize

* 筛选出面积超过 60 平方毫米的缺陷
MinAreaMM2 := 60.0
tuple_find (AreaReal, expression(AreaReal >= MinAreaMM2), Indices)

if (size_of_tuple(Indices) > 0 and Indices != -1)
    select_obj (ConnectedDefectsFinal, SelectedDefects, Indices + 1)
    * SelectedDefects 即为最终输出的达标凹陷缺陷区域
else
    gen_empty_region (SelectedDefects)
endif
相关推荐
Gigavision1 天前
基于BUAA-MIHR数据集的噪声解耦对比学习算法
人工智能·python·深度学习·算法
红海云1 天前
Kimi 双端接入 CloudBase 的工程价值
人工智能·语言模型
计算机编程-吉哥1 天前
YOLO26 vs YOLO11 vs YOLOv8:深度学习咖啡果实成熟度分割系统【计算机毕业设计选题推荐】
人工智能·python·深度学习·yolo·django·毕业设计
冬奇Lab1 天前
一年前没启动 AI 提效的团队,今年在付什么钱?
人工智能
NeoGressAI外贸数字化1 天前
IOR新规9月18日生效:Form 5106六项资料自查清单
人工智能
根目录下的猫1 天前
RK3588适配的轻量级AI模型推荐
人工智能·后端·python·目标检测
weixin_6681 天前
Cursor 插件使用说明:Linear 与 Figma
人工智能·cursor
wshzd1 天前
LLM之Agent(六十八)|PI(七)构建测试与开发流程
人工智能
H0311169851 天前
App竞品数据平台功能梳理:月狐数据、七麦数据、点点数据
人工智能
YOLO数据集集合1 天前
高铁轨道紧固件损坏检测数据集 | 高铁巡检 紧固件缺陷 轨道安全9093期
人工智能·目标检测·计算机视觉·目标跟踪·轨道·铁轨紧固件·铁轨