Halcon模板匹配是工程上使用必不可少的。
用途可定位,可查找,可识别,非常灵活
下面开始:
模板匹配是通过计算模板与图像之间的相似度实现的
完整性检测/物体识别/得到位姿
位姿刚性变换:平移和旋转方向的变换
相似变换:平移和旋转和缩放方向的变换
Halcon匹配共三种:
Component-Based:基于组件成分和元素
Gray-Value-Based:基于灰度值
Shape-Based:基于形状shape_model
基于灰度值的模板匹配
最简单的相似度量方法是计算模板和图像之间差值的绝对值综合和所有差值的平方和(SAD、SSD)
在光照保持不变的情况下,SAD/SSD效果非常好。
使用图形金字塔进行匹配
将图像和模板多次缩小2倍建立起来的数据结构为图像金字塔
为加快速度消除锯齿,需要均值滤波器平滑图像。用高斯滤波器尺寸必须偶数计算费时
基于灰度值的亚像素精度匹配
带旋转和缩放的模板匹配
其它可靠的算法:
基于边缘的模板匹配算法(基于边缘点和基于匹配几何基元)
几何哈希法匹配
基于组件的模板匹配:
应用场合:组件匹配是形状匹配的扩展,但不支持大小缩放匹配,一般用于多个对象(工件)定位的场合。
算法步骤:
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_template()
2.寻找模板:best_match()
3.释放模板:clear_template()
基于互相关匹配:
应用场合:搜索对象有轻微的变形,大量的纹理,图像模糊等场合,速度快,精度低。
1.创建模板:create_ncc_model()
2.寻找模板:find_ncc_model()
3.释放模板:clear_ncc_model()
基于变化模型匹配
应用场合:搜索对象有轻微的变形。
1.创建模板:create_variation_model()
2.准备和训练模型:
prepare_variation_model()
train_variation_model()
3.比较模板:compare_variation_model()
4.释放模板: clear_variation_model()
基于线性变形匹配:
应用场合:搜索对象有线性的变形,模板在行列方向上可以分别独立的进行一个适当的缩放变形来匹配, 主要参数有行列方向查找缩放比例、图像金字塔、行列方向匹配分数(指可接受的匹配分数,大于这个值就接受,小于它就舍弃)、设置超找的角度、已经超找结果后得到的位置和匹配分数。 分带标定的可变形模板匹配和不带标定的可变形模板匹配。
带标定的需要先读入摄像机内参 read_cam_par和外参 read_pose
1.创建模板:create_planar_calib_deformable_model()
create_planar_uncalib_deformable_model()
2.寻找模板:find_planar_calib_deformable_model()
find_planar_uncalib_deformable_model()
3.释放模板:clear_deformable_model()
基于比例缩放变形匹配:
应用场合:搜索对象有比例缩放的变形, 介于一般形状匹配和线性变形匹配之间的一种方法。它可以匹配放大或是缩小的模板,但是仅限于模板大小的缩放,即行列缩放因子一样。这也是它和线性缩放最大的不同。
1.创建模板:create_scaled_shape_model()
2.寻找模板:find_scaled_shape_model()
3.释放模板:clear_deformable_model()
基于局部变形匹配:
应用场合:搜索对象有局部变形, 在一张图上查找模板的时候,可以改变模板的尺寸,来查找图像上具有局部变形的模板。返回找到的变形的模板区域。
1.创建模板:create_local_deformable_model()
2.寻找模板:find_local_deformable_model()
3.释放模板:clear_deformable_model()
基于描述匹配:
应用场合:搜索对象有轻微的变形,透视的场合,根据一些描述点的位置和灰度值来进行匹配。
1.创建模板:create_calib_descriptor_model()
2.寻找模板:find_calib_descriptor_model()
3.释放模板:clear_descriptor_model()
各向异性的基于形状的匹配:
create_aniso_shape_model (ImageModel, 'auto', -rad(10), rad(20), 'auto', 0.9, 1.7, 'auto', 0.9, 1.1, 'auto', 'none', 'use_polarity', 'auto', 20, ModelID)
find_aniso_shape_model (Image, ModelID, -rad(10), rad(20), 0.9, 1.7, 0.9, 1.1, 0.7, 0, 0.5, 'least_squares', 0, 0.8, Row, Column, Angle, ScaleR, ScaleC, Score)
基于形状匹配:
针对ROI小区域建模板,应用场合: 模板的形状和大小一经制作完毕便不再改变,在查找模板的过程中,只会改变模板的方向和位置等来匹配目标图像中的图像。定位对象内部的灰度值可以有变化,但对象轮廓一定要清晰平滑。匹配速度比灰度快
【创建模板参数 create_shape_model】
create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast, MinContrast : ModelID)
create_shape_model (ImageROI, NumLevels, 0, rad(360), 'auto', 'none', 'use_polarity', 30, 10, ModelID)
【检察inspect_shape_model 可选】
inspect_shape_model(Image : ModelImages, ModelRegions : NumLevels, Contrast : )
创建好模板后,这时还需要监视模板,用inspect_shape_model()来完成,它检查参数的适用性,还能帮助找到合适的参数
inspect_shape_model (ImageROI, ShapeModelImages, ShapeModelRegions, 8, 30)
【保留轮廓后用get_shape_model_contours 可选】
get_shape_model_contours( : ModelContours : ModelID, Level : )
获得这个模板的轮廓,用于后面的匹配
get_shape_model_contours (ShapeModel, ModelID, 1)
【搜寻匹配find_shape_model】
find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Score)
在一幅图中找出最佳匹配的模板,返回一个模板实例的长、宽和旋转角度
参数设置:
find_shape_model (SearchImage, ModelID, 0, rad(360), 0.7, 1, 0.5, 'least_squares', 0, 0.7, RowCheck, ColumnCheck, AngleCheck, Score)
【 结果转化 vector_angle_to_rigid或 affine_trans_contour_xld】
后期结果的仿射变换和轮廓处理
看了感觉怎么样?来说说吧。。。
喜欢记得关注起来!赶紧的。