主要内容

模式匹配

此示例显示如何使用二维归一化互相关进行模式匹配和目标跟踪。此示例使用预定义或用户指定的目标以及要跟踪的类似目标数。归一化互相关图显示,当值超过设定阈值时,将识别目标。

介绍

在本例中,您使用归一化互相关来跟踪视频中的目标模式。模式匹配算法包括以下步骤:

  • 对输入的视频帧和模板进行缩小,以减少匹配算法所需的计算量。

  • 在频域使用归一化互相关来寻找视频帧中的模板。

  • 模式的位置是通过寻找最大的互相关值来确定的。

初始化参数并创建模板

初始化所需的变量,如互相关的阈值和高斯金字塔分解的分解级别。

阈值=单个(0.99);级别=2;

准备一个视频文件读取器。

hVideoSrc = VideoReader (“vipboard.mp4”);

指定要跟踪的目标图像和相似目标的数量。默认情况下,该示例使用一个预定义的目标,并找到至多2个类似的模式。您可以将变量useDefaultTarget设置为false,以指定一个新的目标和要匹配的类似目标的数量。

useDefaultTarget = true;[Img, numberOfTargets, target_image] =...videopattern_gettemplate (useDefaultTarget);%按预定义因子对目标图像进行下采样。你这么做%减少互相关所需的计算量。目标图片=单个(目标图片);目标图片=大小(目标图片);目标图片=多级金字塔(目标图片,级别);目标图片=sqrt(总和(目标图片(:)。^2));旋转目标图像180度,并执行零填充%目标和输入图像的尺寸是相同的。target_image_rot=imrotate(target_image_gp,180);[rt,ct]=尺寸(目标图像旋转);Img=单个(Img);Img=多级金字塔(Img,级别);[ri,ci]=尺寸(Img);r_mod=2^nextpow2(rt+ri);c_mod=2^nextpow2(ct+ci);target_image_p=[target_image_rot zero(rt,c_mod-ct)];target_image_p=[target_image_p;零(r_mod-rt,c_mod)];%计算目标图像的二维FFTtarget_fft = fft2 (target_image_p);%初始化处理循环中使用的常量变量。target_size = repmat(target_dim_nopyramid, [numberOfTargets, 1]);获得= 2 ^(水平);Im_p = 0 (r_mod, c_mod,“单一”);%用于零填充C_一个=一个(rt,ct,“单一”);%用于使用conv计算平均值

创建一个系统对象以计算归一化互相关的局部最大值。

hFindMax=vision.LocalMaximaFinder(...“阈值”、单(1)...“最大值”,目标数目,...“NeighborhoodSize”, floor(size(target_image_gp)/2)*2 - 1);

创建系统对象以显示图案的跟踪。

深圳= get (0,“拉”);Pos = [20 sz(4)-400 400 300];hROIPattern =愿景。放像机(“名字”“将ROI覆盖在目标上”...“位置”、pos);

初始化图形窗口以绘制标准化互相关值

hPlot = videopatternplots (“设置”、numberOfTargets阈值);

在“视频”中搜索模板

创建一个处理循环以对输入视频执行模式匹配。此循环使用您在上面实例化的系统对象。当您到达输入文件的末尾时,循环将停止,该文件由录像机对象

虽然hasFrame(hVideoSrc)Im=rgb2gray(im2single(readFrame(hVideoSrc));减少图像大小以加快处理速度Im_gp = multilevelPyramid(Im, level);%频域卷积。Im_p(1:ri,1:ci)=Im_gp;%在img_fft = fft2 (Im_p);Corr_freq = img_fft .* target_fft;corrOutput_f = ifft2 (corr_freq);corrOutput_f = corrOutput_f(rt:ri, ct:ci);%计算图像能量和块运行瓦片的大小%目标模板。IUT_energy = (Im_gp) ^ 2;IUT = conv2(IUT_energy, c_1,“有效”)IUT=sqrt(IUT);%计算归一化互相关。norm_Corr_f=(腐蚀输出f)。/(IUT*目标能量);xyLocation=步长(hFindMax,norm\u Corr\f);%计算线性指数。* * * * * * * * * * * * * * * * * * * * *...xyLocation(:,1));norm_Corr_f_linear=norm_Corr_f(:);norm_Corr_value=norm_Corr_f_linear(linear_index);detect=(norm_Corr_value>threshold);target_roi=0(长度(检测),4);ul_corner=(增益。*(xyLocation(检测,:)+1);target_roi(检测,:)=[ul_corner,fliplr(目标大小(检测,:)];%绘制边框。国际货币基金组织(Imf) = insertShape (Im,“矩形”,目标投资回报率,“颜色”“绿色”);%绘制标准化互相关图。videopatternplots (“更新”、hPlot norm_Corr_value);步骤(hROIPattern,国际货币基金组织(Imf);结束snapnow%函数以计算特定级别的金字塔图像。功能outI = multilevelPyramid(inI, level) I = inI;outI =我;i=1:level outI = impyramid(i,“减少”);我= outI;结束结束

总结

这个例子展示了使用计算机视觉工具箱™在视频中找到用户定义的模式并跟踪它。该算法基于目标与被测图像的归一化频域互相关。视频播放器窗口显示已识别的目标位置的输入视频。图中还显示了目标和图像之间的归一化相关性,该相关性被用作匹配目标的度量。从图中可以看出,当相关值超过阈值(蓝色线表示)时,在输入视频中就会识别出目标,并以绿色边界框标记位置。

附录

本例中使用了以下辅助函数。