视觉算法与成像

高反光工件怎么打光

高反光件的问题不在算法,在成像。工件表面像镜子一样把光源形状原封不动映到相机里,缺陷的那一点点灰度差就被淹没了。这篇按打光方式逐个讲清适用范围与代价。

高反光是什么问题,出现在哪些工况

高反光指工件表面以镜面反射为主、漫反射很弱。 常见的有抛光不锈钢、铝合金镜面件、电镀与阳极氧化壳体、玻璃盖板、 镜面注塑件、涂漆金属板,以及带油膜的加工件。 要检的通常是划痕、压伤、麻点、水纹、镀层缺陷与异色斑, 与背景的灰度差往往只有几个到十几个灰阶,属于弱信号检测。

困难来自物理:光源的形状与亮度被原样映射到成像面上, 于是一张图上同时出现过曝区与全黑区,缺陷落在其中就等于不存在。 敏洽 机器视觉检测软件 的做法是先定成像方案、再定算法组合,顺序不能颠倒。

实际会遇到的几个坑

1. 用普通环形光拍镜面件

环形光的灯珠会以一圈亮环直接映进画面,环内全黑、亮环过曝。 划痕只有恰好落在亮暗过渡带上才可见,换个摆放位置就消失。 判断方法:工件在视野里挪几个位置各拍一张, 同一缺陷可见性变化很大,说明成像方案不成立。

2. 只盯着算法调参,不动光

图已过曝还在调阈值加滤波是白费功夫——过曝像素被截断到 255, 信息是被物理丢弃的。 先看直方图有没有大片贴在 0 或 255,有就降曝光、换角度、加扩散板。 成像达标是算法的前置条件,可以写进验收条款。

3. 曲面工件用同轴光,中间一块死区

同轴光在平整镜面上很好:视野均匀发亮,划痕与凹坑成暗线。 但工件一有曲率,只有曲率中心那一小块能把光反射回相机,周边全暗—— 几何造成的现象,却会让灰度类算法误判成大面积异常。 曲面件应改用穹顶光或多角度低角度组合光。

4. 穹顶光的开孔造成中心暗斑

穹顶光(碗光)靠内壁漫射形成近全方位照明,是曲面反光件的常规解。 但顶部让相机看进去的开孔不发光,在镜面件上 映成一个暗圆斑,正好落在视野中心。 办法:相机略偏轴、缩小开孔配长焦,或把该区设为固定屏蔽区。

5. 偏振片的光损失没算进节拍

交叉偏振压反光很有效,适合膜下字符、涂层下基材、油膜金属面。 但两片交叉后透过率常只剩四分之一,于是要么提光源功率(发热)、 要么延长曝光(运动模糊)、要么加增益(噪声)。 偏振方案必须与节拍、光源功率、相机灵敏度一起算。

6. 样品阶段能过,产线上不稳定

产线上有夹持偏差、来料油污差异、环境光变化与光源衰减, 这些影响在镜面件上被反射特性放大。对策三条: 环境光屏蔽做实(加遮光罩); 定位算子先跑一遍消除摆放偏差(统一输出 Offset_X / Offset_Y / Angle_θ,ROI 跟着走); 亮度做成可校准项,留出衰减余量。

打光方式与硬件条件

打光方式适用表面与缺陷主要代价
同轴光平整镜面;划痕、压痕、凹坑表现为暗线曲面上有中心亮斑;机构空间要求
穹顶光(碗光)曲面反光件;表面斑点、异色、麻点顶部开孔映成暗斑;体积大
掠射(低角度)光方向性缺陷:划痕、拉伤、折痕、毛刺根部照明不均匀;缺陷方向与光向相关
暗场照明凸起异物、颗粒、边缘缺口平面区域全黑,只看突变结构
交叉偏振膜下字符、涂层下基材、油膜金属面光通量损失大,需补光或延长曝光
多角度分时打光需要区分表面缺陷与轮廓缺陷时节拍变长;需多次触发与图像合成
项目要求与说明
相机已适配 USB/UVC、大华、海康、度申,另有 Mock 虚拟相机用于离线开发与回放
触发硬件 IO、编码器、通讯软触发、连续采集四种;分时打光用 IO 触发配合光源控制器
环境光必须加遮光罩;镜面件对顶灯与窗户光远比常规工件敏感
算法组合对比度检测、划痕检测、频域分析、灰度差异、形态学处理;定位类算子先对齐
AI 补充缺陷形态不固定时用 YOLO 目标检测或异常检测(AutoEncoder / VAE / PatchCore)
运行环境Qt 6.9.2 + C++17 + OpenCV 4.x + ONNX Runtime;Windows 10/11 x64 与 Ubuntu 22.04 x64
客户准备相机与光源支架(按敏洽给的安装位与视野要求)、遮光罩、稳定的工件夹持

光源与镜头的具体型号敏洽可按需给推荐清单,采购与安装由客户执行。 先用样品试拍确认成像方案,再定硬件清单。

相关交付情况

高反光项目的交付重点在前期:敏洽一般先要工件样品(或高清照片加表面工艺与缺陷描述), 在内部做试拍,用几种打光方式各拍一组, 判断缺陷能不能稳定成像。这一步的结论直接决定可行性与报价。

交付包含成像方案、硬件选型建议清单、检测软件与参数配方管理、 接口文档(触发方式、IO 定义、通讯点表、结果格式)。 算法按模块授权,也可以只要 跨语言 SDK(mqvision.dll / libmqvision.so, 支持 C、C++、C#、Java JNI、Python,另有 Qt-free 版本)嵌进客户已有的上位机。 需要 AI 的场景,训练平台在客户本地运行,图片不出厂,模型导出为加密 .aim 包。

更多算法说明见 内置算法库, 交付案例见 案例中心。

常见问题

多数情况不是算法问题,是图上根本没有可用信号。镜面表面遵循反射定律,光源的形状和亮度会直接映到相机里,图上是一片过曝加一片全黑,缺陷落在过曝区就完全丢失。这种图无论换什么算法都没用。正确顺序是先改成像——换光源类型、换角度、加偏振或加扩散——把缺陷在图上变成人眼能看出的灰度差,再谈算法参数。
看工件表面是平的还是有曲率。平整镜面(抛光平板、镜面片材)适合同轴光,光路与相机光轴同向,整个视野亮度均匀,划痕与压痕表现为暗线。有曲率或者不规则起伏的表面(冲压凸包、电镀壳体)用穹顶光(碗光),它提供接近全方位的漫射照明,能压掉曲面上的高光条纹。代价是穹顶光的机械空间要求大,而且顶部开孔位置决定了会不会出现中心暗斑。
镜面反射光有较强的偏振特性,而漫反射光偏振弱。在光源和镜头前各加一片偏振片、互相交叉 90 度,可以显著削弱表面镜面反光,让下层或者表面下的信息透出来——典型场合是透明保护膜下的字符、涂层下的基材缺陷、带油膜的金属表面。代价是光通量损失明显(两片交叉后常剩下不到四分之一),需要更强的光源或者更长的曝光,节拍紧的产线要提前算进去。
三件事。一是把光源亮度、曝光、增益做成配方随型号切换,不要指望一套参数通吃;二是算法上优先用对比度检测与频域分析处理弱信号,划痕这类方向性缺陷配合掠射打光;三是判定逻辑放在上层——敏洽软件是 C++/C# 双进程架构,C++ 侧只输出原始算法数据(灰度差、面积、位置),OK/NG 阈值在 C# 侧按型号配置,现场调整不用重新编译算法。

有具体设备清单或工件样品,可以直接给判断

提供设备型号、PLC 品牌与需要采集的数据项,或提供被检工件照片与精度要求,敏洽可先给出可行性判断与硬件前置条件,再谈软件工作量与报价。