您现在的位置是:首页 >其他 >halcon算子模板匹配(一)基于形状的模板匹配网站首页其他
halcon算子模板匹配(一)基于形状的模板匹配
简介halcon算子模板匹配(一)基于形状的模板匹配
一、基于形状模板匹配的原理
1.形状模板匹配的原理及实现过程
原理:是基于边缘方向梯度的匹配。该方法是以物体边缘的梯度相关性为 匹配标准,提取兴趣区区域内的边缘特征,根据模板的大小和清晰度要求生成多层级的图像金字塔模型,接着再图像金字塔层自上而下逐层搜索模板图像,直至搜索到底层或者确定的匹配结果为止。
优点:形状模板是最常用,最有效,最快速的匹配方法,对很多干扰因素不敏感,如光照和图像灰度发生变化,甚至支持局部边缘缺失杂乱场景,噪声,失焦,轻微变形。
缺点:不适用于旋转和缩放比较大的情况。
实现过程:
1.创建ROI区域,准备模板图像用来创建模板
2.图像预处理,改善图像质量,以便图像效果更好
3.创建模板用于模板匹配
4.获得图像模板的轮廓,用于之后的匹配
5.进行模板匹配,得到图像对应匹配区域的行纵坐标以及角度和匹配分值等信息。
2.形状模板匹配的应用场景
- 适用于目标轮廓比较清晰的场景。
- 适用于杂乱场景、遮挡、非线性光照变化、尺寸缩放、失焦和轻微形变的图像,以及多通道图像和多个模板的同步匹配。
- 适用于纹理简单的图像。
3.形状模板匹配算子及参数介绍
1.确定模板匹配的相关参数 determine_shape_model_params(可以自动获取类似对比度等参数)
determine_shape_model_params(Template, // 模板
‘auto’, // 金字塔层数
0, // 起始角度
rad(360), // 角度范围
0.9, // 缩小范围
1.1, // 放大范围
‘auto’, // 减少像素的方法
‘use_polarity’, // 极性
‘auto’, // 对比度
‘auto’, // 最小对比度
'all', // 需要自动确定的参数
ParameterName, // Name of values
2.创建模板 create_shape_model
create_shape_model(Template , // 模板图像
NumLevels, // 金字塔层数
AngleStart, // 起始角度
AngleExtent, // 角度范围
AngleStep, // 角度步长
Optimization, // 设置模板优化和模板创建方法
Metric, // 匹配方法设置
Contrast, // 模板中前景与背景的对比度
MinContrast, // 被查找图片的最小对比度
ModelID) // 模板ID
3.检测模板的金字塔层是否合理 inspect_shape_model
inspect_shape_model(Image : // 输入参数,输入图像
ModelImages, // 输出参数,输出图像基于金字塔的影像
ModelRegions : // 输出参数,输出模型区域
NumLevels, // 输入参数,使用的金字塔层数。默认4,范围1~10
Contrast : ) // 输入参数,设置对比度。默认30,参考10,20,30,40,60,80,100,120,140,160
4.在图像中搜索模板 find_shape_model
find_shape_model(Image, // 搜索图像
ModelID, // 模板句柄
AngleStart, // 搜索时的起始角度
AngleExtent, // 搜索时的角度范围,必须与创建模板时的有交集
MinScore, // 最小匹配值,输出的匹配的得分Score大于该值
NumMatches, // 定义要输出的匹配的最大个数
MaxOverlap, // 当找到的目标存在重叠时,且重叠大于该值时选择一个好的输出
SubPixel, // 计算精度的设置,五种模式,多选2,3
NumLevels, // 搜索时金字塔的层数
Greediness, // 贪婪度,搜索启发式,一般都设为0.9,越高速度快,容易出现找不到的情况
Row, Column, Angle, Score) // 输出匹配位置的行和列坐标、角度、得分(模板在搜索图像中可见比例的近似测量,如果模板的一半被遮挡,该值就不能超过0.5)
二、形状模板匹配的类型
- 一般形状匹配模板shape_model、
- 线性变形匹配模板planar_deformable_model、
- 局部可变形模板local_deformable_model、
- 和比例缩放模板Scale_model
三、形状模板匹配的案列及代码
*传入第一张图片做模板
read_image (Image, 'C:/Users/Maxwell/Desktop/模板匹配testimage/1.jpg')
rgb1_to_gray (Image, GrayImage)
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_display (GrayImage)
dev_set_draw ('margin')
*draw_rectangle2 (WindowHandle, Row1, Column1, Phi, Length1, Length2)
gen_rectangle2 (Rectangle, 2258.64, 893.313, -0.0, 228.375, 179.435)
reduce_domain (GrayImage, Rectangle, ImageReduced)
create_shape_model (ImageReduced, 'auto', rad(0),rad(360), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
* Image Acquisition 01: Code generated by Image Acquisition 01
list_files ('C:/Users/Maxwell/Desktop/模板匹配testimage', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
read_image (Image_t, ImageFiles[Index])
rgb1_to_gray (Image_t, GrayImage_t)
find_shape_model (GrayImage_t, ModelID, rad(0), rad(360), 0.1, 1, 0.5, 'least_squares', 0, 0.5, Row, Column, Angle, Score)
vector_angle_to_rigid (2258.64, 893.313, 0, Row, Column, Angle, HomMat2D)
dev_set_color ('green')
dev_set_line_width (3)
affine_trans_region (Rectangle, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
dev_display (GrayImage_t)
dev_display (RegionAffineTrans)
* Image Acquisition 01: Do something
endfor
创建的模板:
模板匹配的结果:
参考文章:(26条消息) halcon知识:常见三种模板匹配方法总结_halcon 模板匹配_无水先生的博客-CSDN博客
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。