halcon原理:相关性匹配

一、基本原理

        NCC是基于统计学计算两组样本的相关性算法,其取值范围为【-1,1】之间,而对图像来说,每个像素看成RGB的向量,整个图像就是一个样本集合。如果它有一个子集,与另一个样本数据相互匹配,则它的NCC值为1;表示相关性很高,如果是-1,表完全无关;基于此原理实现模板的匹配识别,其第一步需要归一化数据,数学公式:

                ​​​​​​​        ​​​​​​​        \widetilde{f}=\frac{f-\mu}{\sigma}

        其中,f表示p点灰度值,\mu表示窗口内像素平均值,\sigma表示标准方差。

        假如t表示模板像素值,则:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        NCC=\frac{1}{n-1}\sum_{x,y}^{}\frac{(f(x,y)-\mu_f)(t(x,y)-\mu_t)}{\sigma_f\sigma_t}

        其中n是模板像素总数,n-1是自由度。

二、实现方法

1)获取模板像素的均值、标准差、像素和均值的fiff数据样本。

2)根据模板大小,在目标图像上,从上到下、从左到右平移模板,计算每移动一个像素后,模板与图像区域的NCC值,并且记录在中心点位置。完成后,各点的NCC和阈值比较,超出阈值的就是匹配结果。

3)用矩形框标志匹配位置。

4)使用UI输出。

三、Halcon的NCC匹配

        Halcon的ncc模板使用,由两个函数完成:create_ncc_model和find_ncc_model配合完成。以下我们准备了一个图片,来诠释这种匹配的

3.1 create_ncc_model和find_ncc_model函数

函数原型:

  • create_ncc_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Metric : ModelID)

Template: 模板的图像,可以是矩形,也可以是圆。

NumLevels:是模板的层次,如果一层,就用“auto”

AngleStart, AngleExtent, AngleStep:此三个表示角度模板旋转,起始角、终止角、旋转步长。

Metric:匹配标准

ModelID:模板标号

  • find_ncc_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels : Row, Column, Angle, Score)

Image:被检测的图像

ModelID:模板编号

AngleStart, AngleExtent:角度

MinScore:匹配分数

NumMatches:匹配,命中的模板数

MaxOverlap,

SubPixel:

NumLevels:模板层数

Row, Column, Angle, Score:返回值,命中的行、列、角度、分数值。

四、案例

1  打开一个灰度图像文件:

read_image (Image, 'F:/images/hugeImg/gtexst.jpg')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_update_window ('off')

halcon原理:相关性匹配

2 生成模板 

gen_circle (Circle, 210,692, 41)
area_center (Circle, Area, RowRef, ColumnRef)
reduce_domain (Image, Circle, ImageReduced1)
disp_image(ImageReduced1,WindowHandle)

gen_circle (Circle, 701,854, 59)
area_center (Circle, Area, RowRef, ColumnRef)
reduce_domain (Image, Circle, ImageReduced2)
disp_image(ImageReduced2,WindowHandle)

halcon原理:相关性匹配

 生成两个圆形模板 

create_ncc_model (ImageReduced1 , 5, 0, 10, 'auto', 'use_polarity', ModelID1)
get_ncc_model_params(  ModelID1 ,NumLevels, AngleStart, AngleExtent, AngleStep, Metric)

create_ncc_model (ImageReduced2 , 5, 0, 10, 'auto', 'use_polarity', ModelID2)
get_ncc_model_params(  ModelID2 ,NumLevels, AngleStart, AngleExtent, AngleStep, Metric)

3 模板匹配 

find_ncc_model (Image, ModelID1, 0, 10, 0.5, 1, 0.5, 'true', 0, Row1, Column1, Angle, Score1)
find_ncc_model (Image, ModelID2, 0, 10, 0.5, 1, 0.5, 'true', 0, Row2, Column2, Angle, Score2)

4 标出匹配区域 

dev_set_draw ('margin')
dev_set_colored (12)
dev_set_line_width (3)
dev_display (Image)

gen_rectangle1(Rectangle1, Row1-41, Column1-41, Row1+41, Column1+41)
gen_rectangle1(Rectangle2, Row2-59, Column2-59, Row2+59, Column2+59)
dev_set_window(WindowHandle)
dev_display(Rectangle1)
dev_display(Rectangle2)

halcon原理:相关性匹配

 

 五、相关函数列举

5.1 可能前置项:


draw_region
reduce_domain
threshold

5.2 可能后置项:

find_ncc_model
get_ncc_model_params
clear_ncc_model
write_ncc_model
set_ncc_model_origin
set_ncc_model_param

5.3 可能替代项:

create_shape_model
create_scaled_shape_model
create_aniso_shape_model
create_template_rot
 

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2022年6月1日
下一篇 2022年6月1日

相关推荐