HALCON形状匹配总结doc.docx
《HALCON形状匹配总结doc.docx》由会员分享,可在线阅读,更多相关《HALCON形状匹配总结doc.docx(25页珍藏版)》请在冰点文库上搜索。
HALCON形状匹配总结doc
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
局部变形模板是指在一张图上查找模板的时候,可以改变
模板的尺寸,来查找图像上具有局部变形的模板。
例如包装
纸袋上图案查找。
参数和线性变形额差不多
算子如下:
create_local_deformable_model和
find_local_deformable_model
比例缩放末班匹配是介于一般形状匹配和线性变形匹配之
间的一种方法。
它可以匹配放大或是缩小的模板,但是仅限
于模板大小的缩放,即行列缩放因子一样。
这也是它和线性
缩放最大的不同。
涉及到的算子如下:
create_scale_shape_model和
find_scale_shape_model
HALCON形状匹配
LIntExportHerror
create_shape_model(constHobject&
Template,
//reduce_domain后的模板图像
Hlong
NumLevels,
//金字塔的层数,可设为“auto”或
0—10的整数
Double
AngleStart,
//模板旋转的起始角度
Double
AngleExtent,
//模板旋转角度范围,>=0
Double
AngleStep,
//旋转角度的步长,
>=0and
<=pi/16
constchar*Optimization,//设置模板优化和模板创建方
法
constchar*Metric,//匹配方法设置
HlongContrast,//设置对比度
HlongMinContrast,//设置最小对比度
Hlong*ModelID)//输出模板句柄
进一步分析:
NumLevels越大,找到匹配使用的时间就越小。
另外必须保
证最高层的图像具有足够的信息(至少四个点)。
可以通过
inspect_shape_model函数查看设置的结果。
如果最高层金字
塔的消息太少,算法内部会自动减少金字塔层数,如果最底
层金字塔的信息太少,函数就会报错。
如果设为auto,算法
会自动计算金字塔的层数,我们可以通过
get_shape_model_params函数查看金字塔的层数。
如果金字
塔的层数太大,模板不容易识别出来,这是需要将
find_shape_model函数中MinScore和Greediness参数设置
的低一些。
如果金字塔层数太少找到模板的时间会增加。
可
以先使用inspect_shape_model函数的输出结果来选择一个
较好的金字塔层数。
参数AngleStart、AngleExtent定义了模板可能发生旋转的范
围。
注意模板在find_shape_model函数中只能找到这个范围
内的匹配。
参数AngleStep定义了旋转角度范围内的步长。
如果在find_shape_model函数中没有指定亚像素精度,这个
参数指定的精度是可以实现find_shape_mode函数中的角度
的。
参数AngleStep的选择是基于目标的大小的,如果模板
图像太小不能产生许多不同离散角度的图像,因此对于较小
的模板图像AngleStep应该设置的比较大。
如果AngleExtent
不是AngleStep的整数倍,将会相应的修改AngleStep。
如果选择completepregeneration,不同角度的模板图像将
会产生并保存在内存中。
用来存储模板的内存与旋转角度的
数目和模板图像的的点数是成正比的。
因此,如果
AngleStep太小或是AngleExtent太大,将会出现该模型不再
适合(虚拟)内存的情况。
在任何情况下,模型是完全适合
主存储器的,因为这避免了操作系统的内存分页,使得寻找
匹配模板的时间变短。
由于find_shape_model函数中的角度
可以使用亚像素精度,一个直径小于200像素的模板可以选
择AngleStep>=1.如果选择AngleStep=’auto’(or向0
后兼容),create_shape_model将会基于模板的大小自动定义
一个合适的角度步长.自动计算出来的AngleStep可以使用
get_shape_model_params函数查看。
如果没有选择completepregeneration,该模型会在每一层
金字塔上建立在一个参考的位置。
这样在find_shape_model
函数运行时,该模型必须转化为不同的角度和尺度在运行时
在。
正因为如此,匹配该模型可能需要更多的时间。
对于特别大的模板图像,将参数Optimization设置为不同
于’none’的其他数值是非常有用的。
如果Optimization=
‘none’所,有的模型点将要存储。
在其他情况下,按照
Optimization的数值会将模型的点数减少.如果模型点数变少了,必须在find_shape_model函数中将参数Greediness
设为一个比较小的值,比如:
0.7、0.8。
对于比较小的模型,减
少模型点数并不能提高搜索速度,因为这种情况下通常显着
更多的潜在情况的模型必须进行检查。
如果Optimization设
置为’auto’,create_shape_model自动确定模型的点数。
Optimization的第二个值定义了模型是否进行预处理
(pregeneratedcompletely),是通过选择’pregeneration’或者’no_pregeneration’来设置的。
如果不使用第二个值(例如:
仅仅设置了第一个值),默认的是系统中的设置,是通过
set_system(
‘pregenerate_shape_models
’,设置)来的,对于
默认值是
(‘pregenerate_shape_models
’
=
‘false模型没’有),
进行预处理
.
模型的预处理设置通常会导致比较低的运行时
间,因为模型不需要
在运行时间时转换。
然而在这种情况
下,内存的要求和创建模板所需要的时间是比较高的。
还应
该指出,不能指望这两个模式返回完全相同的结果,因为在
运行时变换一定会导致变换模型和预处理变换模型之间不
同的内部数据。
比如,如果模型没有completely
pregenerated,在find_shape_model函数中通常返回一个较
低的scores,这可能需要将MinScore设置成一个较低的值。
此外,在两个模型中插值法获得的位置可能略有不同。
如果
希望是最高精确度,应该使用最小二乘调整得到模型位置。
参数Contras决定着模型点的对比度。
对比度是用来测量目
标与背景之间和目标不同部分之间局部的灰度值差异。
Contrast的选择应该确保模板中的主要特征用于模型中。
Contrast也可以是两个数值,这时模板使用近似
edges_image函数中滞后阈值的算法进行分割。
这里第一个
数值是比较低的阈值,第二个数值是比较高的阈值。
Contrast也可以包含第三个,这个数值是在基于组件尺寸选择重要模
型组件时所设置的阈值,比如,比指定的最小尺寸的点数还少的组件将被抑制。
这个最小尺寸的阈值会在每相邻的金字塔层之间除以2。
如果一个小的模型组件被抑制,但是不使用滞后阈值,然而在Contrast中必须指定三个数值,在这种情况下前两个数值设置成相同的数值。
这个参数的设置可以
在inspect_shape_model函数中查看效果。
如果Contrast设置为’auto’create,_shape_model将会自动确定三个上面描
述的数值。
或者仅仅自动设置对比度(‘auto_contrast’),滞后阈值(‘auto_contrast_hyst’)最或小是尺寸(‘auto_min_size’)中
一个。
其他没有自动设置的数值可以按照上面的格式再进行设置。
可以允许各种组合,例如:
如果设置
[‘auto_contrast’,’auto_min_size’],对比度和最小尺寸自动确
定;如果设置[‘auto_min_size’,20,30]最小尺,寸会自动设定,
而滞后阈值被设为20和30。
有时候可能对比度阈值自动设
置的结果是不满意的,例如,由于一些具体应用的原因当
某一个模型组件是被包含或是被抑制时,或是目标包含几种
不同的对比度时,手动设置这些参数效果会更好。
因此对比
度阈值可以使用determine_shape_model_params函数自动
确定,也可以在调用create_shape_model之前使用
inspect_shape_mode函数检查效果。
MinContrast用来确定在执行find_shape_model函数进行识
别时模型的哪一个对比度必须存在,也就是说,这个参数将
模型从噪声图像中分离出来。
因此一个好的选择应该是在图
像中噪声所引起的灰度变化范围。
例如,如果灰度浮动在10
个灰度级内,MinContrast应该设置成10。
如果模板和搜索
图像是多通道图像,Metric参数设置
成’ignore_color_polarity在一’个,通道中的噪声必须乘以通道
个数的平方根再去设置MinContrast。
例如,如果灰度值在
一个通道的浮动范围是10个灰度级,图像是三通道的,那
么MinContrast应该设置为17。
很显然,MinContrast必须小于Contrast。
如果要在对比度较低的图像中识别模板,
MinContrast必须设置为一个相对较小的数值。
如果要是模
板即使严重遮挡(occluded)也能识别出来,MinContrast
应该设置成一个比噪声引起的灰度浮动范围略大的数值,这
样才能确保在find_shape_model函数中提取出模板准确的
位置和旋转角度。
如果MinContrast设置为’auto’,最小对比
度会基于模板图像中的噪声自动定义。
因此自动设定仅仅在
搜索图像和模板图像噪声近似时才可以使用。
此外,在某些
情况下为了遮挡的鲁棒性,采用自动设定数值是比较好的。
使用get_shape_model_params函数可以查询自动计算的最小对比度。
参数Metric定义了在图像中匹配模板的条件。
如果Metric=
‘use_polarity’,图像中的目标必须和模型具有一样的对比度。
例如,如果模型是一个亮的目标在一个暗的背景上,那么仅
仅那些比背景亮的目标可以找到。
如果Metric=
‘ignore_global_polarity’,在两者对比度完全相反时也能找到目标。
在上面的例子中,如果目标是比背景暗的也能将目标
找到。
find_shape_model函数的运行时间在这种情况下将会略微增加。
如果Metric=‘ignore_local_polarity即使局’部,对
比度改变也能找到模型。
例如,当目标包含一部分中等灰度,并且其中部分比较亮部分比较暗时,这种模式是非常有用
的。
由于这种模式下find_shape_model函数的运行时间显著增加,最好的方法是使用create_shape_model创建几个反映目标可能的对比度变化的模型,同时使用find_shape_models
去匹配他们。
上面三个metrics仅仅适用于单通道图像。
如果是多通道图像作为模板图像或搜索图像,仅仅第一个通道被使用。
如果Metric=’ignore_color_pol
arity,’即使颜色对比度局部变化也能找到模型。
例如,当目
标的部分区域颜色发生变化(e.g.从红到绿)的情况。
如果不能
提前知道目标在哪一个通道是可见的这种模式是非常有用
的。
在这种情况下find_shape_model函数的运行时间也会急
剧增加。
’ignore_color_polarity’可以使用于具有任意通道数目
的图像中。
如果使用于单通道图像,他的效果和’ignore_loc
al_polarity’是完全相同的当。
Metric=‘ignore_color_polarity’
时,
create_shape_model创建的模板通道数目和
find_shape_model中的图像通道数目可以是不同的。
例如,
可以使用综合生成的单通道图像创建模型。
另外,这些通道
不需要是经过光谱细分(像RGB图像)的。
这些通道还可以包
括具有在不同方向照亮同一个目标所获得的图像。
模型图像Template的domain区域的重心是模板的初始位
置,可以在set_shape_model_origin函数中设置不同的初始
位置。
LIntExportHerrorfind_shape_model(constHobject&
Image,
//搜索图像
Hlong
ModelID,
//模板句柄
Double
AngleStart,
//搜索时的起始角度
Double
AngleExtent,
//搜索时的角度范围,必须与创建模
板时的有交集。
DoubleMinScore,//输出的匹配的质量系数Score都得
大于该值
HlongNumMatches,//定义要输出的匹配的最大个数
DoubleMaxOverlap,//当找到的目标存在重叠时,且重
叠大于该值时选//择一个好的输出
constchar*SubPixel,//计算精度的设置,五种模式,多
选2,3
Hlong
NumLevels,
//
搜索时金字塔的层数
Double
Greediness,
//贪婪度,搜索启发式,一般都设为
0.9,越高速度快
//容易出现找不到的
情况
Halcon:
:
HTuple*
Row,
//输出匹配位置的行坐标
Halcon:
:
HTuple*
Column,//输出匹配位置的列坐标
Halcon:
:
HTuple*
Angle,
//输出匹配角度
Halcon:
:
HTuple*
Score)
//输出匹配质量
进一步分析:
注意Row、Column的坐标并不是模板在搜索图像中的精确
位置,因此不能直接使用他们。
这些数值是为了创建变换矩
阵被优化后的,你可以用这个矩阵的匹配结果完成各种任
务,比如调整后续步骤的ROI。
Score是一个0到1之间的数,是模板在搜索图像中可见比
例的近似测量。
如果模板的一半被遮挡,该值就不能超过0.5。
Image的domain定义了模型参考点的搜索区域,模型参考
点是在create_shape_model中用来创建模型的图像的
domain区域的重心。
不考虑使用函数
set_shape_model_origin设置不同的初始位置。
在图像
domain区域的这些点内搜索模型,其中模型完全属于这幅
图像。
这意味着如果模型超出图像边界,即使获得的质量系
数(score)大于MinScore也不能找到模型。
这种性能可以通过
set_system(‘border_shape_models’,’true这’样)那改些变超,出
图像边界,质量系数大于MinScore的模型也能找到。
这时
那些在图像外面的点看作是被遮挡了,可以降低质量系数。
在这种模式下搜索的时间将要增加。
参数AngleStart和AngleExtent确定了模型搜索的旋转角度,
如果有必要,旋转的范围会被截取成为create_shape_model
函数中给定的旋转范围。
这意味着创建模型和搜索时的角度
范围必须真正的重叠。
在搜索时的角度范围不会改变为模
2*pi的。
为了简化介绍,在该段落剩下的部分所有角度都用
度来表示,而在find_shape_model函数中使用弧度来设置
的。
因此,如果创建模板时,AngleStart=-20°、
AngleExtent=40°,在搜索模板函数find_shape_model中设
置AngleStart=350°、AngleExtent=20°,尽管角度模360后
是重叠的,还是会找不到模板的。
为了找到模板,在这个例子中必须将AngleStart=350°改为AngleStart=-10°。
参数MinScore定义模板匹配时至少有个什么样的质量系数才算是在图像中找到模板。
MinScore设置的越大,搜索的就
越快。
如果模板在图像中没有被遮挡,
MinScore
可以设置
为
0.8
这么高甚至
0.9。
NumMatches定义了在图像上找到模板的最大的个数。
如果
匹配时的质量系数大于MinScore的目标个数多于
NumMatches,仅仅返回质量系数最好的NumMatches个目
标位置。
如果找的匹配目标不足NumMatches,那么就只返
回找到的这几个。
参数MinScore优于NumMatches。
如果模型具有对称性,会在搜索图像的同一位置和不同角度
上找到多个与目标匹配的区域。
参数MaxOverlap是0到1
之间的,定义了找到的两个目标区域最多重叠的系数,以便
于把他们作为两个不同的目标区域分别返回。
如果找到的两
个目标区域彼此重叠并且大于MaxOverlap,仅仅返回效果最
好的一个。
重叠的计算方法是基于找到的目标区域的任意方
向的最小外接矩形(看smallest_rectangle2)。
如果
MaxOverlap=0,找到的目标区域不能存在重叠,如果
MaxOverlap=1,所有找到的目标区域都要返回。
SubPixel确定找到的目标是否使用亚像素精度提取。
如果
SubPixel设置为’none'(或者’false背景’兼容),模型的位置仅
仅是一个像素精度和在create_shape_model中定义的角度
分辨率。
如果SubPixel设置为’interpolation'(或’true’),位
置和角度都是亚像素精度的。
在这种模式下模型的位置是在
质量系数函数中插入的,这种模式几乎不花费计算时间,并
且能达到足够高的精度,被广泛使用。
然而在一些精度要
求极高的应用中,模板的位置应该通过最小二乘调整决定,
比如通过最小化模板点到相关图像点的距离。
与
‘interpolation’相比,这种模式需要额外的计算时间。
对于最
小二乘调整的模