缺陷检测解析和实战 缺陷检测解析和实战 缺陷检测解析和实战
一 缺陷类型
1 产品外部缺陷:凸凹:毛刺等
2 产品内部缺陷:污点、内部凸凹点、瑕疵、孔洞、破损
3 划痕
二 打光
划痕–低角度环形光,划痕打白,背景打暗
划痕–同轴光
凸点,角度光
凹点,垂直光
blob分析的核心在于阈值分割(图像分割)
blob分析之阈值分割算子
阈值分割
threshold (Image, Region, 128, 255)
对应参数分别为输入图像、输出区域、阈值下限、阈值上限
动态阈值分割
mean_image (Image, ImageMean1, 9, 9)
dyn_threshold (Image, ImageMean1, RegionDynThresh, 5, 'light')
对应参数分别为原始图像、阈值图像、输出区域、偏移量、输出类型
当LightDark = 'light' 时 g0 >= gt+Offset;
当LightDark = 'dark' 时 g0 <= gt-Offset;
当LightDark = 'equal' 时 gt-Offset <= g0 <= gt+Offset;
当LightDark = 'not_equal' 时 gt+Offset < g0 或者 g0 < gt-Offset;
二值化分割
非常适用于在均匀照明的背景下分割
binary_threshold (Image, Region, 'max_separability', 'dark', UsedThreshold)
对应参数分别为输入图像、输出区域、使用方法、选择前景还是背景、输出使用的阈值
使用二值阈值分割图像,binary_threshold使用自动确定的全局阈值分割单通道图像,并在region中返回分割后的区域,分割所使用的阈值由method中给出的方法确定,非常适用于在均匀照明的背景下分割字符;
目前,method总共提供两种方法:'max_separability' 和 'smooth_histo',这两种方法都只能用于具有双峰直方图的图像:
'smooth_histo' 方法和bin_threshold的功能一致,可以参考bin_threshold的分割过程;
'max_separability' 方法是靠UsedThreshold来决定最小阈值的,速度比'smooth_histo'要快,对于干扰也不是很敏感;
直方图阈值分割
*直方图阈值分割
auto_threshold (Image, Regions, 2)
对应参数分别为输入图像、输出区域、高斯参数
利用直方图确定的阈值分割图像,通过多阈值分割单通道图像,会返回多个区域;首先输入图像的绝对直方图的灰度值是确定的,然后高斯平滑(Sigma)后从直方图中提取相关的最小值
Sigma越大,提取的区域就越小;
快速分割
fast_threshold (Image, Region, 128, 255, 20)
对应参数分别为输入图像、输出区域、阈值下限、阈值上限、处理参数(MinSize)
在理解MinSize的时候,可以直接理解为就是一个加速参数,把图像分成两块来分别处理,MinSize决定了两块的比例;
MinSize越大,速度越快
var_threshold
在不均匀的,嘈杂的,或不均匀照明的背景上分割区域是比较合适的;
var_threshold (Image, Region, 15, 15, 0.2, 2, 'dark')
var_threshold(Image : Region : MaskWidth, MaskHeight, StdDevScale, AbsThreshold, LightDark : )
输入图像、输出区域、掩膜宽度、掩膜高度、灰度值的标准差因子、与平均值的最小灰度差值、阈值类型
LightDark:提取像素的局部灰度值是亮的还是暗的
MaskWidth和MaskHeight的最小值应该要大于等于3,值3可以被认为是最小的敏感值
StdDevScale :较高的值意味着只选择与周围环境非常不同的像素,建议值是在-1.0到1.0之间,0.2是建议值
如果StdDevScale是正值,那么像素灰度值需要具有较高的标准偏差(不均匀的图像);如果StdDevScale是负值,那么像素灰度值需要具有较低的标准偏差(均匀的图像);StdDevScale 局部标准差被用来衡量图像中的噪声,标准差可以通过StdDevScale进行缩放
StdDevScale的值过于小,导致很多像素没有被选中,值过大,导致不需要的像素值被选中
AbsThreshold 在均匀的图像中,标准差较低;因此,单个灰度值的影响较大,为了减小算子的灵敏度,需要调整AbsThreshold的值,这样单个灰度值的变化就可以被忽略;
如果StdDevScale是负值,AbsThreshold也应该选择为负值,因为标准差比较低,
标准差可以通过StdDevScale进行缩放