工业软件Halcon的常用功能及常用工具展示

工业软件Halcon的常用功能及常用工具展示

  • 1.BLOB+特征
  • 2.BLOB+差分+特征
  • 3.光度立体
  • 4.特征训练
  • 5. 测量拟合
  • 6. 频域+空间域结合法
  • 7.深度学习法
  • 总结

1.BLOB+特征

官方示例子:surface_scratch.hdev
该程序显示了通过局部阈值和形态学后处理提取表面划痕,一共分为三步:
1)获取图像;
2)分割图像,使用局部阈值进行分割;
3)形态学处理,选择大面积的区域,可视化分数划痕,通过形态学合并细分划痕,最后区分大小划痕。

输出的结果:

工业软件Halcon的常用功能及常用工具展示_第1张图片
界面:

工业软件Halcon的常用功能及常用工具展示_第2张图片
途中了解了一下局部阈值分割算子:dyn_threshold
dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : )
参数:
OrigImage (input_object):原始图像
ThresholdImage (input_object):处理后图像(一般采用滤波处理)
RegionDynThresh (output_object):分割后区域
Offset (input_control):灰度值偏移量。
LightDark (input_control):提取区域类型( ‘dark’, ‘equal’, ‘light’, ‘not_equal’)
给定具体的条件,该算子可以分割出不同的区域:
工业软件Halcon的常用功能及常用工具展示_第3张图片
ThresholdImage图可以通过mean_image, binomial_filter, gauss_filter等滤波方式处理。
滤波选择的掩膜尺寸越大,提取的区域越大。根据经验,掩膜大小选择应该是要提取目标直径的两倍。参数Offset不要设置0,否则将会提取到很多小的噪点区域,一般介于5-40最佳,其值越大,提取的区域越小。
示例代码和其子函数:

工业软件Halcon的常用功能及常用工具展示_第4张图片
工业软件Halcon的常用功能及常用工具展示_第5张图片
其中子函数的参数设置为:

工业软件Halcon的常用功能及常用工具展示_第6张图片

在均值滤波后的四种不同的结果如下:

工业软件Halcon的常用功能及常用工具展示_第7张图片

2.BLOB+差分+特征

例子:PCB电路板的缺陷检测
检测的步骤为:
1)进行灰度开运算,减少亮区;
2)进行灰度闭运算,增大亮区;
3)提取亮区和暗区,得到检测的缺陷。
代码为:

read_image (Image, 'pcb')
dev_close_window ()
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
gray_opening_shape (Image, ImageOpening, 7, 7, 'octagon')
gray_closing_shape (Image, ImageClosing, 7, 7, 'octagon')
dyn_threshold (ImageOpening, ImageClosing, RegionDynThresh, 75, 'not_equal')
dev_display (Image)
dev_set_color ('red')
dev_set_draw ('margin')
dev_display (RegionDynThresh)

界面:

工业软件Halcon的常用功能及常用工具展示_第8张图片

运行的结果:

工业软件Halcon的常用功能及常用工具展示_第9张图片

3.光度立体

光度立体法可以看作是2.5维,适用于检测金属物料上面的凹凸特征。利用该方法可以重建法向量,将灰度图变成曲率图。
Halcon中的算子为:

1)photometric_stereo (Images : HeightField, Gradient, Albedo : Slants, Tilts, ResultType, ReconstructionMethod, GenParamName, GenParamValue : )
其中:

  • Images:输入图像(4张)
  • HeightField:返回重建高度场
  • Gradient:返回表面的梯度场
  • Albedo: 表面的反射率
  • Slants:光源光线与摄像机光轴的夹角(下面有示意图)
  • Tilts: 光源光线投影与被测物主轴的夹角
  • ResultType: 请求结果类型(高度场/梯度场/反射率)
  • ReconstructionMethod: 重建方法类型
  • GenParamName: 一般参数名称
  • GenParamValue: 一般参数设置

2)derivate_vector_field(VectorField : Result : Sigma, Component : )
其中:

  • VectorField: 梯度场图像
  • Result: 返回平均曲率场图像
  • Sigma: 高斯系数
  • Component: 组件计算
    示例:药片外包装破损的检测
    光度立体法的代码:
read_image (Images, './blister_back_0' + [1:4])
for I := 1 to 4 by 1
    select_obj (Images, ObjectSelected, I)
    *wait_seconds (0.1)
endfor
Tilts := [6.1,95.0,-176.1,-86.8]
Slants := [41.4,42.6,41.7,40.9]
* 光度立体
photometric_stereo (Images, HeightField, Gradient, Albedo, Slants, Tilts, 'all', 'poisson', [], [])
* 梯度场转平均曲率场
derivate_vector_field (Gradient, Result, 1, 'mean_curvature')
*scale_image_max (Result, ImageScaleMax)
* 种子生长
regiongrowing (Result, Regions, 1, 1, 0.01, 250)
select_shape (Regions, SelectedRegions, 'area', 'and', 16332.6, 28629.5)
shape_trans (SelectedRegions, RegionTrans, 'convex')
union1 (RegionTrans, RegionUnion)
erosion_circle (RegionUnion, RegionErosion, 3.5)
reduce_domain (Result, RegionErosion, ImageReduced)
* 求图像的绝对值
abs_image (ImageReduced, ImageAbs)
threshold (ImageAbs, Regions1, 0.3, 0.5)
* 显示
count_obj (Regions1, Number)
if(Number>0)
   area_center (Regions1, Area, Row, Column)
   gen_circle_contour_xld (ContCircle, Row, Column, 20, 0, 6.28318, 'positive', 1)
   dev_set_color ('blue')
   dev_set_line_width (2)
   dev_display (Result)
   dev_display (ContCircle)    
endif

主要是利用光度立体法和梯度场转换为平均曲率场来检测缺陷,结果为:

4.特征训练

特征训练的方法要求训练样本必须完美无瑕疵,整体步骤为:

1)创建模型:create_texture_inspection_model或者读取模型:read_texture_inspection_model;
2)添加训练样本:add_texture_inspection_model_image;
3)查看样本get_texture_inspection_model_image
4)训练模型train_texture_inspection_model

案例:apply_texture_inspection_model.hdev

该示例程序展示了如何微调纹理检查模型。首先,使用一组无误差纹理图像创建并训练纹理检查模型;然后,对其中一个有缺陷的测试图像进行参数微调;最后,测试有缺陷和无缺陷图像的集合
首先,创建模型,添加训练样本(完好无损的图像):

TrainingImageIndices := [1,2]
TextureModelFilename := 'texture_model_carpet'
dev_open_window_fit_size (0, 0, Width, Height, -1, -1, WindowHandle1)
dev_display (Image)
create_texture_inspection_model ('basic', TextureInspectionModel)
for Index := 0 to |TrainingImageIndices| - 1 by 1
read_image (Image, 'carpet/carpet_' + TrainingImageIndices[Index]$'02')
dev_display (Image)
Message := '添加图片 ' + (Index + 1) + ' of ' + |TrainingImageIndices| + '训练准备'
dev_disp_text (Message, 'window', 12, 12, 'black', [], [])
add_texture_inspection_model_image (Image, TextureInspectionModel, Indices)
endfor

工业软件Halcon的常用功能及常用工具展示_第10张图片
工业软件Halcon的常用功能及常用工具展示_第11张图片

然后,初步设置参数后,开始训练:

*参数设定'patch_normalization''weber'对亮度鲁棒,‘none’需要亮度作为评判(默认)
set_texture_inspection_model_param(TextureInspectionModel, 'patch_normalization', 'weber')
Levels := [2,3,4]
set_texture_inspection_model_param (TextureInspectionModel, 'levels', Levels)
train_texture_inspection_model (TextureInspectionModel)
*查看样本参数'novelty_threshold',阈值,自动计算得到,若结果不理想,可以手动微调。
get_texture_inspection_model_param (TextureInspectionModel, 'novelty_threshold', NoveltyThreshold)
*之后get_texture_inspection_result_object读取'novelty_score_image''novelty_region'set_texture_inspection_model_param (TextureInspectionModel, 'gen_result_handle', 'true')

在这里插入图片描述

其次,对缺陷图像初测试,显示测试结果:

WindowWidth := 320
WindowHeight := 280
dev_open_window (0, 0, WindowWidth, WindowHeight, 'black', WindowHandle1)
set_display_font (WindowHandle1, 16, 'mono', 'true', 'false')
dev_open_window(0, WindowWidth + 8, WindowWidth, WindowHeight, 'black', WindowHandle2)
set_display_font (WindowHandle2, 16, 'mono', 'true', 'false')
dev_open_window(0, 2 * WindowWidth + 16, WindowWidth, WindowHeight, 'black', WindowHandle3)
set_display_font (WindowHandle3, 16, 'mono', 'true', 'false')
dev_open_window(WindowHeight + 50, WindowWidth / 2 + 8, 2 * WindowWidth, 2 * WindowHeight, 'black', WindowHandle4)
set_display_font (WindowHandle4, 16, 'mono', 'true', 'false')
WindowHandles := [WindowHandle1,WindowHandle2,WindowHandle3]
  for Index := 1 to 3 by 1
    ImageIndex := 5
        read_image (TestImage, 'carpet/carpet_' + ImageIndex$'02')
        *测试当前图像
    apply_texture_inspection_model (TestImage, NoveltyRegion, TextureInspectionModel, TextureInspectionResultID)
    get_texture_inspection_result_object (NovScoreImage, TextureInspectionResultID, 'novelty_score_image')
    get_texture_inspection_result_object (NovRegion, TextureInspectionResultID, 'novelty_region')
        count_obj (NovScoreImage, Number)
         for Level := 1 to Number by 1
                     CurrentWindow := WindowHandles[Level - 1]
                             dev_set_window (CurrentWindow)
                             dev_clear_window ()
        select_obj (NovScoreImage, NovScoreImageL, Level)
        select_obj (NovRegion, NovRegionL, Level)
        get_image_size (NovScoreImageL, Width, Height)
        dev_set_part (0, 0, Height - 1, Width - 1)
        dev_display (NovScoreImageL)
        Legend := 'Novelty region (level ' + Levels[Level - 1] + ')'
        dev_set_color ('red')
        dev_set_line_width (2)
        dev_display (NovRegionL)
        dev_disp_text (['Novelty score image (level ' + Levels[Level - 1] + ')','Novelty threshold: ' + NoveltyThreshold[Level - 1]$'.1f'], 'window', 12, 12, 'black', [], [])
        dev_disp_text (Legend, 'window', WindowHeight - 30, 12, 'white', ['box_color','shadow'], ['black','false'])
         endfor
    dev_set_window (WindowHandle4)
    dev_display (TestImage)
    dev_set_line_width (2)
    dev_set_color ('red')
    dev_display (NoveltyRegion)
    area_center (NoveltyRegion, Area, Row, Column)
    if (Index < 3)
        dev_disp_text ('Result', 'window', 12, 12, 'black', [], [])
    else
        dev_disp_text ('Final result', 'window', 12, 12, 'black', [], [])
    endif

工业软件Halcon的常用功能及常用工具展示_第12张图片

最后,根据测试结果进行微调参数:

     if (Index == 1)
        Message[0] := '图像中有很多小错误.'
        Message[1] := '可以通过改变 novelty thresholds的值来调整灵敏度(sensitivity—)'
        Message[2] := '例如减少灵敏度参数的值'
        dev_disp_text (Message, 'window', 12, 12, 'black', [], [])
        set_texture_inspection_model_param (TextureInspectionModel, 'sensitivity', -10)
        get_texture_inspection_model_param (TextureInspectionModel, 'novelty_threshold', NoveltyThreshold)
     endif
 if (Index == 2)
        Message := '也可以通过直接操纵新颖性边界来单独调整单个级别的敏感度'
        dev_disp_text (Message, 'window', 12, 12, 'black', [], [])
        set_texture_inspection_model_param (TextureInspectionModel, 'sensitivity', 0)
        Offset := [25,10,30]
        get_texture_inspection_model_param (TextureInspectionModel, 'novelty_threshold', NoveltyThreshold)
        set_texture_inspection_model_param (TextureInspectionModel, 'novelty_threshold', Offset + NoveltyThreshold)
        get_texture_inspection_model_param (TextureInspectionModel, 'novelty_threshold', NoveltyThreshold)
    endif
  endfor 
for Level := 1 to |WindowHandles| by 1
    dev_set_window (WindowHandles[Level - 1])
    dev_clear_window ()
endfor
dev_set_window (WindowHandle4)
dev_clear_window ()

工业软件Halcon的常用功能及常用工具展示_第13张图片
工业软件Halcon的常用功能及常用工具展示_第14张图片

补充:
Patch:相邻像素的集合。
Novelty Score:在测试过程中,将测试图像的纹理特征与纹理检查模型进行比较,并计算它们的’novelty score’。 该值越大,单个纹理特征越不适合纹理检查模型的可能性越大。
Novelty Threshold:Novelty Score高于该阈值,则纹理有缺陷。
“ novelty_region”是通过组合不同金字塔等级的新颖性区域而生成的,即不同层级金字塔组成的交集区域。如果只有单层金字塔,那么该层的新颖性区域直接就是novelty_region。

5. 测量拟合

测量用到的算子:

gen_measure_rectangle2(Row, Column, Angle, Length1, Length2, Width, Height, ‘bilinear’, MeasureHandle)
该算子的参数:
Length1:半宽
Length2:半高
Width:测量图像的宽
Height:测量图像的高
measure_pairs(Fuse, MeasureHandle, 1, 1, ‘negative’, ‘all’, RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
Sigma:平滑参数
Threshold:最小边缘振幅
Transition:找的正边缘还是负边缘(第一个边缘)
Select :选第一条边,还是最后一条,还是所有的边
RowEdgeFirst:边缘对中的第一个边缘的行坐标
ColumnEdgeFirst:边缘对中第一个边缘的列坐标
AmplitudeFirst:边缘对中第一个边缘的幅度值(就是一阶导数)
RowEdgeSecond:边缘对中的第二个边缘的行坐标
ColumnEdgeSecond:边缘对中第二个边缘的列坐标
AmplitudeSecond:边缘对中第二个边缘的幅度值(就是一阶导数)
IntraDistance :边缘对中左右边缘之间的距离
InterDistance:相邻两个边缘对中心的的距离
measure_pairs(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
measure_pos (Fuse, MeasureHandle, 1, 30, ‘all’, ‘all’, RowEdge, ColumnEdge, Amplitude, Distance)
measure_pos(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdge, ColumnEdge, Amplitude, Distance)

一维测量:

1.gen_measure_rectangle2 (Row, Column, Angle, Length1, Length2, Width, Height, ‘bilinear’, MeasureHandle)
2.measure_pairs (Fuse, MeasureHandle, 1, 1, ‘negative’, ‘all’, RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
3.close_measure (MeasureHandle)

结果:

工业软件Halcon的常用功能及常用工具展示_第15张图片

测量助手:

工业软件Halcon的常用功能及常用工具展示_第16张图片

拟合的示例:

首先提取边缘轮廓,然后进行阈值分割并提取骨架,最后生成轮廓。
read_image (Image, ‘fabrik’)
edges_image (Image, ImaAmp, ImaDir, ‘lanser2’, 0.5, ‘nms’, 12, 22)
threshold (ImaAmp, Edges, 1, 255)
skeleton (Edges, Skeleton)
gen_contours_skeleton_xld (Skeleton, Contours, 1, ‘filter’)
dev_display (Image)
dev_set_colored (6)
dev_display (Contours)

参数:

  • Image:原图
  • ImaAmp:边缘幅度图像
  • ImaDir:边缘方向图像
  • ‘lanser2’:边缘梯度算子
  • 0.5:平滑系数
  • ‘nms’:非极大值抑制
  • 12:比它小,就不是边缘
  • 22:比它大,就是边缘

结果:

工业软件Halcon的常用功能及常用工具展示_第17张图片

6. 频域+空间域结合法

域结合空间,就是换一个角度看问题,傅里叶变换可以将一个信号函数,分解一个一个三角函数的线性组合。进行频域分析往往符合:
1)具有一定纹理特征的图像,纹理可以理解为条纹,如布匹、木板、纸张等材质容易出现;
2)需要提取对比度低或者信噪比低的特征;
3)图像尺寸较大或者需要与大尺寸滤波器进行计算,此时转换至频域计算,具有速度优势。因为空间域滤波为卷积过程(加权求和),频域计算直接相乘。

相关案例有:

  • 脏污检测(低通滤波,差分,线提取)

在塑料薄膜上有一些线条型的脏污,如下图所示,在空间域中向提取脏污的区域比较困难因为,方格会影响空间域的二值化,所以可以在频域中去处理它。
工业软件Halcon的常用功能及常用工具展示_第18张图片
代码:

calculate_lines_gauss_parameters (43.5, [25,5], Sigma, Low, High)
read_image (Image, 'D:/1.png')
       decompose3 (Image, R, G, B)
       get_image_size(B, Width, Height)
       fft_generic (B, ImageFFT, 'to_freq', -1, 'none', 'dc_center', 'complex')
       gen_gauss_filter (ImageGauss, 100, 100, 0, 'n', 'dc_center', Width, Height)
       convol_fft (ImageFFT, ImageGauss, ImageConvol)
       fft_generic (ImageConvol, ImageFFT1, 'from_freq', 1, 'none', 'dc_center', 'byte')
       sub_image (B, ImageFFT1, ImageSub, 2, 100)
       lines_gauss (ImageSub, Lines, Sigma, Low, High, 'dark', 'true', 'gaussian', 'true')
       dev_display (B)
       dev_display (Lines)

结果:
工业软件Halcon的常用功能及常用工具展示_第19张图片
工业软件Halcon的常用功能及常用工具展示_第20张图片

其中,calculate_lines_gauss_parameters(根据线的最大宽度以及对比度计算出lines_gauss算子输入的Sigma、Low、High值)
calculate_lines_gauss_parameters( : : MaxLineWidth, Contrast : Sigma, Low, High)
MaxLineWidth (input_control) // lines_gauss要提取线条的最大宽度
Contrast (input_control) //lines_gauss要提取线的对比度。
Sigma (output_control) //获取用于lines_gauss输入的Sigma值
Low (output_control) //获取用于lines_gauss输入的Low 值
High (output_control) //获取用于lines_gauss输入的High 值

对于Contrast 参数:
Contrast 值不仅可以一个,也可以为两个:
当只选择一个值时,最小对比度将会默认为最大对比度的1/3,最小对比度越小,线条将会延伸到对比度较低的区域,即线条越长。反之,值越高,线条越短,但越突出。
当值为两个时,数组中的第二个值是要提取线的最小对比度,并且其值不能大于第一个值。比如:[20,10]。
lines_gauss(提取图像上的线条,提取的结果属于亚像素精度的XLD轮廓)
lines_gauss(Image , Lines ,Sigma, Low, High, LightDark, ExtractWidth, LineModel, CompleteJunctions )
Image (input_object) //输入图像
Lines (output_object) //检测线条(XLD)
Sigma (input_control) //高斯滤波值
Low (input_control) //滞后阈值分割的低阈值
High (input_control) //滞后阈值分割的高阈值
LightDark (input_control) //提取线条的类型,暗色还是亮色,(’dark’, ‘light’)
ExtractWidth (input_control) //是否提取线宽(‘false’,‘true’)
LineModel (input_control) //用来调整线条位置和宽度的线模型(‘bar-shaped’, ‘gaussian’, ‘none’, ‘parabolic’)
CompleteJunctions (input_control) //在断连的部分是否添加节点使线条连续(‘false’, ‘true’)

  • 检测表面微小凸起(高斯差分,灰度差,二值化)

如下图,使用频域处理细微的缺陷。

工业软件Halcon的常用功能及常用工具展示_第21张图片

思路:首先,使用两个低通滤波器,进行相减后构造了一个带阻滤波器来提取缺陷分量;然后,读入图像,灰度化,转频域,进行滤波,转回空间域;最后在空间域上blob分析,并进行显示。结果:

工业软件Halcon的常用功能及常用工具展示_第22张图片

相关参数:
gray_range_rect( Image , ImageResult , MaskHeight, MaskWidth: )
该函数用一个矩形掩膜计算图像中最大最小灰度的差,并体现到每个图像点,其中Image(in)用于被计算灰度值的图像;ImageResult(out)用于包含灰度值的图像;MaskHeight(in)用于滤波器掩模的高度;MaskWidth(in)用于滤波器掩模的宽度。在滤波后对图像进行 gray_range_rect (ImageFiltered, ImageResult, 10, 10)处理后(增强对比度,即亮部分)。

工业软件Halcon的常用功能及常用工具展示_第23张图片
工业软件Halcon的常用功能及常用工具展示_第24张图片

案例中通过两个高斯滤波器相减,构建一个带通滤波器,其函数GenGaussFilter为:GenGaussFilter(ImageFilter, Sigma1, Sigma2, Width, Height),常用于纹理缺陷检测。GenGaussFilter (ImageFilter, 2, 10, Width, Height)则是一个带通滤波器(或者“带阻滤波器”)——先通过高反差保留让中高频通过,然后通过高斯模糊抑制高频,最终让中频通过。

  • 测磨砂表面的缺陷(高斯滤波差分,分水岭,灰度共生矩阵)

由于磨砂表面粗糙、噪点多,影响二值化,如下图所示。因此首先使用频域高斯滤波进行差分;然后在空间域的blob分析使用分水岭域分割滤波后的图像;最后计算每个区域灰度共生矩阵,通过能量筛选缺陷。

工业软件Halcon的常用功能及常用工具展示_第25张图片
工业软件Halcon的常用功能及常用工具展示_第26张图片

cooc_feature_image(Regions, Image ,LdGray, Direction ,Energy, Correlation, Homogeneity, Contrast)函数用来计算图像的灰度共生矩阵,其中Regions(in)为要检查的区域,Image (in)为灰度图像,LdGray(in)为要区分的灰度值的数量(默认6),Direction (in)为矩阵的计算方向(‘0’,‘45’,‘90’,‘130’,‘mean’),Energy(out) 代表的是能量,Correlation(out)表示相关性,Homogeneity(out) 表示局部均匀性(熵),Contrast(out)为对比度(反差)。

能量(Energy):是对图像纹理的灰度变化稳定程度的度量,反应了图像灰度分布均匀程度和纹理粗细度。能量越大,表示灰度变化比较稳定,反映了纹理变化的均匀程度。对于灰度图来说,能量低说明灰度值低,对于彩色图来说,能量低说明光强低。
相关性(Correlation):表示纹理在行或者列方向的相似程度。相关性越大,相似性越高。
(熵)局部均匀性(Homogeneity):反映图像局部纹理的变化量(即复杂程度),熵值越大图像越复杂。
(反差)对比度(Contrast):表示矩阵的值的差异程度,也间接表现了图像的局部灰度变化幅度。反差值越大,图像中的纹理深浅越明显,表示图像越清晰;反之,则表示图像越模糊。

watersheds_threshold(Image ,Basins ,Threshold )算子:第一步:计算出分水岭(不使用该参数Threshold ),分割的盆地和调用算子watersheds得到的盆地是相同的;第二步:如果被一个分水岭分割的相邻盆地与对应分水岭的高度差小于Threshold ,盆地依次合并。假设B1和B2分别是两个相邻盆地的最小灰度值,W是盆地对应分水岭的最小灰度值。当满足以下条件时,两个盆地合并:max{W-B1,W-B2}

7.深度学习法

首先准备缺陷检测所需图片,然后编写代码,设置输入输出路径,设置参数,预处理数据集:
工业软件Halcon的常用功能及常用工具展示_第27张图片
工业软件Halcon的常用功能及常用工具展示_第28张图片
正样本:

工业软件Halcon的常用功能及常用工具展示_第29张图片
负样本:
工业软件Halcon的常用功能及常用工具展示_第30张图片
缺陷类型:

工业软件Halcon的常用功能及常用工具展示_第31张图片
在这里选用Mnist类似的训练网络,将要测试的图像进行切块处理(和训练样本大小一致64 x 64)。由于是检测缺陷有无,所以切块样本集只要涵盖整张测试图像即可,这样可以节约检测时间。当然如果对节拍要求不严格,完全可以用分类网络将缺陷边界分割出来,只不过切块方式是逐像素的。最后,输入一张相机采集图,输出NGOK,如果NG则输出缺陷区域。

检测结果:

工业软件Halcon的常用功能及常用工具展示_第32张图片
工业软件Halcon的常用功能及常用工具展示_第33张图片
工业软件Halcon的常用功能及常用工具展示_第34张图片
工业软件Halcon的常用功能及常用工具展示_第35张图片
工业软件Halcon的常用功能及常用工具展示_第36张图片
工业软件Halcon的常用功能及常用工具展示_第37张图片
工业软件Halcon的常用功能及常用工具展示_第38张图片

总结

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

你可能感兴趣的:(图像处理,笔记,记录,人工智能,计算机视觉,视觉检测,图像处理,经验分享)