之前的两篇文章讲完在halcon中一维测量以及卡尺测量的一般步骤和思路。既然测量了,那肯定会涉及到如何将像素的距离转换成实际的距离,由于我的实验道具有限啊,没有标定板,无法去获得相机的内外参,等后期具备这个器材后再补上相机标定的内容。
之前也说过有了测量肯定少不了定位,所谓定位就是模板匹配的作用了,所以我们先讲完模板匹配的内容,然后在用一个完全的案例去演示下定位+测量的具体做法。
模板匹配,是模式识别中最容易的一种,这是在机器视觉领域中用的最多的,一般的视觉检测识别有无和视觉引导都离不开它。下面我们来介绍模板匹配的第一种基于灰度的匹配。
基于灰度的匹配的第一种方法,主要用到的算子是:
add_channels() ——把灰度值添加到区域中。
best_match() ——寻找一个模板和一个图像的最佳匹配。
只要后面带_mg,比如best_match_mg,属于金字塔;
需要适应大小的 要用adapt_template ;后面带rot,说明带角度搜索。
下面我们用一个案例来演示下这些如何去使用!
原图如下:
read_image (Image, 'C:/Users/Administrator/Desktop/ncc.png')
rgb1_to_gray (Image, GrayImage)
*随便画一个需要匹配找到的的目标区域
draw_circle (3600, Row, Column, Radius)
dev_set_draw ('margin')
*生成刚刚我们所画的区域
gen_circle (Circle, Row, Column, Radius)
reduce_domain (GrayImage, Circle, ImageReduced)
*从图像中创建模板
create_template (ImageReduced, 5, 4, 'sort', 'original', TemplateID)
*求出目标区域的大致内容
threshold (GrayImage, Region, 128, 255)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 1584.05, 2582.61)
*算子add_channels为区域中的每个区域创建一个图像,将来自输入图像Image的像素值“绘制”到该区域中。
*GrayRegions中返回元组形式的创建的图像。
*图像的所有通道都被采用。
*输出图像的定义域(ROI)被计算为图像的定义域与区域的交集。
*因此,新的定义域可以是输入区域的一个子集。 图像矩阵的大小没有改变。
add_channels (SelectedRegions, GrayImage, GrayRegions)
*选择图片中最佳匹配的内容
best_match (GrayRegions, TemplateID, 40, 'false', Row1, Column1, Error)
tuple_gen_const (|Row1|, 26, Radius1)
gen_circle (Circles, Row1, Column1, Radius1)
dev_display(Image)
dev_display(Circles)
clear_template(templateID)
画圈的区域:
最终匹配到的内容: