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

16 篇文章 1 订阅
11 篇文章 0 订阅

1.BLOB+特征

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

输出的结果:

在这里插入图片描述
界面:

在这里插入图片描述
途中了解了一下局部阈值分割算子: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’)
给定具体的条件,该算子可以分割出不同的区域:
在这里插入图片描述
ThresholdImage图可以通过mean_image, binomial_filter, gauss_filter等滤波方式处理。
滤波选择的掩膜尺寸越大,提取的区域越大。根据经验,掩膜大小选择应该是要提取目标直径的两倍。参数Offset不要设置0,否则将会提取到很多小的噪点区域,一般介于5-40最佳,其值越大,提取的区域越小。
示例代码和其子函数:

在这里插入图片描述
在这里插入图片描述
其中子函数的参数设置为:

在这里插入图片描述

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

在这里插入图片描述

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)

界面:

在这里插入图片描述

运行的结果:

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

*参数设定'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

在这里插入图片描述

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

     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 ()

在这里插入图片描述
在这里插入图片描述

补充:
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)

结果:

在这里插入图片描述

测量助手:

在这里插入图片描述

拟合的示例:

首先提取边缘轮廓,然后进行阈值分割并提取骨架,最后生成轮廓。
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:比它大,就是边缘

结果:

在这里插入图片描述

6.频域+空间域结合法

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

相关案例有:

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

在塑料薄膜上有一些线条型的脏污,如下图所示,在空间域中向提取脏污的区域比较困难因为,方格会影响空间域的二值化,所以可以在频域中去处理它。
在这里插入图片描述
代码:

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)

结果:
在这里插入图片描述
在这里插入图片描述

其中,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’)

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

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

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

在这里插入图片描述
在这里插入图片描述

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}<Threshold 。由此得到的盆地存储在Basins 变量中。

7.深度学习法

首先准备缺陷检测所需图片,然后编写代码,设置输入输出路径,设置参数,预处理数据集:
在这里插入图片描述
在这里插入图片描述
正样本:

在这里插入图片描述
负样本:
在这里插入图片描述
缺陷类型:

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

检测结果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

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

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Halcon卡尺工具是一种基于模板匹配的图像测量工具,可以通过比较参考模板和待测图像中的相似度,实现对图像中目标物体的测量和定位。其原理简述如下: 1.模板预处理 首先需要准备一组用于测量的参考图像,称之为模板。模板预处理包括去噪、滤波、二值化等步骤,以提高模板的稳定性和准确性。 2.卡尺搜索 卡尺搜索是指在待测图像中通过卡尺线的方式查找与模板相似的区域。卡尺线可以是水平、垂直或者对角线。通过对待测图像进行卡尺搜索,可以找到与模板匹配的候选区域。 3.相似度度量 在找到候选区域之后,需要对其与模板的相似度进行度量,以找到最匹配的目标区域。常用的相似度度量方法包括NCC(归一化互相关)和SAD(平均绝对误差)等。 4.测量结果输出 通过对待测图像进行卡尺搜索和相似度度量,可以得到测量结果。测量结果可以是目标物体的位置、尺寸、角度等信息。通常情况下,卡尺工具会输出多组测量结果,可以根据需要进行筛选和处理。 总之,Halcon卡尺工具是一种基于模式匹配的图像测量工具,通过卡尺搜索和相似度度量,实现对图像中目标物体的测量和定位。在工业自动化、品质检测、机器人视觉等领域得到广泛应用。 ### 回答2: Halcon卡尺工具是一种用于图像处理功能模块,其主要原理是通过对图像的灰度值、形状等特征进行识别和分析,从而实现对图像中目标物体的测量、计算和检测。 该工具首先需要输入一张待处理的图片,在图片中选定一定的区域作为目标,并设置合适的阈值和参数。接着,程序会对图像进行分析,提取出目标的特征信息,如轮廓、边缘、角点等,并通过数学计算得出目标物体的尺寸、距离、角度等相关参数。 此外,Halcon卡尺工具还具有一定的自适应性能,可以根据不同的光照、噪声、变形等因素进行自动调整和优化。同时,该工具还支持多种不同形状的卡尺选择,如线、圆弧、矩形等,可以适应不同的目标形状和测量需求。 综上所述,Halcon卡尺工具是一种基于图像特征分析的测量和检测工具,其原理主要是通过对图像的分析、计算和识别,得出目标物体的相关参数,可广泛应用于机器视觉、自动化控制、工业检测等领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心清似水淡若云、

每打赏一元孩子的脸上多一分甜~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值