主要内容

愿景。TemplateMatcher

在图像中找到模板

描述

在图像中找到模板。

  1. 创造愿景。TemplateMatcher对象并设置其属性。

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

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

创建

描述

例子

tMatcher=愿景。模板米atcher返回一个模板匹配器对象,tMatcher.此对象通过在整个图像内部以单像素增量移动模板来执行模板匹配。

tMatcher=愿景。模板米atcher(名称,值使用一个或多个名称-值对设置属性。将每个属性名用引号括起来。例如,tmatcher = Vision.templateMatcher.('Metric','Sum of absolute differences')

特性

展开全部

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

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

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

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

输出类型,指定为“度量矩阵”要么“最佳匹配位置”

指定搜索条件,以找到两个输入之间的最小差异,指定为'彻底的'要么'三步'.如果将此属性设置为'彻底的'时,对象逐像素搜索最小差值。如果将此属性设置为'三步',对象使用稳定降低的步长搜索最小差异。这'三步'方法在计算上比'彻底的'方法,但有时找不到最优解。属性设置时将应用此属性OutputValue财产“最佳匹配位置”

使能度量值输出,指定为真正的要么.属性设置时将应用此属性OutputValue财产“最佳匹配位置”

度量值的大小,指定为奇数。规模N, 的N-经过-N度量值为奇数的矩阵。例如,如果矩阵大小为3乘3,则将此属性设置为3..属性设置时将应用此属性OutputValue财产“最佳匹配位置”BestmatchneighborfoodOutputport.财产真正的

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

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

定点属性

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

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

产品数据类型,指定为同样作为输入的要么“自定义”

乘积字和分数长度,指定为一个比例numerictype.(定点设计师)目的。此属性仅在您设置时适用AccumulatorDataType财产“自定义”

累加器数据类型,指定为'与产品相同'同样作为输入的, 要么“自定义”

累加器单词和分数长度,按比例指定numerictype.(定点设计师)目的。此属性仅在您设置时适用AccumulatorDataType财产“自定义”

使用

描述

例子

地点= tMatcher (T返回(xy]最佳模板的位置坐标相对于图像矩阵之间图像的左上角相匹配,,以及模板矩阵,T.对象通过在图像内部以单像素增量的方式移动模板来计算位置。

地点NumberofValues.numvalid.] = tmatcher(TROI返回最佳模板匹配的位置地点,最佳匹配周围的度量标准值NumberofValues.,和一个逻辑标志numvalid..这适用于您设置OutputValue财产“最佳匹配位置”BestmatchneighborfoodOutputport.财产真正的

地点NumberofValues.numvalid.ROIvalid] = tmatcher(TROI还返回逻辑标志,ROIvalid指示是否ROI超出输入图像的界限.这适用于您设置OutputValue财产“最佳匹配位置”,而且BestmatchneighborfoodOutputport.ROIInputPort,ROIValidityOutputPort属性真正的

地点ROIvalid] = tmatcher(TROI也返回一个逻辑标志ROIvalid表示指定的ROI超出输入图像的界限.这适用于您设置OutputValue财产“最佳匹配位置”,都是ROIInputPortROIValidityOutputPort属性真正的

输入参数

展开全部

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

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

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

输出参数

展开全部

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

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

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

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

对象的功能

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

发行版(obj)

展开全部

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

例子

全部折叠

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

介绍

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

初始化

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

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

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

htm = Vision.templateMatcher(“ROIInputPort”, 真的,......“BestMatchNeighborhoodOutputPort”, 真的);

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

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];最大水平和垂直位移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、抵消、pos);%转换视频帧以抵消摄像机运动稳定= intranslate(输入,偏移,'线性');Target =稳定化(TargetRowIndices, 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™功能,很容易实现视频稳定等复杂系统。

附录

本例中使用了下面的helper函数。

算法

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

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

模板中像素的奇数 模板中的像素数为偶数

扩展能力

介绍了R2012a