目录
一、提要
模板匹配有多样,其中最重要的是轮廓匹配。该匹配对对象要求是:部分区域的形状特征比较明显。或在原始图像中, 具有特殊形状的区域。进而生成模板。在目标图像中,搜索与模板相似的区域,找到目标,即可确定坐标位置。
形状模板匹配,抗干扰能力强,即使图像部分模糊或部分遮挡,也能够稳定的匹配。
二、形状模板匹配案例
2.1 实验前的材料准备
以下实验实现基于形状的模板匹配。如何制作图片?
在做图片实验的时候,常常需要按照目的制造不同的图像;在实现图像模板匹配识别过程中,首先通过halcon做一些测试图片;本例首先介绍,如何按照一个物体图片1,生成一个测试图片2;


制作以上操作的代码:
read_image(Image, 'images/rote')
gen_rectangle1 (ROI_0, 179.9, 363.924, 270.1, 446.315)
reduce_domain(Image,ROI_0,ImageReduced)
crop_domain(ImageReduced, ImagePart)
for i:=0 to 36 by 1
rotate_image(ImagePart,ImageRotate,i*10,'weighted')
write_image( ImageRotate, 'bmp', 0, 'images/ring_'+ i$'02')
endfor
将上述各种角度的物件,编辑到一个文件,如图:
以上完成试验图片,下面继续用形状匹配发现图片上的物体。
2.2 匹配实验代码
将上一篇博客中的图像用来测试代码;在images目录下,存放若干张指环图片,用下述代码,进行形状识别:
dev_set_line_width(4)
list_image_files('images', 'default', [], ImageFiles)
read_image(Image, 'images/rote_all')
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display(Image)
gen_rectangle1 (ROI_0, 182.5, 364.5, 268.5, 444.5)
reduce_domain(Image, ROI_0, ImageReduced)
create_shape_model (ImageReduced, 'auto', 0, 6.28, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
for Index:=0 to |ImageFiles|-1 by 1
read_image(Image,ImageFiles[Index])
dev_display(Image)
find_shape_model (Image, ModelID, 0, 6.28, 0.5, 13, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
dev_display_shape_matching_results (ModelID, 'red', Row, Column, Angle, 1, 1, 0)
stop()
endfor
注意:上面典型的算子是 create_shape_model (),find_shape_model (), dev_display_shape_matching_results()三个算子,请查看它们的halp解释。
2.3 匹配结果
看出也有两个漏检成员。
2.4 另给出一个官方案例
*关闭窗口
dev_close_window ()
*打开窗口
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
*读取图像
read_image (Image, 'printer_chip/printer_chip_01')
*画矩形区域
draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
*生成矩形区域
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
*裁剪区域
reduce_domain (Image, Rectangle, ImageReduced)
*创建形状特征模板
create_shape_model (ImageReduced, 'auto', -0.39, 0.79, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
*保存模板
write_shape_model (ModelID, 'My_Model.shm')
*清理窗口
dev_clear_window ()
*读取图像
read_image (Image1, 'printer_chip/printer_chip_01')
*读取模板
read_shape_model ('My_Model.shm', ModelID)
*搜索形状特征模板
find_shape_model (Image1, ModelID, -0.39, 0.79, 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
*显示形状特征模板匹配结果
dev_display_shape_matching_results (ModelID, 'red', Row, Column, Angle, 1, 1, 0)
*显示中心点坐标
disp_message (WindowHandle, '坐标(R ,C)=('+Row+' ,'+Column+')', 'window', 50, 50, 'black', 'true')
三、结论
- 形状模板匹配速度较快
- 模板匹配可以旋转匹配
- 如果尺寸有大有小,可以对模板施行仿射变换,实现金字塔检验。
参考案例