机器视觉 2021-04-26 11974
在缺陷检测这个行业摸爬打滚多年,有了一些经验,也有了很多的疑惑。浅谈一下自己对缺陷检测的理解。
缺陷检测算法不同于尺寸、二维码、OCR等算法。后者应用场景比较单一,基本都是套用一些成熟的算子,所以门槛较低,比较容易做成标准化的工具。而缺陷检测极具行业特点,不同行业的缺陷算法迥然不同。随着缺陷检测要求的提高,机器学习和深度学习也成了缺陷领域一个不可或缺的技术难点,接下来我会对标准缺陷检测算法、以及半导体行业的非标算法做一个简单分析:
注:提供的是一些算法思路,无实际的算法代码
扩展阅读:如何应对自动化浪潮?
所谓标准,就是不针对行业特点,这里基本分为如下几类:
标准预处理功能:图像增强、腐蚀、膨胀、开运算、闭运算、滤波、傅立叶变换、距离变换、差分等,《机器视觉软件开发完整过程记录——第四段》中有详细说明,不累述面积检测:阈值后计算ROI内面积,《机器视觉软件开发完整过程记录——第四段》中有详细说明,不累述Blob检测:阈值联通后计算Blob,《机器视觉软件开发完整过程记录——第四段》中有详细说明,不累述浓度差检测:计算ROI范围内的最大浓度、最小浓度、浓度差直线/曲线上的毛刺/缺陷:拟合直线/曲线,计算边缘点到直线/曲线距离标准的做法一般都是拿标准的算法块进行组合,以达到缺陷检测的效果,例如以下流程就是一个缺陷检测标准流程:
1设置基准图模板——>2当前图模板定位——>3生成仿射变换矩阵——>4旋转平移图像或者区域——>5预处理差分——>6预处理滤波/腐蚀/膨胀——>7Blob检测——>8面积检测2.非标缺陷检测(针对行业特性)
相对与标准做法,非标的做法就非常多,有些非标的目的是为了减少操作步骤,例如将上面的组合流程变成一个工具,这个我们称之为业务逻辑非标。还有一些非标主要是做图像预处理部分,例如修改一些标准预处理的算子和预处理流程,将瑕疵提取出来。当然,对数学理论掌握程度较高的朋友,会推导理论公式,然后直接实现数学公式达到检测效果。
扩展阅读:机器视觉和机器人动力学应该选哪个方向?
传统算法检测缺陷:调试难度大,容易在检测不稳定情况下反复调参,且复杂缺陷误测多,兼容性差
机器学习检测缺陷:一般使用类似MLP的一些单层神经网络,对缺陷特征进行训练分类,该方法需要事先提取出缺陷部分,一般用来与传统分割法搭配使用,达到缺陷检测分类的效果。
深度学习检测缺陷(打标签):一般需要客户提供大量的缺陷样本,而且缺陷种类越多、特征越不明显,需要的缺陷样本就越大。其次,打标签过程很难做到自动,需要手动辅助框出缺陷位置,工作量非常大。总结就是训练周期久,训练样本大,如果客户可以提供大量样本,那该方法是首选(半导体行业一般不会出现大量缺陷样品)
深度学习检测缺陷(迁移学习法):该方法我感觉会成为后面工业领域检测瑕疵的一个大趋势,但是需要一些公司去收集各种行业的缺陷类型图片和训练的网络模型,并共享出来(突然感觉是个商机,就看谁能抓住了),然后我们可以使用迁移学习的方法学习别人训练好的模型。
工业缺陷检测接下来该如何推进,永远是一大难题,也是一片蓝海