主要内容

模式匹配

这个例子展示了如何使用模式匹配的二维归一化互相关和目标跟踪。示例使用预定义的或用户指定的目标和许多类似的目标跟踪。归一化互相关的情节显示值超过设定阈值时,目标识别。

介绍

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

  • 输入视频帧和模板是缩小以减少匹配算法所需的计算。

  • 归一化互相关,在频域,用于在视频帧找到一个模板。

  • 模式的位置是由寻找最大互相关值。

初始化参数并创建一个模板

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

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

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

hVideoSrc = VideoReader (“vipboard.mp4”);

指定目标图像和许多类似的目标跟踪。默认情况下,示例使用一个预定义的目标,发现2类似的模式。你可以设置变量useDefaultTarget假指定一个新的目标和类似的目标匹配的数量。

useDefaultTarget = true;[Img, numberOfTargets target_image] =videopattern_gettemplate (useDefaultTarget);% Downsample目标图像的一个预定义的因素。你这样做%减少计算所需的交叉相关性。target_image =单(target_image);target_dim_nopyramid =大小(target_image);target_image_gp = multilevelPyramid (target_image、水平);target_energy =√总和target_image_gp (:)。^ 2));%的目标图像旋转180度,并执行补零,这样%目标和输入图像的尺寸都是一样的。target_image_rot = imrotate (target_image_gp, 180);(rt, ct) = (target_image_rot)大小;Img =单(Img);Img = multilevelPyramid (Img、水平);(ri, ci) = (Img)大小;r_mod = 2 ^ nextpow2 (rt + ri);c_mod = 2 ^ nextpow2 (ct + ci);c_mod-ct target_image_p = [target_image_rot 0 (rt)];target_image_p = [target_image_p;0 (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_ones = 1 (rt、ct、“单一”);使用conv %用于计算的意思

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

hFindMax = vision.LocalMaximaFinder (“阈值”、单(1)“MaximumNumLocalMaxima”numberOfTargets,“NeighborhoodSize”、地板(大小(target_image_gp) / 2) * 2 - 1);

创建一个系统对象的跟踪显示模式。

深圳= get (0,“拉”);pos =(20深圳(4)-400 400 300);hROIPattern = vision.VideoPlayer (“名字”,“目标覆盖投资回报”,“位置”、pos);

图窗口初始化绘图归一化互相关值

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

搜索视频的一个模板

创建一个处理循环执行模式匹配输入的视频。这个循环使用上面的系统对象实例化。循环停止当你到达输入文件,检测到的VideoReader对象。

hasFrame (hVideoSrc) Im = rgb2gray (im2single (readFrame (hVideoSrc)));%减少图像大小,加快处理Im_gp = multilevelPyramid (Im);%频域卷积。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_ones,“有效”);IUT = sqrt (IUT);%计算归一化互相关。norm_Corr_f = (corrOutput_f)。/ (IUT * target_energy);xyLocation =步骤(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(长度(检测),4);ul_corner =(收益。* (xyLocation(检测:)1))+ 1;target_roi(探测、:)= (ul_corner fliplr (target_size(探测、:)));%画边界框。国际货币基金组织(Imf) = insertShape (Im,“矩形”target_roi,“颜色”,“绿色”);%画出归一化互相关。videopatternplots (“更新”、hPlot norm_Corr_value);步骤(hROIPattern,国际货币基金组织(Imf);结束snapnow%函数来计算金字塔图像在一个特定的水平。函数outI = multilevelPyramid (inI,级别)我= inI;outI =我;i = 1:水平outI = impyramid(我“减少”);我= outI;结束结束

总结

这个例子展示了使用计算机视觉工具箱™找到一个用户定义的模式在视频和跟踪它。该算法是基于归一化频域交叉测试目标和图像之间的相关性。视频播放器窗口显示输入视频确定目标的位置。也是一个图显示了规范化的目标和图像之间的相关性作为度量匹配目标。可以看到每当值超过阈值的相关性(蓝线),输入视频中的目标识别和位置标志是绿色的边界框。

附录

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