主要内容

Vision.templateMatcher.

在图像中找到模板

描述

在图像中找到模板。

  1. 创造Vision.templateMatcher.对象并设置其属性。

  2. 使用参数调用对象,就像它是一个函数。

要了解有关系统对象如何工作的更多信息,请参阅什么是系统对象?

创建

描述

例子

tmatcher.= Vision.templateMatcher返回模板匹配器对象,tmatcher.。此对象通过在整个图像内部以单像素增量移动模板来执行模板匹配。

tmatcher.= Vision.templateMatcher(名称,价值使用一个或多个名称值对设置属性。将每个属性名称括在引号中。例如,tmatcher = Vision.templateMatcher('公制','绝对差异的总和)

特性

展开全部

除非另有说明,否则属性是不可努力,这意味着在调用对象后无法更改其值。当您调用它们时,对象锁定发布功能解锁它们。

如果属性是调节,您可以随时更改其值。

有关更改属性值的详细信息,请参阅MATLAB使用系统对象的系统设计

用于模板匹配的指标,指定为'绝对差异的总和'“平方差异”, 要么'最大绝对差异'

输出类型,指定为'公制矩阵'要么'最佳匹配位置'

指定搜索条件,以找到两个输入之间的最小差异,指定为'彻底的'要么'三步'。如果您将此属性设置为'彻底的',对象通过像素搜索最小差异像素。如果您将此属性设置为'三步',对象使用稳定降低的步长搜索最小差异。这'三步'方法的计算方式比这更便宜'彻底的'方法,但有时找不到最佳解决方案。此属性在设置时适用outputValue.财产'最佳匹配位置'

使能度量值输出,指定为真的要么错误的。此属性在设置时适用outputValue.财产'最佳匹配位置'

度量值的大小,指定为奇数。规模N, 的N-经过-N标准值矩阵作为奇数。例如,如果矩阵大小为3-by-3将此属性设置为3.。此属性在设置时适用outputValue.财产'最佳匹配位置'BestmatchneighborfoodOutputport.财产真的

通过输入,指定为ROI规范真的要么错误的。将此属性设置为真的定义要执行模板匹配的感兴趣区域(ROI)。如果您将此属性设置为真的,必须指定ROI。否则,使用整个输入图像。

启用标志的输出,指示ROI的任何部分是否在输入图像中,指定为真的要么错误的。当您将此属性设置为时真的,该对象返回ROI标志。标志,设置为时错误的,表示ROI的一部分在输入图像之外。此属性在设置时适用Roiinputport.财产真的

定点属性

定点操作的舍入方法,指定为'地面''天花板''收敛''最近''圆形的'“最简单”, 要么'零'

当整数输入超出范围时,要采取的操作,指定为'裹'要么'饱和'

产品数据类型,指定为'与输入相同'要么'风俗'

产品字和分数长度,指定为缩放numerictype.(定点设计师)目的。此属性仅在您设置时适用AccumulatorDatyp.财产'风俗'

数据类型的累加器,指定为'与产品相同''与输入相同', 要么'风俗'

累加器字和分数长度,指定为缩放numerictype.(定点设计师)目的。此属性仅在您设置时适用AccumulatorDatyp.财产'风俗'

用法

描述

例子

地点= tmatcher(一世T.返回[Xy]最佳模板的位置坐标相对于图像矩阵之间图像的左上角相匹配,一世,以及模板矩阵,T.。该对象通过在图像内部以单像素增量转换模板来计算该位置。

[地点NumberofValues.numvalid.] = tmatcher(一世T.ROI.返回最佳模板匹配的位置地点,最佳匹配周围的度量标准值NumberofValues.和逻辑标志numvalid.。设置时适用outputValue.财产'最佳匹配位置'BestmatchneighborfoodOutputport.财产真的

[地点NumberofValues.numvalid.Roivalid.] = tmatcher(一世T.ROI.还返回逻辑标志,Roivalid.表示是否ROI.超出输入图像的界限一世。设置时适用outputValue.财产'最佳匹配位置',而且BestmatchneighborfoodOutputport.Roiinputport., 和RoivalityOutputport.属性真的

[地点Roivalid.] = tmatcher(一世T.ROI.也返回一个逻辑标志Roivalid.表示指定的ROI.超出输入图像的界限一世。设置时适用outputValue.财产'最佳匹配位置',都是Roiinputport.RoivalityOutputport.属性真的

输入参数

展开全部

输入图像,指定为2-D灰度或TrueColor图像。

输入模板,指定为2-D灰度或TrueColor图像。

输入ROI,指定为四元素矢量,[Xy宽度高度[前两个元件代表矩形ROI的左上角的坐标。

输出参数

展开全部

最佳模板匹配的位置,返回格式的向量(Xy)。坐标表示相对于图像的左上角的模板的中心。有关更多详细信息,请参阅算法

度量值矩阵,作为矩阵返回。一种错误的价值numvalid.表示围绕度量值矩阵的边界外部的最佳匹配附近NumberofValues.

有效的邻居,返回真的要么错误的。一种错误的价值numvalid.表示围绕度量值矩阵的边界外部的最佳匹配附近NumberofValues.

有效的ROI邻居,返回真的要么错误的。一种错误的价值Roivalid.表示ROI在输入图像的范围之外。

对象功能

要使用对象功能,请将System Object™指定为第一个输入参数。例如,要发布命名的系统对象的系统资源obj.,使用此语法:

释放(obj)

展开全部

跑步系统对象算法
发布 释放资源并允许更改系统对象属性值和输入特性
重置 重置内部状态系统对象

例子

全部收缩

此示例显示如何从视频流中删除相机运动的效果。

介绍

在此示例中,我们首先定义要跟踪的目标。在这种情况下,它是汽车的背部和车牌。我们还建立一个动态搜索区域,其位置由最后一个已知的目标位置确定。然后,我们仅在该搜索区域内搜索目标,这减少了找到目标所需的计算数量。在每个后续视频帧中,我们确定目标相对于前一帧的移动量。我们使用此信息删除不需要的翻译相机运动并生成稳定的视频。

初始化

创建系统对象™以从多媒体文件读取视频。我们将输出设置为强度的视频。

%输入视频文件需要稳定。filename =.'shaky_car.avi';hvideosource = Videoreader(文件名);

创建模板匹配系统对象以计算视频帧中目标的最佳匹配的位置。我们使用此位置找到连续视频帧之间的翻译。

htm = Vision.templateMatcher('roiinputport', 真的,......'bestmatchneighborfoodoutputport', 真的);

创建一个系统对象以显示原始视频和稳定的视频。

hvideoout = Vision.videoplayer('名称''视频稳定');hvideoout.position(1)= round(0.4 * hvideoout.position(1));hvideoout.position(2)=圆形(1.5 *(HVIDEOOUT.POST(2)));hvideoout.position(3:4)= [650 350];

在这里,我们初始化处理循环中使用的一些变量。

pos.template_orig = [109 100];%[x y]左上角pos.template_size = [22 18];%[宽度]pos.search_border = [15 10];%MAX水平和垂直位移pos.template_Center =楼层((POS.Template_Size-1)/ 2);pos.template_center_pos =(pos.template_orig + pos.template_center  -  1);w = hvideosource.width;%宽度为像素h = hvideosource.height;像素中的%高度bordercols = [1:pos.search_border(1)+4 w-pos.search_border(1)+4:w];borderrows = [1:pos.search_border(2)+4 h-pos.search_border(2)+4:h];sz = [w,h];targetrowindes =......pos.template_orig(2)-1:pos.template_orig(2)+ pos.template_size(2)-2;targetcolindices =......pos.template_orig(1)-1:pos.template_orig(1)+ pos.template_size(1)-2;searchRegion = pos.template_orig  -  pos.search_border  -  1;offset = [0 0];目标=零(18,22);第一个=真;

流处理循环

这是主要处理循环,它使用我们实例化的对象稳定输入视频。

尽管hasfame(hvideosource)输入= rgb2gray(im2double(ReadFride(HVIDEOSource)));%在输入视频帧中找到目标的位置如果第一个idx = int32(pos.template_center_pos);MotionVector = [0 0];第一个= false;别的idxprev = idx;roi = [searchregion,pos.template_size + 2 * pos.search_border];IDX = HTM(输入,目标,ROI);MotionVector = double(idx-idxprev);结尾[offset,searchRegion] = UpdateSearch(SZ,MotionVector,......SearchRegion,Offset,POS);%转换视频帧以抵消相机运动稳定= intranslate(输入,偏移,'线性');目标=稳定(TargetRowindes,TargetColindices);%添加黑色边框显示稳定的(:,bordercols)= 0;稳定(Borderrows,:) = 0;targetrect = [pos.template_orig-offset,pos.template_size];searchRegionRect = [SearchRegion,POS.Template_Size + 2 * POS.Search_Border];%绘制输入上的矩形以显示目标和搜索区域输入= insertshape(输入,'矩形',[targetrect;searchRegionRect],......'颜色''白色的');%在输入图像上显示偏移量(位移)值txt = sprintf('(%+ 05.1f,%+ 05.1f)', 抵消);输入=插入文本(输入(:,:,1),[191 215],TXT,'字体大小'16,......'textcolor''白色的''boxopacity',0);%显示视频hvideoout([输入(:,:,1)稳定]);结尾

结论

使用来自MATLAB®命令行的计算机Vision Toolbox™功能,很容易实现视频稳定等复杂系统。

附录

在此示例中使用以下辅助功能。

算法

模板匹配器的典型使用涉及在更大的图像中找到一个小区域。该区域由模板图像指定,该模板图像可以与输入图像一样大,但是其通常小于输入图像。

该对象输出相对于图像的左上角的最佳匹配坐标。这 [Xy]位置的坐标对应于模板的中心。使用具有奇数像素的模板时,对象使用模板的中心。使用具有偶数像素的模板时,对象使用居中的左上像素的位置。下表显示了对象如何输出所在位置(座垫),奇数甚至模板:

模板中的奇数像素 模板中的像素数均匀

扩展能力

在R2012A介绍