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

一、缺陷检测综述

缺陷检测是视觉需求中难度最大一类需求,主要是其稳定性和精度的保证。首先常见缺陷:凹凸、污点瑕疵、划痕、裂缝、探伤等。常用的手法有六大金刚(在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视觉缺陷检测系列(1)常用的6种方法_第1张图片

halcon视觉缺陷检测系列(1)常用的6种方法_第2张图片

另外,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

 

 

---

参考文献

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

http://www.ihalcon.com/read-8013.html

https://pan.baidu.com/share/link?shareid=3266393619&uk=2369503810

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

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

 

你可能感兴趣的:(Halcon)