主要内容

模式匹配

这个例子展示了如何使用二维归一化互相关进行模式匹配和目标跟踪。该示例使用预定义的或用户指定的目标以及要跟踪的类似目标的数量。归一化互相关图表明,当值超过设定的阈值时,目标被识别。

介绍

在此示例中,您使用标准化的跨相关性来跟踪视频中的目标模式。模式匹配算法涉及以下步骤:

  • 输入视频帧和模板的大小减小,以最小化匹配算法所需的计算量。

  • 在频域中,在频域中归一化交叉相关用于在视频帧中找到模板。

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

初始化参数并创建模板

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

阈值=单(0.99);水平= 2;

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

hvideosrc = Videoreader(“vipboard.mp4”);

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

unimenedefaulttarget = true;[img,numperoftargars,target_image] =......Videopattern_getTemplate(UsedefaultTarget);按预定义的因子对目标图像进行下采样。你这样做%以减少互相关所需的计算量。target_image =单(target_image);target_dim_nopyramid =大小(target_image);target_image_gp = multilevelPyramid(target_image, level);target_energy =√总和target_image_gp(:)。^ 2));%将目标图像旋转180度,然后执行零填充%目标和输入图像的尺寸是相同的。Target_image_rot = imrotate(target_image_gp, 180);[rt, ct] = size(target_image_rot);Img =单(Img);Img = multilevelPyramid(Img, level);(ri, ci) = (Img)大小;R_mod = 2^nextpow2(rt + ri);C_mod = 2^nextpow2(ct + ci);Target_image_p = [target_image_rot zeros(rt, c_mod-ct)]; / /设置目标图像target_image_p = [target_image_p;0 (r_mod-rt c_mod)];%计算目标图像的2-D FFTtarget_fft = fft2(target_image_p);%初始化处理循环中使用的常量变量。target_size = repmat(target_dim_nopyramid,[numberofrogars,1]);增益= 2 ^(级别);im_p = zeros(r_mod,c_mod,'单身的');%用于零填充c_1 = 1 (rt, ct,'单身的');%用于使用conv计算平均值

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

hFindMax =愿景。LocalMaximaFinder (......'临界点',单(-1),......“MaximumNumLocalMaxima”numberOfTargets,......'邻里',地板(尺寸(target_image_gp)/ 2)* 2  -  1);

创建一个System对象来显示模式的跟踪。

sz = get(0,'屏幕尺寸');POS = [20 sz(4)-400 400 300];hroipattern = Vision.videoplayer('姓名'“在目标上覆盖ROI”......“位置”,pos);

初始化图形窗口,用于绘制归一化互相关值

hplot = VideopatterNplots(“设置”,numperoftarges,阈值);

在视频中搜索模板

创建一个处理循环,对输入视频执行模式匹配。这个循环使用上面实例化的System对象。当您到达输入文件的末尾时,循环将停止,这将由VideoReader对象。

hasFrame(hVideoSrc) Im = rgb2gray(im2single(readFrame(hVideoSrc)));%降低图像尺寸以加速处理IM_GP =多级血清哆啶(IM,Level);%频域卷积。Im_p(1:ri, 1:ci) = Im_gp;%零垫IMG_FFT = FFT2(IM_P);corr_freq = img_fft。* target_fft;corrutput_f = ifft2(corr_freq);CORROUTPUT_F = CORROUTPUT_F(RT:RI,CT:CI);%计算图像能量和块运行块的大小%的目标模板。iut_energy =(im_gp)。^ 2;iut = conv2(iut_energy,c_ones,“有效”);IUT = sqrt (IUT);%计算归一化交叉相关。norm_Corr_f = (corrOutput_f) ./ (IUT * target_energy);xyLocation = step(hFindMax, norm_Corr_f);%计算线性指数。linear_index = sub2ind([RI-RT,CI-CT] +1,XYLocation(:,2),......xyLocation (: 1));norm_Corr_f_linear = norm_Corr_f (:);norm_Corr_value = norm_Corr_f_linear (linear_index);检测= (norm_Corr_value >阈值);Target_roi = 0 (length(detect), 4);ul_corner =(收益。* (xyLocation(检测:)1))+ 1;Target_roi (detect,:) = [ul_corner, fliplr(target_size(detect,:))];%绘制边界框。imf = insertshape(Im,“矩形”target_roi,“颜色”“绿色”);%绘制归一化交叉相关。VideopatterNplots(“更新”,hplot,norm_corr_value);步骤(hroipattern,imf);结尾Snapnow.函数用于计算特定层次的金字塔图像。函数outi =多血清葡萄球菌(INI,Level)i = INI;outi = i;为了i = 1:级别outi = incylamid(我,'降低');我= outi;结尾结尾

总结

此示例显示了计算机Vision Toolbox™的使用,以查找视频中的用户定义模式并跟踪。该算法基于目标和被测图像之间的归一化频域交叉相关性。Video Player窗口显示使用识别的目标位置的输入视频。此外,图形显示了目标和图像之间的归一化相关,该图像用作匹配目标的度量。可以看出,只要相关值超过阈值(由蓝线表示),就可以在输入视频中识别目标,并且位置由绿色边界框标记。

附录

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