主要内容

vision.TemplateMatcher

定位模板在图像

描述

定位模板在图像。

  1. 创建vision.TemplateMatcher对象并设置其属性。

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

了解更多关于系统对象是如何工作的,看到的系统对象是什么?

创建

描述

例子

tMatcher= vision.TemplateMatcher匹配器对象返回一个模板,tMatcher。这个对象执行模板匹配通过转移单像素增加模板在整个室内的形象。

tMatcher= vision.TemplateMatcher (名称,值)设置使用一个或多个属性名称-值对。在报价附上每个属性的名字。例如,tMatcher = vision.TemplateMatcher('Metric','Sum of absolute differences')

属性

全部展开

属性,除非另有注明nontunable后,这意味着你不能改变它们的值调用对象。对象锁当你叫他们,释放函数打开它们。

如果一个属性可调在任何时候,你可以改变它的值。

改变属性值的更多信息,请参阅系统设计在MATLAB使用系统对象

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

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

指定搜索条件找到最小区别两个输入,指定为“详尽”“三步走”。如果你设定这个属性“详尽”,对象搜索最小差异像素的像素。如果你设定这个属性“三步走”,对象搜索最小差异使用稳步减少步长。的“三步走”方法在计算上更便宜的比“详尽”方法,但有时没有找到最优的解决方案。这个属性设置时适用OutputValue财产“最佳匹配位置”

使度量值输出,指定为真正的。这个属性设置时适用OutputValue财产“最佳匹配位置”

度量值的大小,指定为奇数。大小N的,N——- - - - - -N矩阵度量值是一个奇数。例如,如果3×3的设置这个属性矩阵大小3。这个属性设置时适用OutputValue财产“最佳匹配位置”BestMatchNeighborhoodOutputPort财产真正的

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

使输出的标志指示如果外部输入图像ROI的任何部分,指定为真正的。当你设定这个属性真正的,对象返回一个ROI的旗帜。国旗,当设置为表明,ROI的一部分是外部的输入图像。这个属性设置时适用ROIInputPort财产真正的

定点属性

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

操作整数输入超出范围时,指定为“包装”“饱和”

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

产品词和部分长度指定为一个按比例缩小的numerictype(定点设计师)对象。这个属性只适用于当你设置AccumulatorDataType财产“自定义”

数据类型的蓄电池,指定为“一样的产品”,同样作为输入的,或“自定义”

蓄电池词和部分长度,指定为一个按比例缩小的numerictype(定点设计师)对象。这个属性只适用于当你设置AccumulatorDataType财产“自定义”

使用

描述

例子

位置= tMatcher (,T)返回(xy)最好的模板匹配位置坐标相对于图像的左上角之间的图像矩阵,模板矩阵,T。对象单像素增量计算位置通过将模板在整个室内的形象。

(位置,numberOfValues,numValid)= tMatcher (,T,ROI)返回的位置最好的模板匹配位置,在最佳匹配度量值numberOfValues,一个逻辑国旗numValid。这适用于当你设置OutputValue财产“最佳匹配位置”BestMatchNeighborhoodOutputPort财产真正的

(位置,numberOfValues,numValid,ROIvalid)= tMatcher (,T,ROI)还返回一个逻辑国旗,ROIvalid指示是否ROI外部输入图像的边界吗。这适用于当你设置OutputValue财产“最佳匹配位置”,BestMatchNeighborhoodOutputPort,ROIInputPort,ROIValidityOutputPort属性真正的

(位置,ROIvalid)= tMatcher (,T,ROI)还返回一个逻辑标记ROIvalid如果指定的指示ROI外部输入图像的边界吗。这适用于当你设置OutputValue财产“最佳匹配位置”同时,ROIInputPortROIValidityOutputPort属性真正的

输入参数

全部展开

输入图像,指定为一个二维灰度或真彩图像。的性能TemplateMatcher对象可以依赖于输入类型。例如,使用数据类型输入会导致更快的性能。

输入模板,指定为二维灰度或真彩图像。

输入ROI,指定为研制出向量,xy宽度高度),前两个元素代表了矩形的左上角的坐标ROI。

输出参数

全部展开

位置的最佳模板匹配,返回的矢量格式(x,y)。坐标显示模板的中心相对于图像的左上角。更多细节,请参阅算法

度量值矩阵,返回为一个矩阵。一个numValid表明,周围的邻居最佳匹配扩展边界以外的度量值矩阵numberOfValues

有效的社区,返回真正的。一个numValid表明,周围的邻居最佳匹配扩展边界以外的度量值矩阵numberOfValues

有效的ROI附近,返回真正的。一个ROIvalid表明,ROI是外部输入图像的边界。

对象的功能

使用一个目标函数,指定系统对象™作为第一个输入参数。例如,释放系统资源的系统对象命名obj使用这个语法:

发行版(obj)

全部展开

一步 运行系统对象算法
释放 释放资源,并允许修改系统对象属性值和输入特征
重置 重置的内部状态系统对象

例子

全部折叠

这个例子显示了如何删除视频相机运动的影响。

介绍

在这个示例中,我们首先定义目标跟踪。在这种情况下,它是一辆汽车的车牌。我们也建立一个动态搜索区域的位置是由最后一个已知的目标位置。然后我们寻找的目标只有在这个搜索区域,从而降低找到目标所需的数量计算。在每个后续视频帧,我们确定目标已经相对于前一帧。我们用这些信息来删除不需要的平移相机运动并生成一个稳定的视频。

初始化

创建一个系统对象™读视频从一个多媒体文件。我们设置的输出强度只有视频。

%输入视频文件需要稳定。文件名=“shaky_car.avi”;hVideoSource = VideoReader(文件名);

创建一个模板匹配器系统对象计算的位置最佳匹配目标的视频帧。我们使用这个位置发现连续的视频帧之间的翻译。

hTM = vision.TemplateMatcher (“ROIInputPort”,真的,“BestMatchNeighborhoodOutputPort”,真正的);

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

hVideoOut = vision.VideoPlayer (“名称”,“视频稳定”);一轮hVideoOut.Position (1) = (0.4 * hVideoOut.Position (1));一轮hVideoOut.Position (2) = (1.5 * (hVideoOut.Position (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;%的高度以像素为单位(1:pos.search_border BorderCols = (1) + 4 W-pos.search_border (1) + 4: W);BorderRows = [1: pos.search_border (2) + 4 H-pos.search_border (2) + 4: H);深圳= [W H];TargetRowIndices =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;抵消= [0 0];目标= 0 (18、22);首次= true;

流处理循环

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

hasFrame (hVideoSource)输入= im2gray (im2double (readFrame (hVideoSource)));%找到输入视频帧中目标的位置如果首次Idx = int32 (pos.template_center_pos);MotionVector = [0 0];首次= false;其他的IdxPrev = Idx;投资回报率= [SearchRegion pos.template_size + 2 * pos.search_border);Idx = hTM(输入、目标ROI);MotionVector =双(Idx-IdxPrev);结束[抵消,SearchRegion] = updatesearch(深圳、MotionVectorSearchRegion、抵消、pos);%将视频帧来抵消摄像机运动稳定= imtranslate(输入、抵消“线性”);目标=稳定(TargetRowIndices TargetColIndices);%为显示添加黑色边框稳定(:,BorderCols) = 0;稳定(BorderRows:) = 0;(pos TargetRect =。template_orig-Offset pos.template_size);SearchRegionRect = [SearchRegion pos.template_size + 2 * pos.search_border);%画出矩形在输入显示和搜索区域目标输入= insertShape(输入,“矩形”,(TargetRect;SearchRegionRect),“颜色”,“白色”);%显示偏移量(位移)值在输入图像txt = sprintf (”(% f + 05.1, % + 05.1 f)”,抵消);输入= insertText(输入(:,:1)(191 215),三种,“字形大小”,16岁,“输入TextColor”,“白色”,“BoxOpacity”,0);%显示视频hVideoOut([输入(::1)稳定]);结束

结论

使用计算机视觉工具箱™从MATLAB®命令行功能很容易实现复杂系统如视频稳定。

附录

以下在本例使用helper函数。

算法

典型使用的模板匹配程序包括找到一个小区域内的一个更大的图片。该地区指定的模板映像,可以输入图像一样大,但通常小于输入图像。

对象输出最佳匹配坐标,相对于图像的左上角。(xy)的坐标位置对应模板的中心。当你使用一个模板与奇数个像素,该对象使用模板的中心。当你使用一个模板与偶数个像素,该对象使用的左上角为中心像素的位置。下面的表显示了对象输出位置(疯狂的),奇怪的甚至是模板:

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

扩展功能

版本历史

介绍了R2012a