做机器视觉外观检测这行快十年了,说真的,最初以为就是选个相机、配个镜头,然后写点代码。直到在客户现场被现实抽了一巴掌,才发现每个环节都是坑。今天不聊教科书上的理论,就说说我踩过的雷,以及那些图纸上画不出来的经验。
相机选型:别被像素数忽悠了
很多刚入门的朋友一上来就问“我要多少万像素的相机?”。这个问题本身就是错的。分辨率不是唯一指标,甚至不是最重要的。你的检测精度要求决定了最小像素尺寸,而像素尺寸又跟传感器靶面、镜头、视场角纠缠在一起。
举个实际例子。比如检测一个50mm×50mm的工件表面,要求发现0.1mm的划痕。理论上,你需要至少1000×1000个像素才能让一个缺陷对应一个像素,但实际工程上,单个缺陷至少要3×3个像素才不敢漏检,还要考虑边缘抖动——所以我通常会按5倍来设计。那就要5000×5000,也就是2500万像素。别觉得夸张,上次有个客户非要用1200万像素省成本,后来漏检率压了半天也下不来,最后乖乖换了5000万的。
关键点:分辨率 = 视野 / 最小特征尺寸 × 安全系数(常常取3~5)。这个公式简单,但几乎没人认真算过。
还有全局快门和卷帘快门的区别。检测高速运动的工件,必须用全局快门,不然图像会变形。记得有一次我忽略了这个问题,用了个卷帘快门相机拍流水线上的瓶盖,拍出来的瓶盖是歪的,看起来像椭圆的。客户以为我镜头没装好,其实原理上就错了。

光源设计:被低估的决定性因素
如果让我排优先级,光源比相机重要十倍。真的,不夸张。一个糟糕的光源,再好的相机也白搭,而一个巧妙的光源,能让最普通的相机看到奇迹。
很多人以为照明就是“照亮”,完全是两码事。缺陷的类型决定了光的照射方式:金属表面的划痕必须用低角度光,让划痕产生阴影;透明瓶子的杂质用背光,让杂质形成暗点;高反光表面的凹坑要用半球形光源或偏振光来消除反射眩光。
我在现场调光的时候,经常拿着手电筒反复琢磨角度。一次遇到一个精密陶瓷表面微裂纹检测,裂纹太浅,怎么都拍不出来。后来试了红外波段的同轴光,才把裂纹的轮廓勾出来。光源的波长、色温、方向、均匀性,每一个参数都能写一篇论文。
推荐大家在设计初期就预留光源调节空间,包括光源支架的角度可调、高度可调,甚至多种光源切换。不然到现场,你想调个角度都要动个钻头。

机构配合与震动:视觉系统的隐形杀手
这部分是机械工程师的盲区,也是最容易背锅的地方。相机的安装支架、被测件的运动机构、地板的震动,都会直接影响成像稳定性。哪怕相机分辨率再高,如果固定不牢,图像每帧都在晃,算法连个鬼都找不出来。
我见过最离谱的一次,客户把相机直接装在了一个气动机构的旁边,结果每次气缸动作,相机就跟着抖,拍出来的图像全是运动模糊。后来加了个橡胶减震垫,再换了个支架结构,模糊的问题瞬间消失。就这点改动,甲方还觉得我们技术不行,哈哈。
设计时要注意:相机中心要尽量与机构的重心重合,减少悬臂;支架强度要比你预想的高一个等级,钢的就是比铝的好;还有,相机和光源必须是同一个刚性整体,不能各自固定在不同位置,否则温度变化或震动会让相对位置漂移。
另外,触发信号的同步也至关重要。飞拍模式下,编码器信号必须与相机曝光严格同步,否则位置偏差会导致图像错位。这里有个经验:用差分信号,别用单端信号,抗干扰能力天差地别。
软件算法与硬件的博弈

算法这块,我本身不是专业搞图像的,但跟算法同事打了不少交道。传统图像处理(阈值、边缘、形态学)稳定可靠,但对于复杂纹理或微小缺陷,深度学习是个更省事的方向——然而它需要海量样本和GPU算力,而且推理时间不好控制。
我见过一个项目,用传统算法做了半年都没解决,换了深度学习,一周就突破了。但另一边的代价是,训练需要2000张缺陷图片,客户根本提供不出来,最后只能合成数据。所以算法选型真的得结合数据量和实时性来权衡。
记住,硬件设计要留有余量,包括计算单元(工控机)的CPU/GPU能力,以及网络带宽。曾经有一个案例,因为相机用GigE接口,但工控机网卡是百兆的,导致帧率上不去。换了个千兆网卡,一切正常。这种低级错误,图纸上根本看不出来。
结语

机器视觉外观检测,说白了,就是把光学、机械、电子、算法糅在一起。任何一环松懈,最终都是漏检率和误报率高到怀疑人生。我这些话都是实践出的经验,未必全对,但希望你在做设计时,能多往这些细节上想一想。
最后送一句我常跟刚入行的人说的话:先学会用眼睛观察,再想着用机器替代。