文档

愿景。TemplateMatcher

在图像中定位模板

描述

在映像中定位模板。

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

  2. 调用带有参数的对象,就像调用函数一样。

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

创建

描述

例子

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

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

属性

全部展开

除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放函数打开它们。

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

有关更改属性值的更多信息,请参见在MATLAB中使用系统对象设计系统(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。该对象通过在整个图像内部以单像素增量的方式移动模板来计算位置。

(位置numberOfValuesnumValid) = tMatcher (TROI返回最佳模板匹配的位置位置,在最佳匹配附近的度量值numberOfValues,和一个逻辑标志numValid。当您设置OutputValue财产“最佳匹配位置”BestMatchNeighborhoodOutputPort财产真正的

(位置numberOfValuesnumValidROIvalid) = tMatcher (TROI也返回一个逻辑标志,ROIvalid指示是否ROI是否超出输入图像的边界。当您设置OutputValue财产“最佳匹配位置”,BestMatchNeighborhoodOutputPortROIInputPort,ROIValidityOutputPort属性真正的

(位置ROIvalid) = tMatcher (TROI也返回逻辑标志ROIvalid指示指定的ROI是否超出输入图像的边界。当您设置OutputValue财产“最佳匹配位置”,以及ROIInputPort而且ROIValidityOutputPort属性真正的

输入参数

全部展开

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

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

输入ROI,指定为四元向量,[xy宽度高度],其中前两个元素表示矩形ROI的左上角坐标。

输出参数

全部展开

最佳模板匹配的位置,作为格式为(xy).坐标表示模板的中心相对于图像的左上角。有关更多细节,请参见算法

度量值矩阵,作为矩阵返回。一个numValid指示最佳匹配周围的邻域扩展到度量值矩阵的边界之外numberOfValues

有效的邻域,返回为真正的。一个numValid指示最佳匹配周围的邻域扩展到度量值矩阵的边界之外numberOfValues

有效的ROI邻域,返回为真正的。一个ROIvalid表示该ROI在输入图像的边界之外。

对象的功能

要使用对象函数,请将System对象™指定为第一个输入参数。例如,释放名为obj,使用以下语法:

发行版(obj)

全部展开

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

例子

全部展开

这个例子展示了如何从视频流中删除摄像机运动的效果。

简介

在本例中,我们首先定义要跟踪的目标。在这种情况下,它是汽车的后部和车牌。我们还建立了一个动态搜索区域,其位置由最后一个已知目标位置确定。然后我们只在这个搜索区域内搜索目标,这减少了寻找目标所需的计算次数。在接下来的每一帧视频中,我们确定目标相对于前一帧移动了多少。我们使用这些信息来删除不需要的平移摄像机运动,并生成稳定的视频。

初始化

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

输入需要稳定的视频文件。文件名=“shaky_car.avi”;hVideoSource =愿景。VideoFileReader(文件名,...“ImageColorSpace”“强度”...“VideoOutputDataType”“双”);

创建一个模板匹配器系统对象来计算视频帧中目标的最佳匹配位置。我们使用这个位置来查找连续视频帧之间的转换。

hTM =愿景。模板米atcher(“ROIInputPort”,真的,...“BestMatchNeighborhoodOutputPort”,真正的);

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

hVideoOut =愿景。放像机(“名字”“视频稳定”);一轮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];% [xy]左上角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);fileInfo = info (hVideoSource);W = fileInfo.VideoSize (1);%宽度(像素)H = fileInfo.VideoSize (2);%高度(像素)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];深圳= fileInfo.VideoSize;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;Offset = [0 0];目标= 0(18、22);首次= true;

流处理循环

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

~isDone(hVideoSource) input = hVideoSource();查找目标在输入视频帧中的位置如果firstTime 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 =双(Idx-IdxPrev);结束[Offset, SearchRegion] = updatesearch(sz, MotionVector,...SearchRegion、抵消、pos);翻译视频帧以抵消相机运动= imtranslate(输入,偏移量,“线性”);目标=稳定(TargetRowIndices, TargetColIndices);添加黑色边框显示稳定(:,border) = 0;稳定(BorderRows,:) = 0;TargetRect = [pos. template_origin - offset, pos.template_size];SearchRegionRect = [SearchRegion, pos.template_size + 2*pos.search_border];在输入上绘制矩形以显示目标和搜索区域输入= insertShape(输入,“矩形”, (TargetRect;SearchRegionRect),...“颜色”“白色”);显示输入图像上的偏移(位移)值txt = sprintf (”(% f + 05.1, % + 05.1 f)”,抵消);input = insertText(input(:,:,1),[191 215],txt,“字形大小”, 16岁,...“输入TextColor”“白色”“BoxOpacity”, 0);%显示视频hVideoOut([输入(::1)稳定]);结束

释放

这里调用对象上的release方法来关闭所有打开的文件和设备。

释放(hVideoSource);

结论

使用MATLAB®命令行中的计算机视觉工具箱™功能,可以轻松实现像视频稳定这样的复杂系统。

附录

本例中使用了以下helper函数。

算法

模板匹配器的典型用法包括在较大的图像中查找小区域。该区域由模板图像指定,可以与输入图像一样大,但通常小于输入图像。

该对象输出相对于图像左上角的最佳匹配坐标。(xy]的坐标对应模板的中心。当使用像素为奇数的模板时,对象使用模板的中心。当使用具有偶数个像素的模板时,对象使用居中的左上角像素作为位置。下表显示了对象如何输出位置(疯狂的),奇数和偶数模板:

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

扩展功能

介绍了R2012a