一、缺陷检测综述

缺陷检测是视觉需求中难度最大一类需求,主要是其稳定性和精度的保证。首先常见缺陷:凹凸、污点瑕疵、划痕、裂缝、探伤等。常用的手法有六大金刚(在halcon中的ocv和印刷检测是针对印刷行业的检测,有对应算子封装):

1.blob+特征(例如官方示例surface_scratch.hdev)

2.blob+差分+特征

3.光度立体

4.特征训练

5.测量拟合

6.频域+空间结合

二、频域+空间结合法

1、频域结合空间,其实频域就是用波动观点看世界,看问题角度变了,光经过镜头其实发生的是傅立叶变换,此思想在傅立叶光学上有所阐述,就像光经棱镜分光,而光进入计算机内部,进行了采样和量化,然后我们用函数f(x,y)来表示这些数据描述。图像处理应用傅里叶变换就是将空间域(图像本身)转换至频率域。傅里叶变换可以将一个信号函数,分解一个一个三角函数的线性组合。由于任何周期函数都可以由多个正弦函数构成,那么按照这个思想,图像由f(x,y)来表示,那么这时你就可以拆成多个正弦函数构成,这样每个正弦函数都有一个自己的频率。

2、频率特征是图像的灰度变化特征,低频特征是灰度变化不明显,例如图像整体轮廓,高频特征是图像灰度变化剧烈,如图像边缘和噪声。一个重要的经验结论:低频代表图像整体轮廓,高频代表了图像噪声,中频代表图像边缘、纹理等细节。

3、什么时候使用傅里叶变换进行频域分析?

1)具有一定纹理特征的图像,纹理可以理解为条纹,如布匹、木板、纸张等材质容易出现。 
2)需要提取对比度低或者信噪比低的特征。 
3)图像尺寸较大或者需要与大尺寸滤波器进行计算,此时转换至频域计算,具有速度优势。因为空间域滤波为卷积过程(加权求和),频域计算直接相乘。

4、举例

*1采集图像
read_image (Image66, 'C:/Users/Administrator/Desktop/66.png')
rgb1_to_gray (Image66, GrayImage)*2预处理之拉开对比度(这里采用频域,频域到空间域的常用算子有三个fft_iamge,rft_generic,fft_generic
fft_generic (GrayImage, ImageFFT, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')*注意一般在频域里就是选择你想要的频段而已,被称为滤波,这个手法在halcon中有三个,
*一个是直接手画,然后paint_region
*一个是涉及滤波器,然后进行滤波,这个对于初学者有点难度,先掌握常见滤波器。
*第三个就是调用power_real,对其进行blob解析。
*这里用的直接手动paint_region,选择对应的频段
gen_rectangle1 (ROI_0, 350.855, 3.85433, 473.273, 1101.15)
paint_region (ROI_0, ImageFFT, ImageResult, 0, 'fill') *注意这里又回到了空间,频域和空间是同等重要地位,只是看问题的角度不一样,这也符合唯物辩证法法
fft_generic (ImageResult, ImageFFT1, 'from_freq', 1, 'sqrt', 'dc_center', 'byte')
*接下来就是一个blob提取而已,当然这里方法可以根据情况变化多端,比如你可以分水领域法,
*然后调用select_gray,对每个区域对应灰度值特征进行筛选,当然您也可以用共生矩阵
emphasize (ImageFFT1, ImageEmphasize, 7, 7, 1)
threshold (ImageEmphasize, Regions, 44, 101)
dilation_circle (Regions, RegionDilation, 3.5)
connection (RegionDilation, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 78.88, 190.87)
*这里就是显示而已
dev_display (Image66)
dev_display (SelectedRegions)

另外,halcon自带的例子detect_mura_defects_texture.hdev也值得学习

更多的内容,参见我的另一篇博文《halcon视觉缺陷检测之频域和空间域转换的方法详解》

三、光度立体法

在工业领域,表面检测是一个非常广泛的应用领域。在halcon中,使用增强的光度立体视觉方法,三维表面检测被加强。利用阴影可方便快速的检测物体表面的缺口或凹痕。 使用光度立体视觉方法可在复杂图像中轻松找到表面缺陷 。

四面打光,合成图像,求取梯度图型,然后Halcon里的光度立体法也是这方面的应用,关键的算子就是photometric_stereo。

潜在问题:

1.看官方例子貌似都是条形组合光源打光,用光度立体法检测,一定要把缺陷打出来才行吗?
2.一定要取4张图片吗?
3.photometric_stereo (Images, HeightField, Gradient, Albedo, Slants, Tilts, ResultType, 'poisson', [], [])该算子的配置有什么讲究吗?

举例:检测-光度立体法检测药片包装背面的缺陷

官方例子:皮革检测,inspect_leather_photometric_stereo.hdev

四、他山之石

halcon学习网

1.标准缺陷检测:
所谓标准,就是不针对行业特点,这里基本分为如下几类:
 标准预处理功能:图像增强、腐蚀、膨胀、开运算、闭运算、滤波、傅立叶变换、距离变换、差分等,《机器视觉软件开发完整过程记录——第四段》中有详细说明,不累述
面积检测:阈值后计算ROI内面积,《机器视觉软件开发完整过程记录——第四段》中有详细说明,不累述
Blob检测:阈值联通后计算Blob,《机器视觉软件开发完整过程记录——第四段》中有详细说明,不累述
浓度差检测:计算ROI范围内的最大浓度、最小浓度、浓度差
直线/曲线上的毛刺/缺陷:拟合直线/曲线,计算边缘点到直线/曲线距离
        标准的做法一般都是拿标准的算法块进行组合,以达到缺陷检测的效果,例如以下流程就是一个缺陷检测标准流程:
1设置基准图模板——>2当前图模板定位——>3生成仿射变换矩阵——>4旋转平移图像或者区域——>5预处理差分——>6预处理滤波/腐蚀/膨胀——>7Blob检测——>8面积检测
2.非标缺陷检测(半导体行业)
       相对与标准做法,非标的做法就非常多,有些非标的目的是为了减少操作步骤,例如将上面的组合流程变成一个工具,这个我们称之为业务逻辑非标。还有一些非标主要是做图像预处理部分,例如修改一些标准预处理的算子和预处理流程,将瑕疵提取出来。当然,对数学理论掌握程度较高的朋友,会推导理论公式,然后直接实现数学公式达到检测效果。

个人认为缺陷检测的难点:
1.传统算法检测缺陷:调试难度大,容易在检测不稳定情况下反复调参,且复杂缺陷误测多,兼容性差
2.机器学习检测缺陷:一般使用类似MLP的一些单层神经网络,对缺陷特征进行训练分类,该方法需要事先提取出缺陷部分,一般用来与传统分割法搭配使用,达到缺陷检测分类的效果。
3.深度学习检测缺陷(打标签):一般需要客户提供大量的缺陷样本,而且缺陷种类越多、特征越不明显,需要的缺陷样本就越大。其次,打标签过程很难做到自动,需要手动辅助框出缺陷位置,工作量非常大。总结就是训练周期久,训练样本大,如果客户可以提供大量样本,那该方法是首选(半导体行业一般不会出现大量缺陷样品)
4.深度学习检测缺陷(迁移学习法):该方法我感觉会成为后面工业领域检测瑕疵的一个大趋势,但是需要一些公司去收集各种行业的缺陷类型图片和训练的网络模型,并共享出来(突然感觉是个商机,就看谁能抓住了),然后我们可以使用迁移学习的方法学习别人训练好的模型。

---

参考文献

1、halcon机器视觉缺陷检测之划痕-超人视觉

错误提示 - Halcon学习网

百度网盘-链接不存在

2、halcon缺陷检测的示例代码解析

https://blog.csdn.net/ymj7150697/category_8002603.html

halcon视觉缺陷检测系列(1)常用的6种方法相关推荐

  1. Halcon缺陷检测系列

    Halcon缺陷检测系列Halcon缺陷检测系列Halcon缺陷检测系列 一 注塑吸嘴缺口检测 二 铣刀刀口破损缺陷检测 三 网状产品表面破损检测 四 手机摄像头图像表面的轻微缺陷检测 五 皮革纹理表 ...

  2. DLIA视觉缺陷检测平台——电子元器件焊点缺陷检测

    随着各类智能产品小型化设计,电路板上元器件的越来越多,任何产品在生产的时候或多或少都会产生少数外观不良,电子元器件当然也不例外.焊点缺陷是电路板生产制造过程中常见的问题,体积小.焊点密集是检查电路板焊 ...

  3. spring boot项目 中止运行 最常用的几种方法

    spring boot项目 中止运行 最常用的几种方法: 1. 调用接口,停止应用上下文 @RestController public class ShutdownController impleme ...

  4. 计算机企业培训新人成功案例,企业培训常用的8种方法

    企业培训常用的8种方法 要选择到合适有效的培训方法,需要考虑到培训的目的.培训的内容.培训对象的自身特点及企业具备的培训资源等因素.下面是企业培训常用的8种方法,一起来学习下吧: 1.讲授法: 属于传 ...

  5. jQuery添加DOM节点常用的5种方法

    一.内部插入(前插入.后插入): <!DOCTYPE html> <html><head><meta charset="UTF-8"> ...

  6. PHP教程:WebService最常用的两种方法

    国内用PHP写WebService的真的很少,网上资料也没多少,公司的项目开发过程中,经历了不少这方面的东西,写出来以供大家参考(谢谢老农提供的WSDL和程序文件) 客户端 代码: 01.   02. ...

  7. 统计内表行数常用的三种方法

    以下是统计内表行数常用的三种方法, 如下:   1.LOOP AT it_itab.    g_lines2 = g_lines2 + 1.    ENDLOOP.    该方法是通过循环内部表自己累 ...

  8. java json的使用方法_JAVA编写JSON常用的三种方法

    JAVA编写JSON常用的三种方法 Szx • 2019 年 11 月 15 日 1.jsonlib需要引入的包也多,代码也相对多一些. 2.Gson:谷歌的 3.FastJson:阿里巴巴的,这几个 ...

  9. 破解XP系统密码的常用的几种方法

    破解系统密码的常用的几种方法 ---流血的蚊子(个人实验加整理) 以下几种方法都需要Dos环境或者winpe环境,所以需要自己制作启动盘(具体方法不多言) 1.  SAM文件.Windows xp目录 ...

最新文章

  1. 神经网络是存储了海量的信息还是将海量的关系映射存储在了一起(发挥了存储记忆功能),还是变成了看似是一个公式,实际是成千上万个规律的公式融合在一个式子中( 类似于正弦波的傅里叶分解成无限中频率的波的加和
  2. LeetCode Perfect Squares(动态规划)
  3. python数据分析与应用
  4. 【计算机组成原理】双端口RAM和多模块存储器
  5. python3.9新特性_Python3.9又更新了:dict内置新功能
  6. ios经验6:提交APP上架流程
  7. O2O C2C B2B B2C
  8. labview入门到出家11(补充)——基于单片机和labview开发的虚拟示波器
  9. 为什么浏览器网页每次打开都是搜狗?
  10. java 水晶按钮_java渲染水晶按钮
  11. Minimum supported Gradle version is 6.7.1. Current version is 5.4.1. Please fix the project‘s Gradl
  12. PMBOK组织结构及特点-联络员、协调员
  13. ArcGIS问题:dbf shp shx sbn sbx mdb adf等类型的文件的解释
  14. android一键添加QQ群,关注微信公众号
  15. 个税APP优化解决方案
  16. Oracle PRM-DUL使用经验
  17. 在嘲笑与冷眼下成长,并不断在泥潭中站起
  18. The Things Network LoRaWAN Stack V3 学习笔记 2.7.1 Web 前端开发调试
  19. Windows 如何配置 scratch 3.0 GUI
  20. 谈谈mysql locate函数

热门文章

  1. 基于智慧磐石理念下的新型智能装备管理系统
  2. linux中进入目录命令是什么,linux进入目录的命令是什么
  3. Unity Mesh(六) Mesh 正八面体Octaheron贴图
  4. 就读的大学是新校区,比较偏僻是一种怎样的体验?
  5. JAVA 基础实践项目 -- 狼人杀
  6. k8s pod网络限速
  7. 选择了兄弟连,我不会后悔
  8. 睡不着瞎扯淡------我的西邮四年
  9. mysql主键generated_将主键索引追加到mysql(使用Mysql workbench)导致“GENERATED ALWAYS AS”错误...
  10. java-A-3-梅森素数