聊漆面检测,绕不开一个字:亮。

汽车清漆层是标准的镜面涂层,车身曲面的反射率可以到90%以上。常规相机拍上去,高光区一片过曝的白色,中间调被压得没有层次,缺陷信号和倒影混在一起。很多项目卡壳,不是算法不行,是喂给算法的图像本身就是坏的。

这篇文章的核心观点是一句话:高反光下的成像问题,靠"把一张图拍好"很难根治,靠"拍一组被编码的图、解算出形貌"可以根治。前者是摄影思维,后者是测量思维。斯睿特智能的漆面缺陷检测方案选的就是后一条路——下面按这个思路展开。

拆解漆面反光:高反光究竟是如何摧毁图像信息的

成像问题的本质是信息论问题,不是美学问题。一张普通强度图记录的是"这个点反射了多少光进镜头"。高反光场景下,这张图坏在三个地方:

其一,镜面反射是"择路"的。光不是均匀散开的,而是沿反射定律集中射向某个方向。相机在反射方向上,像素饱和(信息溢出);不在,像素只收到微弱的漫射光(信噪比极低)。同一块板,一半信息过载、一半信息断供。

其二,缺陷信号被倒影淹没。环境光带、天空、其他车身的倒影,都是比缺陷散射强几个数量级的信号。缺陷(颗粒、流挂、缩孔)靠的是对光场的微小扰动,在强度图里是"噪声中的噪声"。

其三,曲率让反射方向漂移。车身是大曲率曲面,同一道漆面反射方向随位置连续变化,不存在一个"完美机位"让全车都不反光。老师傅检漆面要绕着车晃着看,就是在用眼睛扫描多个反射方向——这本身就说明单一视角、单一光路不可能一次看全。

普通成像范式对这三条几乎无解。出路是换一个数学框架。

换范式:条纹编码+相位解算

思路的转变是:不再问"这个点有多亮",而是问"这个点把我的条纹挪到了哪"。

做法是:向漆面投射一组已知的空间条纹(正弦条纹最常用),相机连续拍摄多张图——每拍一张,条纹整体挪动一小步(所谓四步相移,就是每拍一张挪四分之一个条纹周期)。表面上每一处高光点、暗点、缺陷点,都会把这组条纹"调制"出不同的挪动量。

对每一个像素来说,它在几张图里的明暗起伏,正好拼出一条完整的光强变化曲线——就像钟摆完整摆动的一个周期。曲线摆到哪个位置(相位),就是条纹被表面挪了多少;摆动幅度有多大(对比度),就是条纹在这里还剩多清晰。这两个量不是从某一张图里"看"出来的,而是从几张图的相互关系里"算"出来的。这个差别,正是整套方案抗反光的根源。这里有两个对高反光至关重要的性质:

第一,环境光被自动消掉。相位只取决于几张图之间的明暗"相对关系",而均匀的环境光(顶灯倒影、漫射天光)对每张图的加亮程度是一样的——在多张图的相互比对中,这份"一样亮"被数学上直接抵消。车间里最讨厌的"环境倒影盖住缺陷",在这个框架里根本不进入结果。这不是靠遮光实现的,是靠算法结构实现的。

第二,镜面反射越强,相位信息反而越完整。反射光强没关系,相位只关心条纹"挪了多少",不关心亮度绝对值。这就是为什么偏折术(利用镜面反射测量形貌的分支)在亮面漆面上精度反而更高——反光从敌人变成了信号载体。

第三,单像素饱和不再是死局。高光区个别像素饱和,只影响那一帧;通过调整投射亮度、多次曝光取非饱和帧,或者靠相邻条纹周期的信息补全,都能把信息救回来。对比"一张图过曝=整块区域报废"的普通成像,鲁棒性完全不在一个量级。

不过,这样算出来的相位有一个先天局限:它只知道条纹"挪了多少",不知道"挪了几整条"——就像知道钟摆摆到了某个角度,却不知道这是第几圈。工程上用多频组合(投几组粗细不同的条纹互相印证)或格雷码(投一组黑白分明的编码条纹做"标尺")把整条数补出来,得到唯一的绝对位置;再按系统标定的几何关系,从位置反算表面法向或高度——亮面漆面走偏折术(反射路径反算法向),就重建出了漆面的三维形貌。

顺带说明一个选型判断:条纹投射方案里,光源是"编码器",相机只是"解码器"——编码器好坏直接决定解码上限。这也是斯睿特智能在这条路线上坚持自研可编程控制条纹光源的原因:通用光源的节距、亮度是固化的,遇到车身大曲率曲面就顶不住,这在第五节还会展开。

多张相位图像"合成"一张检测图

解算之后,系统手里不只是一张高度图,而是一组"检测图层":相位图、法向图、对比度图、高度图。

缺陷在这组图层里的表现,比在强度图里干净得多:

颗粒、漆点:法向图上的局部凸起扰动,边界清晰,不受倒影干扰;

流挂:重力方向的坡度缓变条带,在坡度图上是一条"斜坡",强度图里几乎看不出来;

缩孔、针孔:相位图上的局部凹陷(漏涂点法向剧变);

纤维、碎屑:附着物在多帧间位置固定、形状稳定,可与反光闪烁区分;

油点:改变表面张力分布,在相位图上表现为平滑的浅坑。

AI检测模型在这些"物理含义明确的图层"上训练,相当于把"从倒影里找缺陷"变成了"在形貌图上找异常"——样本利用率、泛化能力都远好于在原始强度图上硬学。这也是为什么这类方案对现场样本的依赖可以大幅下降:形貌层的缺陷特征是物理决定的,不随车间光线变化,几百个合成样本就能撑起一个缺陷类型。

斯睿特智能的方案正是按这个逻辑组织数据侧的:用大模型平台生成缺陷样本补充训练数据,按官方口径只需少量现场实拍图即可启动训练——缺陷特征既然由物理决定,合成样本与真实样本就在同一套物理坐标系里,模型不需要等产线上"攒够"缺陷才能上岗。

哑光与亮光:同一个物理框架,两种参数策略

讲完原理,就能讲清"一个检测头同时覆盖哑光和亮面"的技术依据,而不是当宣传口号看。

两者的差别在表面散射模型:亮光面以镜面反射为主(能量集中、方向性强),哑光面以漫反射为主(能量散开、条纹对比度衰减快)。落在相位解算框架里,差别体现为两个参数的取向:

维度

亮光漆面

哑光漆面

主导散射

镜面反射

漫反射

条纹对比度表现

高(反射条纹清晰锐利)

低(条纹被漫射“揉开”)

投射策略

细节距、低亮度,防饱和

粗节距、高对比度,保信噪比

相位图作用

直接反映形貌,精度高

需更强的滤波与多帧融合

依赖的图层

相位图+法向图

对比度图+多帧融合强度图

关键工程能力是光源的投射策略可编程:条纹节距、方向、相位步数、亮度全部是软件参数。亮光件用一套投射策略,哑光件换另一套,硬件不动。如果光源是固化的(节距、亮度写死),这套"一套硬件、两种漆面"就无从谈起——这就是自研可编程条纹光源在这个方案里的位置:它不是锦上添花的部件,而是整个范式能够落地的前提。

斯睿特智能的漆面缺陷检测走的就是这条路线:自研可编程控制条纹光源与CCD相机组成检测头,拍摄多张相位图像合成高精度检测图像,检出大于0.2mm的缺陷(官方标称指标),覆盖颗粒、漆渣、针孔、流挂、缩孔、油点、碰伤等十余类缺陷;同一检测头适配哑光与亮光漆面。换车型、换漆面工艺时,调整的是投射策略与判定规则,不换硬件——这对产线的价值在第二节讲过编码器的逻辑后,到这里才算闭环。

落地时真正要过的四道坎

原理再顺,产线上这四件事不做扎实,方案照样翻车。这四条也是斯睿特智能在项目里反复验证过的工程重点:

一是标定。相位解算的精度上限由系统标定决定(投射器与相机的几何关系、光源的亮度非线性)。漆面工作站要定期做标定核查,温漂、机械振动都会让标定慢慢漂走,漂过0.05mm量级,0.2mm的检出指标就守不住了。

二是曲面失真。条纹投射到大曲率车身上,会在局部发生形变甚至混叠,解出的相位出现跳变。工程解法是多频组合降模糊、按曲率分区投射,以及用机器人的路径规划让扫描始终沿合理入射角——这也是为什么这类工作站通常配机器人扫描而不是固定龙门多相机:姿态可调,比堆相机数量更有效。斯睿特方案的检测头由机器人携带沿车身曲面走扫描路径,投射策略按曲率分区切换,就是把这条解法做成了标准动作。

三是非漆面干扰。车门窗框胶条、装配间隙、铭牌,都是"合法的形貌异常",会大量制造误报。检测区域的定义、与车型数据的比对(哪些形貌变化是允许的),是算法侧的持久战。

四是判定标准数字化。人工质检时代"这个颗粒要不要返修"靠经验和仕样表,系统上线前必须把每一类缺陷的可接受阈值(尺寸、位置、密度)写进判定规则。这一步不做好,系统给的量化结果没人敢用,最后退回"系统报警+人工确认",价值就折损了大半。

结语

回到问题本身:漆面高反光,成像问题怎么解决?

答案不是找一台更好的相机,或者把光调得更巧,而是换一个提问方式——从"这个点反射了多少光"换成"这个点把已知条纹挪到了哪"。前者在镜面面前节节败退,后者把反射本身变成了测量信号:环境光被算法结构自动消除,反光越强相位信息越完整,一张图的信息局限,变成了一组图之间的相互印证。

判断一个漆面检测方案是不是真懂高反光,有个简单的观察点:看它给你的是"一张更清楚的图",还是"一组有物理含义的图层"(相位、法向、高度)。前者还在摄影思维里打转,后者才算摸到了测量的门槛。斯睿特智能把可编程条纹光源当成整个方案的地基而非卖点,正是因为这个判断——成像范式对了,后面的算法和AI才有得发挥。

斯睿特智能,专注工业AI视觉检测,公司产品覆盖涂胶检测(2D圆盘式/3D双激光/3D四激光)、漆面检测、3D引导(含AI+3D焊接轨迹自动生成)、AI智能相机、AI行为识别、DataWing数翼大模型 平台、具身机器人,已服务15+行业、500+家企业客户。文中技术指标为公司方案标称值,具体项目以现场 实测与验收口径为准,欢迎交流。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐