一、缺陷检测综述
缺陷检测是视觉需求中难度最大一类需求,主要是其稳定性和精度的保证。首先常见缺陷:凹凸、污点瑕疵、划痕、裂缝、探伤等。常用的手法有六大金刚(在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
---
参考文献
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