halcon学习笔记(14)——模板匹配

halcon的模板匹配种类有很多种,方法各有优缺点,一般有基于灰度的匹配,基于形状的匹配等等,这里具体理论和方法不做详解,只简单总结一个实例。图像匹配一般需要对旋转放缩进行处理,另外为了提高搜索效率,常用用图像金字塔来处理模板图像,图像金子塔就是把图像按一定算法,缩小为不同比例的模板,减少像素。一般的模板匹配流程如下:

 

所以首先创建模板,模板的创建就是采集一张自己需要的原始图像,如下我采集的原始图像:

 

我需要的是银联那个标志,生成模板的源代码如下:

read_image (Image, 'E:/HalconTest/实验2d匹配/exp/110.jpg')
*读取模板图像
rgb1_to_gray (Image, GrayImage)
*灰度操作
gen_rectangle1 (ROI_0, 189.5, 531.5, 325.5, 717.5)
*选择要匹配的图像,去除不必要的
reduce_domain (GrayImage, ROI_0, ImageReduced2)
*减少图像,分割出切除的那部分
bin_threshold (ImageReduced2, Region1)
*自动灰度阈值处理
connection (Region1, ConnectedRegions1)
*求联通域
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 8, 14016)
*选择图像
reduce_domain (ImageReduced2, SelectedRegions1, ImageReduced3)
*分割出图像
inspect_shape_model (ImageReduced3, ModelImages1, ModelRegions1, 4, 30)
*创建一个形状的表示模型
create_scaled_shape_model (ImageReduced3, 'auto', rad(-45), rad(90), 'auto', 0.9, 1, 0, 'no_pregeneration', 'ignore_global_polarity', 'auto', 'auto', ModelID)
*使用用图像创建带有缩放的匹配模板,上面的灰度分割什么的其实可以不要
*NumLevels 最高金子塔层数
*AngleStart 开始角度加rad(90)是将弧度制转为角度值
*AngleExtent 角度范围
*AngleStep 旋转角度步长
*ScaleMin 模板行方向缩放最小尺度
*ScaleMax 模板行方向缩放最大尺寸
*MinScore 最低匹配分值 百分比
*ScaleStep 步长
*Optimization 优化选项 是否减少模板点数
*Metric 匹配度量级性旋转 
*MinContrast 最小对比度
*ModelID 生成模板ID
write_shape_model (ModelID, 'C:/Users/shanwenjun/Desktop/img_model3.shm')
*生成模板文件

生成的模板文件要用来进行匹配,下面是我用摄像头进行实时匹配的图像:

 

匹配的的源代码如下,左上角是图像处理过程叠加的:

dev_close_window ()
dev_open_window (0, 0, 640, 480, 'black', WindowHandle)
*先关闭活动图形窗口,再打开这个窗口,标识符为WindowHandle;
*相对于界面左上角第0行、第0列,大小是我相机的拍照比例,颜色为黑色。
open_framegrabber ('MindVision11', 1, 1, 0, 0, 0, 0, 'progressive', 8, 'Gray', -1, 'false', 'auto', 'Camera MV-U130RC#C17D8221-3', 0, -1, AcqHandle)
*DirectShow是笔记本摄像头或者其他DirectShow的摄像头,MindVision11是我相机的摄像头;
* 注意摄像头的名称,可以用工具栏中的“助手”——打开新的Image Acquisition获取摄像头及插入代码

grab_image_start (AcqHandle, -1)
while (true)
 grab_image_async (Image, AcqHandle, -1) 
* Calibration 01: Code generated by Calibration 01
CamParOriginal:= [0.01629,-2024.24,8.30436e-006,8.3e-006,710.402,361.975,1280,960]
CameraPose := [-0.0236413,0.0135896,0.152813,16.2821,3.05758,76.5791,0]
*上面是我相机的标定量,根据自己相机标定填写,此段代码不可直接用

CamParVirtualFixed:=CamParOriginal  
CamParVirtualFixed[1]:=0  
*上面是标定时候的参数设置

gen_radial_distortion_map(MapFixed,CamParOriginal,CamParVirtualFixed,'bilinear')  
*生产径向畸变映射图,  
*mapfixed是输出,  
*CamParOriginal是标定后的参数,  
*CamParVirtualFixed也是输出的参数,  
*'bilinear'映射类型 

map_image(Image,MapFixed,ImageRectifiedFixed)  
*利用映射,消除图像畸变算子 

read_shape_model ('E:/HalconTest/实验2d匹配/img_model/img_model3.shm', ModelID)
*读取图像
find_scaled_shape_model (ImageRectifiedFixed, ModelID, rad(-180), rad(180), 0.5, 1.2, 0.3, 1, 0.5, 'none', 4, 0.9, Row, Column, Angle, Scale, Score)
*寻找单个带尺度形状模板最佳匹配
*ImageRectifiedFixed 要搜索的图像
*ModelID 模板ID
*AngleStart 开始角度加rad(90)是将弧度制转为角度值
*AngleExtent 角度范围
*ScaleMin 模板行方向缩放最小尺度
*ScaleMax 模板行方向缩放最大尺寸
*MinScore 最低匹配分值 百分比
*NumMatches 匹配实例的个数
*MaxOverlap 最大重叠 在有重叠时也可检测匹配
*SubPixel 是否亚像素精度
*NumLevels 金子塔层数
*Greediness 搜索贪婪度; 0安全慢;1块不稳定;其他就是介于中间值
*剩下的几个参数是匹配图像的位置状态等参数
get_shape_model_contours (ModelContours, ModelID, 1)
*返回匹配结果的轮廓

for I := 0 to |Score| - 1 by 1
    *for循环查找匹配
     vector_angle_to_rigid (0, 0, 0, Row[I], Column[I], Angle[I], HomMat2DRotate)
    *单匹配计算刚性变换矩阵 为了显示匹配图像
     hom_mat2d_scale (HomMat2DRotate, Scale[I], Scale[I], Row[I], Column[I], HomMat2DScale)
     *添加一个扩展到一个均匀的二维变换矩阵 为了显示匹配图像
     affine_trans_contour_xld (ModelContours, ModelTrans, HomMat2DScale)       
     *应用任意二维仿射变换XLD轮廓 为了显示匹配图像
     disp_message (WindowHandle,'匹配一个', 'image', Row[I], Column[I]+100, 'blue', 'true') 
     *添加文本
     dev_display (ModelTrans)
     *显示模型 为了显示匹配图像
endfor
 
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* ****
* step: destroy model
* ****
endwhile
clear_shape_model (ModelID)


 

  • 19
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Halcon多目标模板匹配示例是使用Halcon软件进行目标识别和匹配的操作示范。在这个示例中,我们可以学习如何使用Halcon的多目标模板匹配功能来在图像中找到多个目标。 首先,我们需要准备一个目标模板作为匹配的参考。这个目标模板可以是一个已知的物体或特征,我们希望在图像中找到和匹配的目标。使用Halcon的模板创建工具,我们可以通过选取目标区域并提取其特征来生成目标模板。 接下来,我们需要加载要匹配的图像,并在图像中进行目标匹配。使用Halcon的多目标模板匹配算法,我们可以将目标模板应用于加载的图像中,并找到与目标模板匹配度最高的位置。 在匹配过程中,Halcon会计算模板和图像之间的相似度,并生成一个相似度图。我们可以通过设置相似度阈值来过滤出匹配度较高的结果。匹配成功后,Halcon会在图像中标出匹配的位置,并提供匹配结果的相关信息,如匹配度、旋转角度等。 此外,Halcon还提供了一些参数和选项,以便我们进一步优化匹配的结果。我们可以调整匹配模板的尺寸、平移、旋转等参数,以适应不同尺寸、角度的目标。此外,Halcon还支持在图像中进行目标区域的搜索窗口设置,以提高匹配的速度和准确性。 综上所述,Halcon多目标模板匹配示例是通过使用Halcon软件的多目标模板匹配算法,从加载的图像中找到和匹配目标模板。这个示例可以帮助我们理解和掌握Halcon的多目标模板匹配功能,从而应用于目标识别、图像处理等领域。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值