主要内容

opticalFlowFarneback

目的利用Farneback方法估计光流

描述

创建一个光流对象,使用Farneback方法估计移动对象的方向和速度。使用对象函数estimateFlow来估计光流矢量。使用重置对象功能,可以重置光流对象的内部状态。

创建

描述

opticFlow= opticalFlowFarneback返回一个光流对象,您可以使用它来估计视频中移动对象的方向和速度。采用Farneback法估算光流。

例子

opticFlow= opticalFlowFarneback (名称,值返回指定为一个或多个属性的光流对象名称,值对参数。任何未指定的属性都有默认值。将每个属性名用引号括起来。

例如,opticalFlowFarneback (NumPyramidLevels, 3)

属性

全部展开

金字塔层数,指定为正标量。该值包括作为其中一个层的初始图像。当您将此值设置为1,函数仅从原始图像帧估计光流,不进行金字塔分解。建议取值为:14

图像比例,指定为范围(0,1)内的正标量。该值指定每个金字塔层的下采样率。的值0.5创建了一个经典的金字塔,金字塔的分辨率在每一层降低了两倍。金字塔中最低的一层具有最高的分辨率。

每个金字塔层的搜索迭代次数,指定为正整数。Farneback算法对每个金字塔层的关键点进行迭代搜索,直到收敛。

像素邻域的大小,指定为正整数。增大邻域大小以增加模糊运动。模糊运动对光流的估计具有更强的鲁棒性。的典型值NeighborhoodSize57

平均滤波器大小,指定为范围[2,Inf)内的正整数。在算法计算位移(流量)后,使用大小为(FilterSizeFilterSize).此外,靠近边界的像素被赋予一个减少的权值,因为算法假设多项式展开系数在那里不太可靠。增大滤波器的大小可以增强算法对图像噪声的鲁棒性。滤波器的尺寸越大,算法处理图像噪声和快速运动检测的能力就越大,使其更健壮。

对象的功能

estimateFlow 光流估计
重置 重置光流估计对象的内部状态

例子

全部折叠

读取视频文件。指定要读取帧的时间戳。

vidReader = VideoReader (“visiontraffic.avi”“CurrentTime”11);

创建一个光流对象,使用Farneback方法估计光流。输出是一个指定光流估计方法及其特性的对象。

opticFlow = opticalFlowFarneback
opticFlow = opticalFlowFarneback具有属性:NumPyramidLevels: 3 PyramidScale: 0.5000 NumIterations: 3 NeighborhoodSize: 5 FilterSize: 15

创建一个自定义图形窗口来可视化光流矢量。

h =图;movegui (h);hViewPanel = uipanel (h,“位置”,[0 0 1 1],“标题”“光流矢量图”);hPlot =轴(hViewPanel);

读取图像帧并转换为灰度图像。估计连续图像帧的光流。显示当前图像帧并绘制光流矢量为抖动图。

hasFrame(vidReader) frameRGB = readFrame(vidReader);frameGray = im2gray (frameRGB);流= estimateFlow (opticFlow frameGray);imshow (frameRGB)情节(流,“DecimationFactor”, 5 [5],“ScaleFactor”2,“父”, hPlot);持有暂停(10 ^ 3)结束

图包含一个轴和一个uipanel类型的对象。坐标轴包含2个类型为image, quiver的对象。

图包含一个轴和一个uipanel类型的对象。坐标轴包含2个类型为image, quiver的对象。

算法

Farneback算法生成一个图像金字塔,其中每一层的分辨率都低于前一层。当您选择一个大于1的金字塔级别时,算法可以在多个分辨率级别跟踪点,从最低级别开始。增加金字塔层的数目使算法处理较大的位移之间的帧。然而,计算的数量也在增加。该图表显示了一个有三个层次的图像金字塔。

跟踪从最低分辨率开始,一直持续到收敛。在一个级别上检测到的点位置将作为后续级别的关键点传播。这样,算法在每一层都细化了跟踪。金字塔分解使算法能够处理大像素运动,这种运动可以是大于邻域大小的距离。

参考文献

Farneback, G.《基于多项式展开的两帧运动估计》在第十三届北欧图像分析会议论文集, 363 - 370。瑞典Halmstad: SCIA, 2003。

扩展功能

介绍了R2015b