Halcon 第五章『模板匹配Matching』◆第2节:基于灰度值的模板匹配|Gray-Value-Based

本文详细介绍了基于灰度值的模板匹配算法,这是一种经典的图像处理技术,主要用于简单图像的匹配。算法通过计算模板图像与检测图像的像素灰度差值进行匹配,包括SAD和SSD两种方法。然而,该方法对光照变化和尺寸变化敏感,且不适用于多通道图像。文章还阐述了模板匹配的步骤,包括创建模板、适应图像大小、进行匹配和释放资源,并提供了相关函数的使用示例。尽管复杂度高、耗时且对变化敏感,但在特定条件下仍有其应用价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         一、介绍

        基于灰度值的模板匹配是最经典的模板匹配算法,也是最早提出来的模板匹配算法。这种算法的根本思想是,计算模板图像与检测图像之间的像素灰度差值的绝对值总和(SAD方法)或者平方差总和(SSD方法)。

        其原理是:首先选择一块ROI(感兴趣区域)作为模板图像,生成基于灰度值的模板;然后将检测图像与模板图像进行粗略匹配,在检测图像与模板图像中任选一点,采取隔点搜索的方式计算二者灰度的相似性,这样粗匹配一遍得到的粗相关点;接下来进行精匹配,将得到的粗相关点作为中心点,用最小二乘法寻找二者之间的最优匹配点。

        由于这种方法是利用模板图像的所有灰度值进行匹配,但是光照发生变化的情况下灰度值会产生强烈的变化,因此该方法不能使用于光照发生变化的情况,也不能用于多通道图像的匹配,一般只用于简单图像的匹配。

        此方法仅针对极少数的简单图像,才会考虑基于灰度值的匹配。

        二、基于灰度值的模板匹配的步骤

        基于灰度值的模板匹配适用于图像内灰度变化比较稳定,噪声比较少,且灰度差异比较明显的检测目标。但是该方法复杂度高,一次只能检测一个目标,耗时长,且对光照和尺寸变化十分敏感,所以不太推荐此方法。

        Legacy / Matching

        创建模版,模板匹配的准备模式。

create_template(Template : : FirstError, NumLevel, Optimize, GrayValues : TemplateID)

        Template:输入参数,输入准备好的模板图像。

        FirstError:输入参数,无用参数,默认255。

        NumLevel:输入参数,匹配金字塔的层级数。默认4。

        Optimize:输入参数,优化的方法类型。默认'sort'进行优化(结果稳定,但时间会稍长),范围'none'不优化, 'sort'。

        GrayValues:输入参数,使用原始图像的灰度还是使用边缘梯度进行匹配。 默认'original'

'gradient'光照情况比较稳定,图像灰度变化不大,可以选用(即使用原始灰度差值作为匹配的判断条件)。

'normalized',标准的。

'original'

'sobel'

        TemplateID:输出参数,创建模板后,返回的模板句柄。

        Legacy / Matching

        创建旋转模版,一种与旋转匹配的模板匹配的模式。

create_template_rot(Template : : NumLevel, AngleStart, AngleExtend, AngleStep, Optimize, GrayValues : TemplateID)

        Template:输入参数,输入准备好的模板图像。

        NumLevel:输入参数,金字塔层次的最大数。默认4。

        AngleStart:输入参数,最小旋转模式。默认-0.39,建议值 -3.14, -1.57, -0.79, -0.39, -0.20, 0.0。

        AngleExtend:输入参数,角度展开的最大正扩展。默认0.79,范围:AngleExtend > 0

        AngleStep:输入参数,步进率(角精度)的匹配。默认 0.0982,范围AngleStep > 0

        Optimize:输入参数,优化的方法类型。默认'sort'进行优化(结果稳定,但时间会稍长),范围'none'不优化, 'sort'。

        GrayValues:输入参数,使用原始图像的灰度还是使用边缘梯度进行匹配。 默认'original'

'gradient'光照情况比较稳定,图像灰度变化不大,可以选用(即使用原始灰度差值作为匹配的判断条件)。

'normalized'标准的。

'original'

'sobel'

        TemplateID:输出参数,创建模板后,返回的模板句柄。

        三、创建好模板后,接着可以使用各种匹配算子进行灰度的匹配

       adapt_template算子的作用:使由create_template算子所创建的模板适应镜像的大小。

        Legacy / Matching

        把一个模板用于一个图像的大小

adapt_template(Image : : TemplateID : )

        Image:输入参数,决定后期匹配大小的图像。

        TemplateID:输入参数,模板ID。

        ①进行匹配

        mg:表示的是在图像金字塔上进行匹配的。

        pre_mg:表示使用了预训练的金字塔,在算子的参数列表中可以设置金字塔的层级等参数。

        rot:表示检测图像可以选择一定的角度。

        Legacy / Matching

        寻找一个模版和一个图像的最佳匹配。(返回的是匹配结果最好的目标的坐标位置)

best_match(Image : : TemplateID, MaxError, SubPixel : Row, Column, Error)

        在金字塔中搜索最佳灰度值匹配。

best_match_mg(Image : : TemplateID, MaxError, SubPixel, NumLevels, WhichLevels : Row, Column, Error)

        在预生成的金字塔中寻找最佳灰度值匹配。

best_match_pre_mg(ImagePyramid : : TemplateID, MaxError, SubPixel, NumLevels, WhichLevels : Row, Column, Error)

        寻找一个模板和一个旋转图像的最佳匹配。

best_match_rot(Image : : TemplateID, AngleStart, AngleExtend, MaxError, SubPixel : Row, Column, Angle, Error)

        寻找一个模板和一个旋转金字塔的最佳匹配。

best_match_rot_mg(Image : : TemplateID, AngleStart, AngleExtend, MaxError, SubPixel, NumLevels : Row, Column, Angle, Error)

        快速匹配,寻找一个模板和一个图像的最佳匹配。(返回的是包含所有点的一个区域)

fast_match(Image : Matches : TemplateID, MaxError : )

        快速匹配,在金字塔中搜索最佳灰度值匹配。

fast_match_mg(Image : Matches : TemplateID, MaxError, NumLevel : )

        ②释放模板内存资源

        Legacy / Matching

        释放模板的内存。

clear_template( : : TemplateID : )

dev_close_window ()
dev_open_window (0, 0, 599, 464, 'black', WindowID)
*读取了一幅彩色图像
read_image (Imagecolor, 'data/holesBoard')
*将其转化为灰度图像
rgb1_to_gray (Imagecolor, Image)
dev_set_draw ('margin')
dev_set_line_width(3)
Row1 :=700
Column1 := 950
Row2 := 906
Column2 := 1155
*选择了一块矩形的ROI区域
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
dev_display (Rectangle)
*将ROI区域进行裁剪,变成模板图像
reduce_domain (Image, Rectangle, ImageReduced)
*创建模板,因为光照比较稳定,GrayValues选择‘original’
create_template (ImageReduced, 5, 4, 'sort', 'original', TemplateID)	
*读取测试图像
read_image (ImageNoise, 'data/holesBoardNoise')
*应用灰度模板并进行匹配
adapt_template (ImageNoise, TemplateID)
best_match_mg (ImageNoise, TemplateID, 35, 'false', 4, 'all', Row_, Column_, Error_)
dev_clear_window ()
dev_display (ImageNoise)
*根据匹配返回的坐标中心,绘制矩形标识框,将匹配到的目标框选出来
disp_rectangle2 (WindowID, Row_, Column_, 0, 95, 95)
*匹配结束,释放模板资源
clear_template (TemplateID)
holesBoard.jpg
holesBoardNoise.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值