简介:《工业机器视觉缺陷检测工作小结》PPT面向刚接触工业视觉检测的工程师与制造现场技术人员,针对网上讲义零散、缺少系统梳理的问题,把入门知识与实测经验整理成一份可汇报、可复用的材料。内容先讲视觉系统三大组成——图像采集、图像处理与运动控制,再拆解相机芯片与传感器分类、GigE、USB、CameraLink等数据接口性能对比、镜头光圈与聚焦调节、光源选型,并给出对比度、均匀性、真实性三条图像质量判据。后半部分转入实践:线扫一拖二接线验收、PL与水冷激光测试、25W/808nm亮源激光及隐裂成像、海康黑白线阵相机花篮测试、13fm镜头拍摄钙钛矿电池片,以及石墨舟、石英舟、AI项目与破片问题的阶段小结,可当作缺陷检测项目的排错与汇报模板参考。压缩包内含1个pptx,约9.76MB,已有979人学习。
1. 缺陷检测的胜负手不在算法:一张对比度不足的图,后面全是徒劳
工业机器视觉缺陷检测里最反直觉的一条经验是:产线上误报不断,八成原因在于送进算法的那张图从一开始就不该被送进去,算法本身并没有问题。很多人接手检测工位时,第一反应是调阈值、换算子、上模型,却很少有人回头问一句:这个缺陷在传感器上到底留下了几个灰度级的差异?如果目标与背景只差五个灰度,任何分割算法都只能靠运气,误报和漏检会永远同时高企。这篇文章要拆的就是这条从光子到判定结果的完整链路:光源怎么制造对比度,镜头和相机怎么把对比度保住,接口和时序怎么保证它不丢行,算法最后怎么在一个本来就很勉强的信噪比上做判定。搞懂这条链路,你看到的就不再是一堆选型参数表,而是一组互相牵制的约束。
2. 成像链路:光源如何把缺陷翻译成灰度差
2.1 三段式系统里,采集段为什么是第一性原理
典型的机器视觉系统被拆成三块:图像采集、图像处理、运动控制。教科书式的讲法是并列的三块,实际工程里它们是一条单向的漏斗——采集段决定了信息量的上限,后面每一级处理都只能减少信息,不能凭空造出信息。图像处理里所有的滤波、增强、分割,本质都是在已有的灰度分布上做重排;如果缺陷和背景在原始图像上就是同一片均匀灰度,任何增强都只是把噪声一起放大。
所以硬件选型的正确顺序是倒着来的:先回答“这个缺陷在物理上表现成什么”——是几何形变(缺角、崩边、孔洞),是表面散射特性变化(划痕、脏污、麻点),还是内部结构异常(隐裂、断栅)——再定光源怎么把这种差异转成灰度差,再定镜头要多大放大倍率才够分辨,再算相机需要多少像素和行频,最后才是算法用什么形态去判。很多项目翻车都翻在第一步:拿着一张别人调好的图去选算法,却没人说得清那张图里的对比度是谁给的。
这个顺序也解释了为什么同一套算法换个工位就不灵。算法适应的从来不是“缺陷”这个概念,而是某一种特定的灰度分布形态;光源一换,分布形态就变了,算法自然失效。把光源当成系统的一部分而不是配件,是这条链路上最便宜也最有效的一次认知升级。
2.2 明场、暗场、背光:把缺陷翻译成灰度差的三种语法
光源的作用不是“照亮”,是“制造对比度”。同一个缺陷在不同照明几何下可能几乎不可见,也可能亮得像灯泡,区别只在于光打到缺陷上之后往哪个方向散射。
明场照明(正面直射或环形光)适合检测吸收型、颜色型差异,比如印刷字符缺笔、镀膜色差、标签错位。它的逻辑是“反射回来的光多就是亮的”,所以对表面平整度不敏感,对反光率差异敏感。
暗场照明是把光源放到低角度,让镜面反射的光不进镜头,只有被缺陷面散射出来的光才进得去。这一招对付划痕、裂纹、毛刺、异物这类“破坏了表面连续性”的缺陷极其有效,因为正常区域把光镜面反射走了,缺陷区域把光散射进镜头,形成一个亮特征压在暗背景上。光伏电池片的隐裂检测在光学上就是典型的暗场问题——裂纹面是一个粗糙的散射面,正打光几乎看不见,低角度侧打光立刻显现。
背光照明走的是另一条路:把光源放在被测物背面,物体遮挡的地方就是黑的,形成剪影。它不关心表面纹理,只关心轮廓和透光率,所以破片、缺角、孔洞、异物遮挡这类几何缺陷在背光下是最干净的。缺点是它丢掉了所有表面信息,正面划伤在背光下完全不可见。
还有一类常被忽视的做法是让光源结构去匹配被测物的纹理周期。当背景是规则的栅线、网版、格栅(电池片的主栅细栅、载具的槽位、丝印网版都属于这一类),用低角度条形光沿纹理方向打,可以让规则纹理的反射趋于一致、缺陷处打破一致性,等于在光学层面先做了一次“背景抑制”,比后期在频域里硬滤要干净得多。
提示:选光源的时候,先用手电筒在暗室里从各个角度扫一遍样品,找到缺陷最“跳”的那个角度,再去选对应的光源形态。这比翻光源厂家的选型手册快得多。
2.3 三个可量化验收指标:对比度、均匀性、真实性
一幅能交给算法的好图,可以被拆成三个可以量化验收的指标,这也是那份工作小结里少数可以直接抄进验收单的内容。
对比度要求目标与背景的灰度均值差至少在 30 以上(8bit,满量程 255,约 12%)。这个数字不是随便定的:工业现场的光源衰减、镜头渐晕、传感器噪声加在一起,通常会吃掉 10 个左右的灰度波动,留 30 的间距才能保证阈值分割有稳定的余量。判断方法很简单,在目标区域和背景区域各框一个 ROI,算均值差。
均匀性要求整幅图的亮度分布不要出现大起大落,或者即使不均匀,灰度差也不能影响到分割阈值的一致性。线扫图像尤其要注意这一点,因为线扫是逐行拼接的,任何一列增益偏高,整幅图上都会出现一条纵向亮带,被算法当成划痕。
真实性是三个里最容易被忽略的:颜色要真实,亮度要适中,不能过曝。传感器一旦饱和,该像素的灰度就卡在 255,区域内部的所有细节被削平,而缺陷的边缘信息恰恰藏在这些细节里。工程上的经验阈值是饱和像素占比不超过 1%,超过就说明曝光或光圈给多了。
import numpy as np def roi_quality(img, fg_mask): """img: 单通道 uint8 图;fg_mask: 目标(缺陷候选)区域的布尔掩膜""" fg = img[fg_mask] bg = img[~fg_mask] # 1) 对比度:均值差绝对值,工程要求 >= 30 contrast = abs(float(bg.mean()) - float(fg.mean())) # 2) 均匀性:切成 8x8 块求块均值,极差/全图均值,经验阈值 < 0.15 h, w = img.shape blocks = img[:h // 8 * 8, :w // 8 * 8].reshape(8, h // 8, 8, w // 8).mean(axis=(1, 3)) uniformity = float(blocks.max() - blocks.min()) / max(float(img.mean()), 1.0) # 3) 真实性:饱和像素占比,超过 1% 说明过曝,细节已被削平 sat_ratio = float((img >= 250).sum()) / img.size return round(contrast, 1), round(uniformity, 3), round(sat_ratio, 4)这三个返回值基本能覆盖成像验收的初筛:contrast低于 30 就不该往下走算法,先回去改光源;uniformity偏大要去查镜头渐晕和光源衰减,线扫还要加平场校正;sat_ratio超标说明曝光参数或光圈给错了,降一档再看。把这三个数写进报告,比写“成像效果良好”有用得多。
3. 相机与数据接口:线扫一拖二的带宽账和时序账
3.1 相机内部到底有什么:从传感器到接口的五段结构
拆开一台工业相机,结构基本是五段:传感器芯片、防尘片或滤光片、控制与信号转换电路板、光学接口与数据接口、外壳。选型的自由度其实只在前两段,后三段是厂商定死的。
传感器层面要分清两件事。第一是面阵还是线阵:面阵一次曝光得到一个二维画幅,适合静止或近似静止的检测;线阵一次只曝光一行,靠被测物相对运动“扫”出完整图像,适合卷材、片材、连续产线,好处是纵向分辨率可以做到极高且不受幅面限制,代价是对运动同步极度敏感。第二是快门方式,全局快门的像素同时曝光,卷帘快门逐行曝光,在有相对运动或频闪光源的场合,卷帘会带来果冻形变和行间曝光差,工业检测里基本不该碰。
再往下是量子效率、满阱容量、读出噪声这一组指标,它们决定的是信噪比上限。在弱光场景(比如近红外波段的发光成像),量子效率的差异会直接决定曝光时间能不能压进产线节拍,这不是靠后期降噪能补回来的。
3.2 接口选型的本质是带宽、距离、实时性的三角
数据接口是相机和采集端之间的桥,常见的有 GigE、USB3、CameraLink、CoaXPress 几类。它们的差异不在协议优雅程度,而在一组硬约束。
| 接口 | 典型带宽 | 线缆长度 | 触发与实时性 | 适用场景 |
|---|---|---|---|---|
| GigE | 1 Gbps,约 125 MB/s | 铜缆约 100 m | 软触发/硬触发都支持,多相机易组网 | 中低行频线扫、多工位分布式部署 |
| USB3 | 5 Gbps,实测约 350 MB/s | 无源 3~5 m | 硬触发可用,线缆短 | 短距高带宽、单机台设备 |
| CameraLink | Base 2.04 / Medium 4.8 / Full 6.8 Gbps | 约 10 m | 专用采集卡,硬触发稳定 | 高行频线扫、严苛同步场合 |
| CoaXPress | 单 lane 6.25 / 12.5 Gbps,多 lane 叠加 | 可达数十米 | 触发与供电同缆,抖动小 | 超高行频、长距布线 |
这张表的用法不是“越贵越好”,而是拿带宽算账。线扫相机的带宽算法和面阵完全不同:面阵是“分辨率×帧率”,线扫是“线宽×行频”。行频由产线速度和纵向像素当量决定,是产线给定的常数,不是你选的。
def line_scan_bandwidth(width_px, line_rate_hz, bit_depth=8, overhead=1.15): """ width_px : 单行像素数,例如 4096 line_rate_hz : 行频(行/秒),由产线速度和纵向当量反推 bit_depth : 位深,8bit 即 1 字节/像素 overhead : 协议开销系数,GigE 取 1.1~1.2,CameraLink 取 1.05 """ bytes_per_px = bit_depth / 8 payload = width_px * line_rate_hz * bytes_per_px # 字节/秒 needed = payload * overhead return round(payload / 1e6, 1), round(needed * 8 / 1e9, 2) # MB/s, Gbps拿 4096 像素 × 20000 行/秒 × 8bit 去算,原始码率约 81.9 MB/s,加上开销接近 0.75 Gbps,GigE 已经贴到天花板,任何重传和抖动都会变成丢行;同样的参数换成 12000 像素宽,就直接超出 GigE 三倍,必须上 CameraLink 或 CoaXPress。这就是为什么高行频线扫很少用 GigE——真正卡住它的是带宽这道硬性上限,跟接口是否流行无关。
3.3 一拖二线扫的触发时序与同步机制
“一拖二”指的是用一套采集与处理单元驱动两路线扫相机,通常是为了同时拍正反两面,或者在同一工位覆盖两个视角。它的经济性很直接:省一套工控机和采集卡。但它的机制风险也藏在这里——两路相机共享同一个触发源和同一份带宽,任何相位差和抢占都会直接反映成图像缺陷。
正确的做法是两路相机共用同一路编码器信号,经过同一个分频器后分发出去,保证行触发在时间上完全对齐。分频系数必须取整数,否则纵向比例尺会随时间漂移,两路图像的行数对不上,拼接出来的图会一侧拉伸一侧压缩。
# 一拖二线扫的纵向当量推导:编码器 -> 整数分频 -> 两路共用 ENC_PPR = 5000 # 编码器每转脉冲数 MM_PER_REV = 200.0 # 编码器单转对应的产线位移(mm) PIXEL_PITCH = 0.05 # 设计纵向像素当量(mm/行),由镜头放大倍率决定 pulses_per_line = ENC_PPR * PIXEL_PITCH / MM_PER_REV # = 1.25,不是整数 divider = max(1, round(pulses_per_line)) # 只能取整,这里取 1 actual_pitch = divider * MM_PER_REV / ENC_PPR # 实际 0.04 mm/行,偏离设计值这段代码的价值在于暴露一个常被忽略的事实:纵向当量不是你想设多少就设多少,它被编码器分辨率和整数分频硬约束住了。当设计值和实际值偏差 20% 时,所有跟长度、面积相关的判定阈值都得跟着重算,否则缺陷尺寸判定会系统性偏大或偏小。一拖二还要额外注意两路线缆等长、两路曝光时间一致、两路带宽之和不超过接口上限——这三条里任意一条不满足,表现都是“其中一路偶尔丢行”,而丢行在线扫图上就是一条横向黑带,看起来和真实的横向缺陷一模一样。
4. 镜头与算法:从光学分辨率到缺陷判定,中间隔了几道坎
4.1 视场、景深、放大倍率:三个互相拉扯的光学约束
镜头是被测物和传感器之间唯一的光学通道,它的质量直接决定系统精度上限。选镜头要先算三个数:视场、放大倍率、景深。
放大倍率由传感器尺寸和视场反推,β = 传感器靶面尺寸 / 视场尺寸。横向像素当量等于视场除以像素数,这个数决定了一个像素代表多少毫米。工程上的经验是:最小可检缺陷的特征尺寸至少要被 3 到 5 个像素覆盖,否则边缘模糊和噪声会让面积、长宽比这类特征完全不可靠。想检 0.1 mm 的崩边,像素当量就得压到 0.02~0.03 mm 量级,反过来倒推需要多少像素、多大视场。
景深是另一个方向的拉扯。景深近似正比于光圈系数 N、正比于允许弥散圆,反比于放大倍率的平方。放大倍率一上去,景深掉得极快,而工业现场的被测物从来不是绝对平的——片材有翘曲,载具的槽位有加工误差,传送带有跳动。这时候缩光圈能救景深,但光圈每缩一档,进光量按平方下降,只能靠延长曝光或加光源补回来,而曝光时间又被产线节拍锁死。
这就是整条链路上最典型的约束传导:节拍 → 曝光时间上限 → 进光量 → 光圈下限 → 景深上限 → 允许的物面起伏。任何一个环节卡住,都要回头去改另一个环节。用远心镜头能缓解透视误差和景深分配问题,代价是视场受限、成本高、工作距离固定。工程上很少有“最优解”,只有“在这组约束下能跑通的解”。
4.2 缺陷判定链路:预处理、配准、分割、特征、判定
算法侧的标准链路是五步,每一步都在为下一步减少不确定性。
预处理先做平场校正,这是线扫图像必做的一步。做法是拍一张均匀白板,算出每一列的增益和偏置,把整幅图逐列拉平。不做这一步,光源衰减和镜头渐晕会变成贯穿整幅图的纵向条纹,后面所有基于行方向的算子都会把它当成缺陷。
配准用模板匹配或者相位相关,把当前图和黄金样本对齐。工业检测里绝大多数判定都是“和标准件比对”,对不齐就等于拿错基准。
分割用阈值加形态学。阈值不一定要全局,背景不均匀时用局部自适应阈值更稳,但参数会变多,现场调起来更麻烦。
特征提取是决定误报率的关键一步。面积、周长、长宽比、矩形度、灰度均值、灰度标准差,这几个简单的几何与灰度特征组合起来,通常比一个复杂的分类器更稳,因为它们的物理含义清楚,出了问题能定位。
最后是判定。规则判定(阈值组合)可解释、可追溯,适合缺陷形态固定的场景;分类器适合形态多变的场景,但需要足够的标注样本,且上线后要盯住样本漂移。
当背景是强周期性纹理时,空域算子会很吃力,这时候值得换到频域看一眼。周期性纹理在频谱上表现为一组离散的亮点,把这几颗亮点按掉,纹理背景就消失了,缺陷反而凸显出来。
import numpy as np def notch_filter(img, peaks, radius=3): """img: 单通道浮点图(建议先做平场校正) peaks: [(u, v), ...] 需要抑制的频谱峰值坐标,相对中心点 radius: 陷波半径,2~5 比较安全,太大会削掉缺陷边缘的高频""" F = np.fft.fftshift(np.fft.fft2(img)) h, w = img.shape cy, cx = h // 2, w // 2 yy, xx = np.ogrid[:h, :w] for (u, v) in peaks: F[(yy - (cy + v)) ** 2 + (xx - (cx + u)) ** 2 <= radius ** 2] = 0 return np.real(np.fft.ifft2(np.fft.ifftshift(F)))这段陷波滤波只压幅度不改相位,所以不会引入位置偏移。参数peaks需要先把频谱幅度图打印出来人工确认——栅线、网版、载具格栅各自的峰值位置不同,硬编码没有意义。radius是唯一的风险点:半径开大了,缺陷的高频边缘会和纹理峰值一起被抹掉,表现为“缺陷变淡”;半径开小了,纹理残留会在分割阶段变成大量细小伪缺陷。
4.3 隐裂、破片、载具:三种对象对应三套完全不同的成像逻辑
同一套算法框架,面对不同物理对象时要换的是成像方式,因为缺陷在物理上的表现形式根本不一样。
隐裂属于内部结构缺陷,表面看不出来,光打上去也不会散射。要看见它必须换一种成像机制:给电池片正向注入电流,让它在近红外波段发光(辐射复合发光,硅的带隙决定了发光峰值在 1100 nm 附近),裂纹区域因为复合增强或电极断开,发光明显偏弱,在图上就是一条暗线。这套机制要求相机对近红外敏感,普通可见光相机在这里几乎收不到信号。另一种激发方式是光致发光,用短波长光去激发,原理类似但激励源不同。这两种方式的共同点是:图像里的亮暗反映的是材料的少数载流子寿命分布,不是表面形貌,所以判定的特征也不同——看的是暗线的连续性、长度和分叉,而不是面积和灰度均值。
破片和崩边属于几何缺陷,背光剪影是最干净的方案。判定逻辑回到最朴素的轮廓特征:面积、周长、缺口深度、边缘直线度。这类缺陷的难点不在算法,而在边界稳定性——背光亮度不均会让轮廓边缘抖动一两个像素,面积特征随之波动,阈值给紧了误报,给松了漏检。
石墨舟、石英舟这类载具是第三种情况:深色、低反光、结构复杂、还常常处在高温环境里。它们的检测目标通常不是“表面瑕疵”,而是“结构完整性”——某个槽位有没有断、某个支撑点有没有缺、片位有没有放错。成像上靠多角度补光把立体结构打亮,算法上靠模板比对做点位级别的差异检测,本质是一致性检查而不是缺陷分割。这类工位最容易踩的坑是热辐射干扰:工件温度高,自身在近红外有辐射,会随温度漂移改变图像整体亮度,导致同一套阈值在冷机和热机状态下表现完全不同。
4.4 什么时候该上深度学习
判断标准其实很朴素:如果你写不出一套能覆盖 80% 缺陷的规则,而且人工复判的成本高到无法接受,才值得上模型。
规则算法的优势是确定的——缺陷形态固定、背景稳定、阈值可解释、出问题能定位到具体参数。它在工业现场活了几十年不是没有道理。深度学习的优势在于处理“说不清但看得见”的缺陷:纹理复杂、形态多变、边界模糊、人靠感觉判的那一类。代价是标注成本、样本漂移和黑匣子属性。上线后产线换了批次、换了供应商、换了工艺参数,模型的表现可能悄悄退化,而你看不出来——因为它不会报错,只会安静地漏检。
比较务实的做法是分层:规则兜底,模型补充。规则负责那些能用几何量说清楚的缺陷,模型只处理规则判不了的那一部分,并且保留人工复判通道和定期抽检机制。这样即使模型退化,损失也是可控的。
5. 避坑与排查:五条在现场反复踩到的成像和判定问题
5.1 成像类:误报率随时间和位置漂移
现象一:同一个工位,白天班误报特别多,夜班明显少,而且误报集中在视场靠边的位置。
原因有两层。第一层是环境光泄漏——设备防护罩没封严,车间照明和人员走动改变了被测区域的照度,而阈值是按某个固定亮度调的,亮度一漂,分割边界就跟着漂。第二层是工频干扰,交流驱动光源和市电照明都存在 100 Hz 的亮度波动,如果相机曝光时间不是工频周期的整数倍,每帧的曝光窗口落在亮度波形的不同位置,图像整体亮度就会逐帧抖动。
解决办法是把光源换成直流驱动、给设备加遮光罩,并把曝光时间取成工频周期的整数倍(50 Hz 电网下取 10 ms 的整数倍)。这一步几乎是所有成像调试的标准动作,但很多项目上来就调算法,把这种系统性问题当成算法鲁棒性不足,越调越乱。
现象二:视场中心清晰,四个角发虚,边缘的缺陷检不出来。
原因是镜头场曲和渐晕的叠加,加上边缘打光衰减。镜头的成像面是曲面而不是平面,中心和边缘不可能同时落在最佳焦面上;再叠加光源在视场边缘的照度衰减,边缘的信噪比本来就低一截。
解决办法要先分清是光学问题还是照明问题:在视场中心和边缘各放一个标准分辨率靶,看边缘的调制传递函数掉多少。掉得厉害就是镜头场曲,缩一档光圈能救一部分;如果分辨率还行只是亮度低,那是照明不均,改用大面积漫射光或加补偿环,再配合平场校正把残余的不均匀抹掉。
5.2 时序与接口类:图像上出现规则的黑带和错位
现象三:线扫图像上出现等间距的横向黑带,宽度一到两个像素,位置不固定。
原因几乎总是丢行。带宽不够、触发抖动、采集卡的包间隔设置不合理、CPU 抢占,都会让某一行的数据没进来。线扫是逐行拼接的,丢一行就在图上留下一条黑带,而黑带的形态和真实的横向划痕高度相似,很容易被误判成缺陷。
排查顺序要从带宽开始:先算一遍线宽乘行频,看是不是贴到了接口上限;再看采集卡的包间隔和接收缓冲区,GigE 上包间隔给得太小会导致瞬时拥塞;最后看处理端——如果图像采集和算法在同一个进程里,算法的耗时抖动会反压驱动,造成丢行。实在降不下来就只能降行频或者换接口,没有别的捷径。
现象四:一拖二的两路相机,其中一路的图像偶尔会整体偏移几行。
原因是两路的触发相位不一致,或者两路线缆长度不等导致传输延迟不同。线扫对行相位的敏感度远高于面阵,差几行就意味着纵向对不齐。
解决办法是把两路的触发源统一到同一个分频器输出,线缆等长,必要时用带相位补偿的触发分配模块。验收的时候不要只看静态图,要让产线跑起来,连续采几百张图比对两路的行计数是否严格一致。
5.3 判定类:实验室指标漂亮,上线就崩
现象五:算法在实验室验证能到 99% 的准确率,上线第一天就掉到 80%。
原因是验证集本身是偏的。实验室里的样本通常是人工挑出来的“典型图”,光照、位置、姿态都调到了最好;真实产线上有物料批次差异、设备振动、温度漂移、传送带跑偏带来的姿态变化,这些在验证集里一条都没有。算法学的不是缺陷,是那批样本的统计特性。
解决办法是把验证集换成连续若干小时的真实产线图,不做任何人工筛选,用这批数据做验收。同时把成像质量的三个量化指标写进验收单,每次换料、换光源、换镜头都重新跑一遍——很多时候性能下降的根因在成像端,而不是算法端,但如果没有这组基线数据,你根本无从判断。
6. 设计取舍:误报、漏检和节拍,工业视觉永远在解一个不等式
工业视觉方案里不存在“最优解”,只存在“在给定约束下能稳定跑通的解”。这些约束是互相咬合的:产线节拍锁死了曝光时间上限,曝光时间上限锁死了进光量,进光量锁死了光圈,光圈锁死了景深,景深锁死了能容忍的物面起伏;另一条链上,行频决定带宽,带宽决定接口,接口决定线缆长度和成本。任何一个参数想往上加,都必须从别处扣回来。
更隐蔽的一层取舍在判定阈值上。误报率和漏检率是一对此消彼长的量,你没法同时把它们压到零。决定这一刀切在哪里的,往往不是技术指标,而是产线的复判成本:如果每千片误报十次、每次人工复判两分钟,产线能承受,那就该把阈值往严里调,宁可误报不可漏检;如果复判工位本身就是瓶颈,那只能放宽阈值,接受一定比例的漏检由下游工序兜底。这个决定不该由算法工程师单独拍板,它需要产线的良率数据和后道工序的容忍度作为输入。
还有一层是成本分配上的取舍。成像端多花的那点钱,往往比算法端省下的力气便宜得多:一个合适的光源能把对比度从 10 个灰度拉到 60,后面所有环节都跟着轻松;反过来,靠算法去补成像的窟窿,短期能出效果,长期一定会被批次波动和样本漂移反复打脸。我后来形成的一个习惯是:任何检测工位在动第一行算法代码之前,先出一张成像验收单,把对比度、均匀性、饱和占比、行频与带宽、纵向当量这几项全部量化签字。这张单子后来救过我好几次——性能不达标的时候,能立刻分清是成像退化还是算法退化,而不是一群人围着代码瞎猜。
从那以后我每次接新的检测工位,都强制先走一遍成像验收再谈算法,哪怕工期再紧也不跳。这套流程和思路,在那份工业机器视觉缺陷检测的工作小结里有比较完整的梳理,从相机、接口、镜头、光源的构成,到对比度、均匀性、真实性的量化标准,再到隐裂、破片、舟类载具这些具体对象的成像测试记录,都是踩过坑之后沉淀下来的东西。想少走点弯路的话,把它拿过去对着自己产线的一条条核一遍,比自己从零试错要快得多。希望帮到你。
本文还有配套的精品资源,点击获取