基於HALCON的模板匹配方法总结

合集下载

HALCON形状匹配总结

HALCON形状匹配总结

HALCON形状匹配总结Halcon有三种模板匹配方法:即Component-Based、Gray-Value-Based、Shaped_based,分别是基于组件(或成分、元素)的匹配,基于灰度值的匹配和基于形状的匹配,此外还有变形匹配和三维模型匹配也是分属于前面的大类本文只对形状匹配做简要说明和补充:Shape_Based匹配方法:上图介绍的是形状匹配做法的一般流程及模板制作的两种方法。

先要补充点知识:形状匹配常见的有四种情况一般形状匹配模板shape_model、线性变形匹配模板planar_deformable_model、局部可变形模板local_deformable_model、和比例缩放模板Scale_model第一种是不支持投影变形的模板匹配,但是速度是最高的,第二种和第四种是支持投影变形的匹配,第三种则是支持局部变形的匹配。

一般形状匹配模板是最常用的,模板的形状和大小一经制作完毕便不再改变,在查找模板的过程中,只会改变模板的方向和位置等来匹配目标图像中的图像。

这个方法查找速度很快,但是当目标图像中与模板对应的图像存在比例放大缩小或是投影变形如倾斜等,均会影响查找结果。

涉及到的算子通常为create_shape_model 和find_shape_model线性变形匹配模板planar_deformable_model是指模板在行列方向上可以进行适当的缩放。

行列方向上可以分别独立的进行一个适当的缩放变形来匹配。

主要参数有行列方向查找缩放比例、图像金字塔、行列方向匹配分数(指可接受的匹配分数,大于这个值就接受,小于它就舍弃)、设置超找的角度、已经超找结果后得到的位置和匹配分数线性变形匹配又分为两种:带标定的可变形模板匹配和不带标定的可变形模板匹配。

涉及到的算子有:不带标定的模板:创建和查找模板算子create_planar_uncalib_deformable_model和find_planar_uncalib_deformable_model带标定模板的匹配:先读入摄像机内参和外参read_cam_par 和read_pose 创建和查找模板算子create_planar_calib_deformable_model和find_planar_calib_deformable_model局部变形模板是指在一张图上查找模板的时候,可以改变模板的尺寸,来查找图像上具有局部变形的模板。

Halcon中模板匹配方法的总结归纳

Halcon中模板匹配方法的总结归纳

Halcon中模板匹配方法的总结归纳基于组件的模板匹配:应用场合:组件匹配是形状匹配的扩展,但不支持大小缩放匹配,一般用于多个对象(工件)定位的场合。

算法步骤:1.获取组件模型里的初始控件gen_initial_components()参数:ModelImage [Input] 初始组件的图片InitialComponents [Output] 初始组件的轮廓区域ContrastLow [Input] 对比度下限ContrastHigh [Input] 对比度上限MinSize [Input] 初始组件的最小尺寸Mode[Input] 自动分段的类型GenericName [Input] 可选控制参数的名称GenericValue [Input] 可选控制参数的值2.根据图像模型,初始组件,训练图片来训练组件和组件相互关系train_model_components()3.创建组件模型create_trained_component_model()4.寻找组件模型find_component_model()5.释放组件模型clear_component_model()基于形状的模板匹配:应用场合:定位对象内部的灰度值可以有变化,但对象轮廓一定要清晰平滑。

1.创建形状模型:create_shape_model()2.寻找形状模型:find_shpae_model()3.释放形状模型:clear_shape_model()基于灰度的模板匹配:应用场合:定位对象内部的灰度值没有大的变化,没有缺失部分,没有干扰图像和噪声的场合。

1.创建模板:create_template()2.寻找模板:best_match()3.释放模板:clear_template()基于互相关匹配:应用场合:搜索对象有轻微的变形,大量的纹理,图像模糊等场合,速度快,精度低。

1.创建模板:create_ncc_model()2.寻找模板:find_ncc_model()3.释放模板:clear_ncc_model()基于变形匹配:应用场合:搜索对象有轻微的变形。

HALCON形状匹配总结

HALCON形状匹配总结

HALCON形状匹配总结Halcon有三种模板匹配方法:即Component-Based、Gray-Value-Based、Shaped_based,分别是基于组件(或成分、元素)的匹配,基于灰度值的匹配和基于形状的匹配,此外还有变形匹配和三维模型匹配也是分属于前面的大类本文只对形状匹配做简要说明和补充:Shape_Based匹配方法:上图介绍的是形状匹配做法的一般流程及模板制作的两种方法。

先要补充点知识:形状匹配常见的有四种情况一般形状匹配模板shape_model、线性变形匹配模板planar_deformable_model、局部可变形模板local_deformable_model、和比例缩放模板Scale_model第一种是不支持投影变形的模板匹配,但是速度是最高的,第二种和第四种是支持投影变形的匹配,第三种则是支持局部变形的匹配。

一般形状匹配模板是最常用的,模板的形状和大小一经制作完毕便不再改变,在查找模板的过程中,只会改变模板的方向和位置等来匹配目标图像中的图像。

这个方法查找速度很快,但是当目标图像中与模板对应的图像存在比例放大缩小或是投影变形如倾斜等,均会影响查找结果。

涉及到的算子通常为create_shape_model 和find_shape_model线性变形匹配模板planar_deformable_model是指模板在行列方向上可以进行适当的缩放。

行列方向上可以分别独立的进行一个适当的缩放变形来匹配。

主要参数有行列方向查找缩放比例、图像金字塔、行列方向匹配分数(指可接受的匹配分数,大于这个值就接受,小于它就舍弃)、设置超找的角度、已经超找结果后得到的位置和匹配分数线性变形匹配又分为两种:带标定的可变形模板匹配和不带标定的可变形模板匹配。

涉及到的算子有:不带标定的模板:创建和查找模板算子create_planar_uncalib_deformable_model和find_planar_uncalib_deformable_model带标定模板的匹配:先读入摄像机内参和外参read_cam_par 和read_pose 创建和查找模板算子create_planar_calib_deformable_model和find_planar_calib_deformable_model局部变形模板是指在一张图上查找模板的时候,可以改变模板的尺寸,来查找图像上具有局部变形的模板。

halcon模板匹配讲解

halcon模板匹配讲解

在HALCON中,模板匹配是一种常见的方法,用于在一幅图像中查找与给定模板最匹配的区域。

这种方法可以用于目标检测、图像分割、模式识别等应用。

在HALCON中,模板匹配主要通过使用`find_template`函数来实现。

该函数用于在一幅图像中查找与给定模板最匹配的区域,并返回匹配区域的坐标、大小和旋转角度等参数。

在使用`find_template`函数进行模板匹配时,需要提供以下参数:
1. 输入图像:要进行匹配的图像。

2. 模板图像:用于匹配的模板图像。

3. 搜索区域:在输入图像中搜索模板的区域,通常可以指定一个矩形区域或者整个图像。

4. 匹配参数:用于控制匹配算法的参数,例如相似性度量、搜索策略等。

在HALCON中,还可以使用`create_template`函数来创建模板图像,以便后续使用。

该函数可以根据给定的图像和参数来生成模板,并返回模板的句柄。

此外,为了提高匹配的准确性和效率,还可以使用一些优化技术,
例如使用多级金字塔、使用滤波器进行预处理、使用约束条件等。

总之,HALCON中的模板匹配是一种强大的工具,可以用于各种图像处理任务。

通过正确地选择和使用匹配算法和参数,可以获得准确和高效的匹配结果。

halcon基于边缘的模板匹配算法

halcon基于边缘的模板匹配算法

文章主题:Halcon基于边缘的模板匹配算法探析一、引言在机器视觉领域,模板匹配是一种常用的图像处理方法,用于在一幅图像中寻找特定的模式或对象。

而Halcon作为一款智能视觉软件库,其基于边缘的模板匹配算法备受关注。

本文将就Halcon基于边缘的模板匹配算法进行深入探讨,以帮助读者更全面地理解这一主题。

二、Halcon基于边缘的模板匹配算法概述Halcon基于边缘的模板匹配算法是一种高级的模式识别技术,它通过检测图像中的边缘信息,并利用这些边缘特征进行模式匹配。

该算法主要包括边缘提取、模板生成和匹配验证三个步骤。

1. 边缘提取在Halcon中,边缘提取是通过边缘检测滤波器进行的。

常用的边缘检测算子包括Sobel、Prewitt和Canny等。

通过这些算子可以将图像中的边缘特征提取出来,形成边缘模型。

2. 模板生成在模板生成阶段,Halcon会通过提取的边缘信息来生成待匹配的模板。

模板的生成需要考虑到图像的尺度、旋转、光照等因素,以保证模板的鲁棒性和准确性。

3. 匹配验证匹配验证是模板匹配算法的核心步骤,Halcon基于边缘的模板匹配算法通过对图像进行模板匹配,并对匹配结果进行验证和优化,以确保匹配的准确性和稳定性。

三、Halcon基于边缘的模板匹配算法的特点相比于传统的模板匹配算法,Halcon基于边缘的模板匹配算法具有以下几点突出特点:1. 鲁棒性强由于边缘特征包含了物体的轮廓和形状等重要信息,因此Halcon基于边缘的模板匹配算法对光照、变形等因素的鲁棒性较强,能够更准确地匹配目标对象。

2. 适用性广Halcon基于边缘的模板匹配算法不受物体颜色、纹理等因素的影响,因此适用于各种场景和对象的匹配识别,具有较强的通用性和适用性。

3. 计算速度快由于边缘特征的提取和匹配计算相对简单,Halcon基于边缘的模板匹配算法在计算速度上具有一定的优势,能够实现实时性要求较高的应用场景。

四、个人观点与总结在我看来,Halcon基于边缘的模板匹配算法在实际应用中具有广泛的前景。

基於HALCON的模板匹配方法总结

基於HALCON的模板匹配方法总结

基於HALCON的模板匹配方法總結基於HALCON的模板匹配方法總結很早就想總結一下前段時間學習HALCON的心得,但由於其他的事情總是抽不出時間。

去年有過一段時間的集中學習,做了許多的練習和實驗,並對基於HDevelop的形狀匹配算法的參數優化進行了研究,寫了一篇《基於HDevelop的形狀匹配算法參數的優化研究》文章,總結了在形狀匹配過程中哪些參數影響到模板的搜索和匹配,又如何來協調這些參數來加快匹配過程,提高匹配的精度,這篇paper放到了中國論文在線了,需要可以去下載。

德國MVTec公司開發的HALCON機器視覺開發軟件,提供了許多的功能,在這裡我主要學習和研究了其中的形狀匹配的算法和流程。

HDevelop開發環境中提供的匹配的方法主要有三種,即Component-Based、Gray-Value-Based、Shape-Based,分別是基於組件(或成分、元素)的匹配,基於灰度值的匹配和基於形狀的匹配。

這三種匹配的方法各具特點,分別適用於不同的圖像特征,但都有創建模板和尋找模板的相同過程。

這三種方法裡面,我主要就第三種-基於形狀的匹配,做了許多的實驗,因此也做了基於形狀匹配的物體識別,基於形狀匹配的視頻對象分割和基於形狀匹配的視頻對象跟蹤這些研究,從中取得較好的效果,簡化了用其他工具,比如VC++來開發的過程。

在VC下往往針對不同的圖像格式,就會弄的很頭疼,更不用說編寫圖像特征提取、模板建立和搜尋模板的代碼呢,我想其中間過程會很復雜,效果也不一定會顯著。

下面我就具體地談談基於HALCON的形狀匹配算法的研究和心得總結。

1. Shape-Based matching的基本流程HALCON提供的基於形狀匹配的算法主要是針對感興趣的小區域來建立模板,對整個圖像建立模板也可以,但這樣除非是對象在整個圖像中所佔比例很大,比如像視頻會議中人體上半身這樣的圖像,我在後面的視頻對象跟蹤實驗中就是針對整個圖像的,這往往也是要犧牲匹配速度的,這個後面再講。

Halcon模板匹配学习篇

Halcon模板匹配学习篇

Halcon模板匹配学习篇Halcon模板匹配学习篇Halcon中模板匹配的总结基于灰度值的模板匹配基于相关性的模板匹配基于形状的模板匹配基于组件的模板匹配基于变形的模板匹配基于描述符的模板匹配基于相关性的模板匹配该⽅法使⽅⽅种基于⽅向量的归⽅化相关匹配法,在检测图像种匹配模板匹配。

与基于灰度值的匹配相⽅,该⽅法速度⽅较快,并且能够适应线光照变化。

匹配如下步骤:-(1)从参考图像上选择检测的⽅标。

-(2)创建模板。

创建⽅个归⽅化的相互关模型,create_ncc_model算⽅。

该操作符返回⽅个句柄参数Template:输⽅包括ROI的图像NumLevels:⽅字塔层数AngleStart and AngleExtent:模板可能出现在检测图像是哪个的旋转⽅度范围AngleStep:⽅度旋转变化的步长-(3)匹配结束之后,使⽅clear_ncc_model算⽅释放模板read_image (Image1,'E:/YZW/image/1.bmp')get_image_size (Image1, Width, Height)dev_close_window ()dev_open_window (0,0, Width/4, Height/4,'black', WindowHandle)dev_display (Image1)*选择ROI区域gen_rectangle1 (ROI_0,1322.32,449.966,1438.32,3877.97)area_center (ROI_0, Area, Row1, Column1)reduce_domain (Image1, ROI_0, ImageReduced)*创建基于相关性的匹配模板,输⽅模板图像和模型参数create_ncc_model (ImageReduced,'auto',-0.39,0.79,'auto','use_polarity', ModelID)*设置显⽅图像dev_set_draw ('margin')dev_set_line_width (3)dev_display (Image1)dev_display (ROI_0)stop ()*读取图像read_image (Image3,'E:/YZW/image/3.bmp')find_ncc_model (Image3, ModelID,-0.39,0.79,0.8,1,0.5,'true',0, Row, Column,Angle, Score)*dev_display_shape_matching_results (ModelID,'red', Row, Column, Angle,1,1,0)vector_angle_to_rigid (Row1, Column1,0, Row, Column,0, HomMat2D)affine_trans_region (ROI_0, RegionAffineTrans, HomMat2D,'nearest_neighbor')dev_display (Image3)dev_display (RegionAffineTrans)。

halcon——缺陷检测常用方法总结(模板匹配(定位)+差分)

halcon——缺陷检测常用方法总结(模板匹配(定位)+差分)

halcon——缺陷检测常⽤⽅法总结(模板匹配(定位)+差分)引⾔机器视觉中缺陷检测分为⼀下⼏种:blob分析+特征模板匹配(定位)+差分光度⽴体:特征训练测量拟合频域+空间域结合:深度学习本篇主要总结⼀下缺陷检测中的定位+差分的⽅法。

即⽤形状匹配,局部变形匹配去定位然后⽤差异模型去检测缺陷。

模板匹配(定位)+差分整体思路(形状匹配):1. 先定位模板区域后,求得模板区域的坐标,创建物品的形状模板create_shape_model,注意把模板的旋转⾓度改为rad(0)和rad(360)。

2. 匹配模板find_shape_model时,由于物品的缺陷使形状有局部的改变,所以要把MinScore设置⼩⼀点,否则匹配不到模板。

并求得匹配项的坐标。

3. 关键的⼀步,将模板区域仿射变换到匹配成功的区域。

由于差集运算是在相同的区域内作⽤的,所以必须把模板区域转换到匹配项的区域。

4. 之后求差集,根据差集部分的⾯积判断该物品是否有缺陷。

模板匹配(定位)+差分的⽅法主要⽤来检测物品损坏,凸起,破洞,缺失,以及质量检测等。

halcon例程分析:1,印刷质量缺陷检测(print_check.hdev)该例程⽤到了差异模型,将⼀个或多个图像同⼀个理想图像做对⽐,去找到明显的不同。

进⽽鉴定出有缺陷的物体。

差异模型的优势是可以直接通过它们的灰度值做⽐较,并且通过差异图像,⽐较可以被空间地加权。

变化模型检测缺陷的整体思路:1. create_variation_model —— 创建⼀个差异模型2. get_variation_model —— 获得差异模型3. train_variation_model —— 训练差异模型4. prepare_variation_model —— 准备差异模型5. compare_variation_model —— ⽐较模型与实例6. clear_variation_model —— 清除差异模型dev_update_off ()* 选择第1张图像创建形状模板read_image (Image, 'pen/pen-01')get_image_size (Image, Width, Height)dev_close_window ()dev_open_window (0, 0, Width, Height, 'black', WindowHandle)set_display_font (WindowHandle, 16, 'mono', 'true', 'false')dev_set_color ('red')dev_display (Image)* 把我感兴趣的区域抠出来,原则上范围越⼩越好,因为这样创建模板时⼲扰会少很多threshold (Image, Region, 100, 255)fill_up (Region, RegionFillUp)difference (RegionFillUp, Region, RegionDifference)shape_trans (RegionDifference, RegionTrans, 'convex')dilation_circle (RegionTrans, RegionDilation, 8.5)reduce_domain (Image, RegionDilation, ImageReduced)inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 1, 20)gen_contours_skeleton_xld (ModelRegions, Model, 1, 'filter')* 获得抠图区域的中⼼,这是参考点area_center (RegionDilation, Area, RowRef, ColumnRef)* 创建形状模板create_shape_model (ImageReduced, 5, rad(-10), rad(20), 'auto', 'none', 'use_polarity', 20, 10, ShapeModelID)* 创建变化模型(⽤于和缺陷⽐较)create_variation_model (Width, Height, 'byte', 'standard', VariationModelID)* ⽂件夹中前15张图⽚是质量良好的,可以⽤来训练模板for I := 1 to 15 by 1read_image (Image, 'pen/pen-' + I$'02d')* 先寻找模板的实例find_shape_model (Image, ShapeModelID, rad(-10), rad(20), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)if (|Score| == 1)if (|Score| == 1)* 使⽤仿射变换,将当前图像平移旋转到与模板图像重合,注意是当前图像转向模板图像vector_angle_to_rigid (Row, Column, Angle, RowRef, ColumnRef, 0, HomMat2D)affine_trans_image (Image, ImageTrans, HomMat2D, 'constant', 'false')* 训练差异模型train_variation_model (ImageTrans, VariationModelID)dev_display (ImageTrans)dev_display (Model)endifendfor* 获得差异模型get_variation_model (MeanImage, VarImage, VariationModelID)* 做检测之前可以先⽤下⾯这个算⼦对可变模型进⾏设参,这是⼀个经验值,需要调试者调整prepare_variation_model (VariationModelID, 20, 3)dev_set_draw ('margin')NumImages := 30* 可变模板训练完成后,我们终于可以进⼊主题,马上对所有图像进⾏缺陷检测,思想就是差分for I := 1 to 30 by 1read_image (Image, 'pen/pen-' + I$'02d')* 要注意做差分的两幅图像分辨率相同,当然也需要通过仿射变换把待检测的图像转到与模板图像重合* 先寻找模板的实例find_shape_model (Image, ShapeModelID, rad(-10), rad(20), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score) if (|Score| == 1)* 使⽤仿射变换,将当前图像平移旋转到与模板图像重合,注意是当前图像转向模板图像vector_angle_to_rigid (Row, Column, Angle, RowRef, ColumnRef, 0, HomMat2D)affine_trans_image (Image, ImageTrans, HomMat2D, 'constant', 'false')* 抠图reduce_domain (ImageTrans, RegionDilation, ImageReduced)* 差分(就是检查两幅图像相减,剩下的区域就是不同的地⽅了,与模板图像不同的地⽅就是缺陷)*这⾥可不能⽤difference做差分啊,halcon为变形模板提供了专门的差分算⼦:compare_variation_modelcompare_variation_model (ImageReduced, RegionDiff, VariationModelID)connection (RegionDiff, ConnectedRegions)* 特征选择:⽤⼀些特征来判断这幅图像印刷是否有缺陷,这⾥使⽤⾯积* 其实可以考虑利⽤区域⾯积的⼤⼩来判断缺陷的严重程度,这⾥就不过多讨论了select_shape (ConnectedRegions, RegionsError, 'area', 'and', 20, 1000000)count_obj (RegionsError, NumError)dev_clear_window ()dev_display (ImageTrans)dev_set_color ('red')dev_display (RegionsError)set_tposition (WindowHandle, 20, 20)if (NumError == 0)dev_set_color ('green')write_string (WindowHandle, 'Clip OK')elsedev_set_color ('red')write_string (WindowHandle, 'Clip not OK')endifendifif (I < NumImages)disp_continue_message (WindowHandle, 'black', 'true')stop ()endifendfor* 结语:如果发现前⾯作为训练变形模板的良好图像也被判定为NG,* 可以调整prepare_variation_model参数* 或者调整select_shape特征筛选的标准相关算⼦分析:create_variation_model(创建⼀个差异模型)create_variation_model(Width, Height, Type, Mode ,ModelID)//创建⼀个ID为ModelID,宽为Width,⾼为Height,类型为Type的差异模型参数参数Mode决定了创建标准图像和相应的变化图像的⽅法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基於HALCON的模板匹配方法總結
基於HALCON的模板匹配方法總結
很早就想總結一下前段時間學習HALCON的心得,但由於其他的事情總是抽不出時間。

去年有過一段時間的集中學習,做了許多的練習和實驗,並對基於HDevelop的形狀匹配算法的參數優化進行了研究,寫了一篇《基於HDevelop的形狀匹配算法參數的優化研究》文章,總結了在形狀匹配過程中哪些參數影響到模板的搜索和匹配,又如何來協調這些參數來加快匹配過程,提高匹配的精度,這篇paper放到了中國論文在線了,需要可以去下載。

德國MVTec公司開發的HALCON機器視覺開發軟件,提供了許多的功能,在這裡我主要學習和研究了其中的形狀匹配的算法和流程。

HDevelop開發環境中提供的匹配的方法主要有三種,即Component-Based、Gray-Value-Based、Shape-Based,分別是基於組件(或成分、元素)的匹配,基於灰度值的匹配和基於形狀的匹配。

這三種匹配的方法各具特點,分別適用於不同的圖像特征,但都有創建模板和尋找模板的相同過程。

這三種方法裡面,我主要就第三種-基於形狀的匹配,做了許多的實驗,因此也做了基於形狀匹配的物體識別,基於形狀匹配的視頻對象分割和基於形狀匹配的視頻對象跟蹤這些研究,從中取得較好的效果,簡化了用其他工具,比如VC++來開發的過程。

在VC下往往針對不同的圖像格式,就會弄的很頭疼,更不用說編寫圖像特征提取、模板建立和搜尋模板的代碼呢,我想其中間過程會很復雜,效果也不一定會顯著。

下面我就具體地談談基於HALCON的形狀匹配算法的研究和心得總結。

1. Shape-Based matching的基本流程
HALCON提供的基於形狀匹配的算法主要是針對感興趣的小區域來建立模板,對整個圖像建立模板也可以,但這樣除非是對象在整個圖像中所佔比例很大,比如像視頻會議中人體上半身這樣的圖像,我在後面的視頻對象跟蹤實驗中就是針對整個圖像的,這往往也是要犧牲匹配速度的,這個後面再講。

基本流程是這樣的,如下所示:
⑴首先確定出ROI的矩形區域,這裡只需要確定矩形的左上點和右下點的坐標即可,
gen_rectangle1()這個函數就會幫助你生成一個矩形,利用area_center()找到這個矩形的中心;
⑵然後需要從圖像中獲取這個矩形區域的圖像,reduce_domain()會得到這個ROI;這之後就可以對這個矩形建立模板,而在建立模板之前,可以先對這個區域進行一些處理,方便以後的建模,比如閾值分割,數學形態學的一些處理等等;
⑶接下來就可以利用create_shape_model()來創建模板了,這個函數有許多參數,其中金字塔的級數由Numlevels指定,值越大則找到物體的時間越少,AngleStart和AngleExtent 決定可能的旋轉范圍,AngleStep指定角度范圍搜索的步長;這裡需要提醒的是,在任何情
況下,模板應適合主內存,搜索時間會縮短。

對特別大的模板,用Optimization來減少模板點的數量是很有用的;MinConstrast將模板從圖像的噪聲中分離出來,如果灰度值的波動范圍是10,則MinConstrast應當設為10;Metric參數決定模板識別的條件,如果設為』use_polarity』,則圖像中的物體和模板必須有相同的對比度;創建好模板後,這時還需要監視模板,用inspect_shape_model()來完成,它檢查參數的適用性,還能幫助找到合適的參數;另外,還需要獲得這個模板的輪廓,用於後面的匹配,get_shape_model_contours()則會很容易的幫我們找到模板的輪廓;
⑷創建好模板後,就可以打開另一幅圖像,來進行模板匹配了。

這個過程也就是在新圖像中尋找與模板匹配的圖像部分,這部分的工作就由函數find_shape_model()來承擔了,它也擁有許多的參數,這些參數都影響著尋找模板的速度和精度。

這個的功能就是在一幅圖中找出最佳匹配的模板,返回一個模板實例的長、寬和旋轉角度。

其中參數SubPixel決定是否精確到亞像素級,設為』interpolation』,則會精確到,這個模式不會佔用太多時間,若需要更精確,則可設為』least_square』,』lease_square_high』,但這樣會增加額外的時間,因此,這需要在時間和精度上作個折中,需要和實際聯系起來。

比較重要的兩個參數是MinSocre和Greediness,前一個用來分析模板的旋轉對稱和它們之間的相似度,值越大,則越相似,後一個是搜索貪婪度,這個值在很大程度上影響著搜索速度,若為0,則為啟發式搜索,很耗時,若為1,則為不安全搜索,但最快。

在大多數情況下,在能夠匹配的情況下,盡可能的增大其值。

⑸找到之後,還需要對其進行轉化,使之能夠顯示,這兩個函數vector_angle_to_rigid()
和affine_trans_contour_xld()在這裡就起這個作用。

前一個是從一個點和角度計算一個剛體仿射變換,這個函數從匹配函數的結果中對構造一個剛體仿射變換很有用,把參考圖像變為當前圖像。

其詳細的流程圖和中間參數,如下圖所示:(無法上傳)
2. 基於形狀匹配的參數關系與優化
在HALCON的說明資料裡講到了這些參數的作用以及關系,在上面提到的文章中也作了介紹,這裡主要是重復說明一下這些參數的作用,再強調一下它們影響匹配速度的程度;在為了提高速度而設置參數之前,有必要找出那些在所有測試圖像中匹配成功的設置,這時需考慮以下情況:
①必須保證物體在圖像邊緣處截斷,也就是保證輪廓的清晰,這些可以通過形態學的一些方法來處理;
②如果Greediness值設的太高,就找不到其中一些可見物體,這時最後將其設為0來執行完全搜索;
③物體是否有封閉區域,如果要求物體在任何狀態下都能被識別,則應減小MinScore 值;
④判斷在金字塔最高級上的匹配是否失敗,可以通過find_shape_model()減小
NumLevels值來測試;
⑤物體是否具有較低的對比度,如果要求物體在任何狀態下都能被識別,則應減小MinContrast值;
⑥判斷是否全局地或者局部地轉化對比度極性,如果需要在任何狀態下都能被識別,則應給參數Metric設置一個合適的值;
⑦物體是否與物體的其他實例重疊,如果需要在任何狀態下都能識別物體,則應增加MaxOverlap值;
⑧判斷是否在相同物體上找到多個匹配值,如果物體幾乎是對稱的,則需要控制旋轉范圍;
如何加快搜索匹配,需要在這些參數中進行合理的搭配,有以下方法可以參考:
①只要匹配成功,則盡可能增加參數MinScore的值;
②增加Greediness值直到匹配失敗,同時在需要時減小MinScore值;
③如果有可能,在創建模板時使用一個大的NumLevels,即將圖像多分幾個金字塔級;
④限定允許的旋轉范圍和大小范圍,在調用find_shape_model()時調整相應的參數;
⑤盡量限定搜索ROI的區域;
除上面介紹的以外,在保證能夠匹配的情況下,盡可能的增大Greediness的值,因為在後面的實驗中,用模板匹配進行視頻對象跟蹤的過程中,這個值在很大程度上影響到匹配的速度。

當然這些方法都需要跟實際聯系起來,不同圖像在匹配過程中也會有不同的匹配效果,在具體到某些應用,不同的硬件設施也會對這個匹配算法提出新的要求,所以需要不斷地去嘗試。

在接下來我會結合自己做的具體的實驗來如何利用HALCON來進行實驗,主要是在視頻對象分割和視頻對象的跟蹤方面。

相关文档
最新文档