常用的论文和代码查询网站(按论文的方向进行了分类,并按测试开源数据集进行排序)
将 ArXiv 上的最新机器学习论文与 Github 上的代码(TensorFlow/PyTorch/MXNet/等)对应起来。 链接: https://paperswithcode.com
这个网站主要是解决另一个问题–寻找一个领域目前最好的(State of the art, Sota)算法的论文以及实现代码。链接: https://paperswithcode.com/sota
使用halcon实现常用缺陷检测方法的总结与demo实现
缺陷检测总结
- 常用的论文和代码查询网站(按论文的方向进行了分类,并按测试开源数据集进行排序)
- 方案1: 直接阈值分割+形态学处理+blob分析方法
- 方案2:边缘检测+形态学处理+blob分析方法
- 方案3: 滤波算法+差分+图像增强方法(如直方图均衡处理)+阈值分割+blob分析
- 方案4: 傅里叶变换实现高通/低通滤波 + 傅里叶反变换 + 差分处理/阈值分割处理 + blob分析/形态学处理
- 方案5: 光度立体法 + 阈值分割 + blob分析 /形态学处理
- 方案6:距离变换+分水岭算法 + blob分析/形态学处理
- 方案7:基于模板匹配的方法+ 图像差分 + 阈值分割 + blob分析/形态学处理
- 方案8: 基于Anomaly的深度学习方法
- 方案9: 深度学习目标检测方法
- 方案10:深度学习图像分割方法
- 最终的总结:相关的一些算子
工业缺陷基本归类:
加法:脏污、异物、附着、
减法:残缺、划痕、破损
替换:混色、异色、杂质、混淆
变形:扭曲、尺寸、褶皱
视觉检测工程师的一般步骤:
方案1: 直接阈值分割+形态学处理+blob分析方法
方案2:边缘检测+形态学处理+blob分析方法
方案3: 滤波算法+差分+图像增强方法(如直方图均衡处理)+阈值分割+blob分析
方案4: 傅里叶变换实现高通/低通滤波 + 傅里叶反变换 + 差分处理/阈值分割处理 + blob分析/形态学处理
方案5: 光度立体法 + 阈值分割 + blob分析 /形态学处理
方案6:距离变换+分水岭算法 + blob分析/形态学处理
方案7:基于模板匹配的方法+ 图像差分 + 阈值分割 + blob分析/形态学处理
方案8: 基于Anomaly的深度学习方法
方案9: 深度学习目标检测方法
方案10:深度学习图像分割方法
最终的总结:相关的一些算子
- cooc_feature_image (Basins, ImageMedian, 6, 0, Energy, Correlation, Homogeneity, Contrast)计算图像的共生矩阵,并导出起灰度值。
- select_mask_obj (Basins, Defects, Mask)根据掩码去选择区域
- gen_arrow_contour_xld (ArrowContour, PointE[0], PointE[1], PointO[0], PointO[1] + 50, 20, 20) 生成箭头轮廓。
- channels_to_image (Images, MultichannelImage) 将多个图像转换为多通道图像。
- access_channel (MultichannelImage, Image, Index) 访问指定的图像通道数。
- invert_image (Image, ImageInverted) 图像灰度值翻转。
- close_edges(Edges, EdgeImage : RegionResult : MinAmplitude : ) 使用边缘振幅图像关闭边缘间隙。
- union1(Region : RegionUnion : : ) 计算所有输入区域的并集。
- complement(Region : RegionComplement : : ) 输出区域的补码区域。
- get_contour_xld (SelectedEdge, Rows, Cols) 获取轮廓的坐标。
- union_adjacent_contours_xld (SelectedContours2, UnionContours2, 30, 1, ‘attr_keep’) 联合哪些轮廓相近的轮廓为一个轮廓
- edges_sub_pix (ImageReduced, Edges, ‘canny’, 1.5, 30, 40) 亚像素边缘检测。
- threshold_sub_pix (ImageReduced1, Border1, 70) 以灰度值大于Threshold区域和灰度值小于Threshold的区域为分界点提取亚像素精密轮廓 。
- lines_gauss(Image : Lines : Sigma, Low, High, LightDark, ExtractWidth, LineModel, CompleteJunctions : ) 提取图像中的直线或曲线以及检测其宽度,主要用于找划痕找线等。
- union_cocircular_contours_xld(Contours : UnionContours : MaxArcAngleDiff, MaxArcOverlap, MaxTangentAngle, MaxDist, MaxRadiusDiff, MaxCenterDist, MergeSmallContours, Iterations : ) 合并联合在一起的。
- scale_image_max(Image : ImageScaleMax : : ) 将灰度值缩放至0到255.
缺陷方法总结补充:
- blob分析+特征
- 模板匹配(定位)+差分
- 光度立体发
- 特征训练
- 测量拟合
- 频域+空间域
- 深度学习
特征训练
在纹理中找瑕疵。基于高斯混合模型(GMM)分类器的纹理检查模型,适用于图像金字塔,可以分析纹理的多个频率范围。
要求训练样本必须完美无瑕疵。
整体步骤:
创建模型create_texture_inspection_model或读取模型read_texture_inspection_model
添加训练样本add_texture_inspection_model_image
查看样本get_texture_inspection_model_image
训练模型train_texture_inspection_model
每层金字塔都会训练一个GMM模型,并确定该层的’novelty_threshold’(区分有无瑕疵的阈值)。
参数获取:get_texture_inspection_model_param
参数设定:set_texture_inspection_model_param
参数分析:‘patch_normalization’:'weber’对亮度鲁棒,‘none’需要亮度作为评判(默认)
'patch_rotational_robustness':'true'对旋转鲁棒,'false'需要旋转作为评判(默认)
'levels':设置具体的金字塔层参与训练,纹理越粗糙,则较低的金字塔层级越可省略。默认auto。
'sensitivity':灵敏度,影响'novelty_threshold'的计算结果。负值会导致更高的阈值,从而更少的发现缺陷。默认0。
'novelty_threshold',阈值,自动计算得到,若结果不理想,可以手动微调。
进行检测apply_texture_inspection_model
模型保存与释放write_texture_inspection_model
若模型不再需要,则释放clear_texture_inspection_model
- halcon案例分析(apply_texture_inspection_model.hdev)