主要内容

opticalFlowLKDoG

目的利用高斯法的Lucas-Kanade导数估计光流

描述

创建一个光流对象来估计移动对象的方向和速度,使用Lucas-Kanade导数高斯(DoG)方法。使用对象函数<一个href="//www.tianjin-qmedu.com/help/vision/ref/opticalflowhs.estimateflow.html">estimateFlow估计光流矢量。使用<一个href="//www.tianjin-qmedu.com/help/vision/ref/opticalflowhs.reset.html">重启对象函数,可以重置光流量对象的内部状态。

创建

描述

opticFlow= LOTELDFLOWLKDOG.返回一个光流对象,可用于估计视频中移动对象的方向和速度。利用高斯函数的Lucas-Kanade导数估计光流。

例子

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

例如,LoctalFlowlkdog('numframes',3)

属性

全部展开

用于时间平滑的缓冲帧的数目,指定为正整数值标量。随着这个数字的增加,光流估计方法对运动物体轨迹突变的鲁棒性就会降低。流量估计中的延迟量取决于的值NumFrames。输出流量对应于图像t=t当前的−0.5 (NumFrames1),在那里t当前的为当前图像的时间。

图像平滑过滤器的标准偏差,指定为正标量。

梯度平滑过滤器的标准偏差,指定为正标量。

用于降噪的阈值,指定为一个正标量。当你增加这个数字时,物体的移动对光流计算的影响较小。

对象的功能

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

例子

全部折叠

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

Vidreader = Videoreader('VisionTraffic.avi',“CurrentTime”11);

使用Lucas-Kanade DoG方法创建一个光流对象来估计光流。指定降噪阈值。输出为指定光流估计方法及其属性的光流对象。

opticFlow = opticalFlowLKDoG ('noisethreshold', 0.0005)
OpticFlow = LocoundFlowlkdog具有属性:NUMFRAMES:3 ImageFiltersigma:1.5000梯度Filtersigma:1 Noisethreshold:5.0000E-04

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

h =图;Movegui(h);hvieppanel = Uipanel(H,'位置',[0 0 1 1],'标题','光学流量矢量图');hPlot =轴(hViewPanel);

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

hasFrame(视频阅读器)frameRGB = readFrame(视频阅读器);frameGray = rgb2gray (frameRGB);流= estimateFlow (opticFlow frameGray);imshow (frameRGB)绘图(流量,“DecimationFactor”, 5 [5],“ScaleFactor”, 35岁,'父母',hplot);保持关闭暂停(10 ^ 3)结束

算法

全部展开

要计算两个图像之间的光流,必须解决该光学流量约束方程:

x u + y v + t = 0

  • x , y ,和 t 为时空图像亮度导数。

  • u为水平光流。

  • v是垂直光流。

参考资料

[1] Barron,J.L.,D. J.Leet,S.S.Beauchemin和T.Burkitt。“光学流动技术的性能。”在计算机愿景和模式识别(CVPR)的IEEE会议的诉讼程序,236 - 242。香槟,IL: CVPR, 1992。

扩展功能

C / C ++代码生成
使用MATLAB®Coder™生成C和C ++代码。

在R2015A介绍