最近在看光流计算的相关方法。

最开始复现了几个借助深度学习的方法,导师建议看几篇传统方法。

正好发现opencv自带了稀疏光流与密集光流的函数,于是研究了一下。

在网上查资料的时候发现有关密集光流函数calcOpticalFlowFarneback的原论文《Two-Frame Motion Estimation Based on Polynomial Expansion》的资料有限,大多讲解基本停留在公式15的八参数方程就结束了。

自己从头看了一遍论文,推了几个公式,简单记录一下,希望能够让有需要的朋友有所启发。

另外,这篇文章的网上版本非常多,但有几版公式少了负号,推荐下载:

http://www.cvlibs.net/projects/autonomous_vision_survey/literature/Farneback2003SCIA.pdf


本论文的核心思想是用多项式展开来逼近各像素点的邻域(The idea of polynomial expansion is to approximate some neighborhood of each pixel with a polynomial),即第二章

然后用最小二乘逼近求得满足约束条件时的光流极值,即第三章3.1 与3.2

用八参数方程的实例带入求解,即第三章3.3;

最后引入先验并结合迭代方法提高算法精度,即第三章3.4与3.5


第二章中

具体地是用了quadratic polynomial二次多项式来描述像素点。

即公式1,

公式2、3分别代表了相邻两帧(two signals)中同一像素在global displacement的前后变化,也就是f1(x)与f2(x),其中f2(x)=f1(x-d),而d便是我们要求解的光流。

联立公式1、2可推得系数间关系即公式4-6。

根据线代相关知识:非奇异non-singular矩阵有唯一非零解,且光流变化满足非奇异要求的这一特性,可对公式5进行变化,最后得到公式8即光流d的表达形式,

注意,此时对像素点和位移的描述都是global全局的,但很明显这种约束过于严格且不现实的。


所以在第三章一开头,3.1节作者就强调要用局部多项式逼近进行代替。

To begin with we replace the global polynomial in equation (2) with local polynomial approximations。

公式9是对A1的一种实践修正,公式10引入了Δb(x),结合9、10最终将公式8改写成了公式11的样子,


这个方程是可以逐像素pointwise求解的,但势必计算复杂且易出现噪声,因此作者提出了小位移假设,即we make the assumption that the displacement field is only slowly varying, 这样的好处是可以在邻域内I of x求解d(x)的最佳逼近。

这种求解可以借助在邻域内求d(x)的最小二乘法的最佳逼近,作者在实操中引入了w(Δx)作为不同像素点的加权函数,公式12如下,

将w(Δx)放入后面,根据矩阵形式的最小二乘法求解公式,可得公式13,其中最小值的表达为公式14。

这个地方对于不熟悉最小二乘法矩阵求解的朋友可能会有所困扰,具体推到过程推荐阅读下述网页的例4。

https://zhuanlan.zhihu.com/p/24709748

这里值得一提的是3.2节的最后,系数之间的矩阵乘法可以在求解光流前预先计算,即将其作为offline准备工作,算是优点之一吧。


3.3节是对光流变化的建模,网上大多资料都是列出了这个八参数方程,然后就不讲怎么来的不讲为什么。

其实这是一种变化的描述方法,常见的平移、仿射、射影等变换都可以用参数方程进行描述。

推荐阅读http://www.cs.cornell.edu/courses/cs664/2008sp/handouts/cs664-14-motion2.pdf的20与21页,提到了这几种变换的相应方程。

本文用到的是quadratic二次变化,这种变化是对射影变换的一种瞬时逼近,同样也是用八参数进行求解,但求解相对方便。

通过将八参数方程用矩阵S、P进行表达,可带入上上述公式12与最优解公式13,从而获得公式19与20,如下


剩下两节比较简单了,本质上就是说前文对多项式在不同帧一致性的描述有些严格,实际情况不是这样的话会求解失败。

于是就考虑到引入先验,在先验的前提下求解正确率大一点。

但毕竟第一步没有先验,所以第一步常设为0The a priori displacement field in the first step would usually be set to zero, unless actual knowledge about it is available. 


这篇文章的公式大多推导都比较简单,唯二的难点一是对最小二乘逼近的矩阵形式求解的表达,二是对引入八参数方程描述光流的理解。

也是我附上相关参考网页的两个地方。


最后附上两张实验效果图,数据集来源是vos 2019,有一说一,我觉得效果有待提高。

上图是opencv自带可视化的函数,我觉得有点难看,换了种可视化方法。

可以看到有很多区域内的光流为0,比如岸边背景区域,和小船的内部区域。

但这是不应该的,因为小船和岸边背景都应该具有各自一致性地运动方向。

OPENCV密集光流计算calcOpticalFlowFarneback原论文《Two-Frame Motion Estimation Based on Polynomial Expansion》讲解相关推荐

  1. OpenCV Lucas-Kanade光流计算的实例(附完整代码)

    OpenCV Lucas-Kanade光流计算的实例 OpenCV Lucas-Kanade光流计算的实例 OpenCV Lucas-Kanade光流计算的实例 #include <iostre ...

  2. OpenCV密集光流算法的实例(附完整代码)

    OpenCV密集光流算法的实例 OpenCV密集光流算法的实例 OpenCV密集光流算法的实例 #include <iostream> #include <iomanip> # ...

  3. 论文翻译—PolyLaneNet Lane Estimation via Deep Polynomial Regression

    PolyLaneNet Lane Estimation via Deep Polynomial Regression 通过深度多项式回归的车道估计 Abstract   自主驾驶取得巨大进步的主要因素 ...

  4. opencv光流(密集光流+稀疏光流) cv.calcOpticalFlowPyrLK cv2.calcOpticalFlowFarneback python与c++实现

    密集光流 cv.calcOpticalFlowFarneback() 类型 算法 相关论文 密集光流 Gunnar-Farneback算法 Two-Frame Motion Estimation Ba ...

  5. python opencv入门 光流法(41)

    内容来自OpenCV-Python Tutorials 自己翻译整理 目标: 了解光流的概念,使用lucas-kanade估算方法 使用cv2.calcOpticalFlowPyrLK() 方法来追踪 ...

  6. opencv 稀疏光流 稠密光流

    opencv 稀疏光流 稠密光流 demo: http://download.csdn.net/detail/keen_zuxwang/9860696 参看.学习文档: OpenCV学习笔记(七)Lu ...

  7. ECCV2020最佳论文解读之递归全对场变换(RAFT)光流计算模型

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 计算机视觉三大国际顶级会议之一的 ECCV 2020 已经召开.今年 ECCV 共收到有效投稿 502 ...

  8. OpenCV Gunnar Farneback的密集光流算法(附完整代码)

    OpenCV Gunnar Farneback的密集光流算法 OpenCV Gunnar Farneback的密集光流算法 OpenCV Gunnar Farneback的密集光流算法 #includ ...

  9. raft2020年更新_ECCV2020最佳论文解读之递归全对场变换(RAFT)光流计算模型

    计算机视觉三大国际顶级会议之一的 ECCV 2020 已经召开.今年 ECCV 共收到有效投稿 5025 篇,是 ECCV 2018 论文投稿数量的二倍还要多,接收论文1361 篇,接收率为 27%, ...

最新文章

  1. 牛客练习赛81 E. 小 Q 与函数求和 1( “简单莫比乌斯反演” ,欧拉函数性质)
  2. 直播回顾|结构光编码与三维重建技术
  3. 图像检索:拓展查询(Query Expansion)
  4. 如何测试一个财务软件系统,对比测试工具平台让财务测试飞起来
  5. 《动手学深度学习》第一天 (2.1+2.2)
  6. Android java传递int类型数组给C
  7. python怎么清理垃圾_【原创】python实现清理本地缓存垃圾
  8. size_t和size_type类型
  9. sql时间转换时分秒_SQL时分秒之间相互转换
  10. 怎么在知网上下载pdf格式的论文
  11. Springboot2.X项目中添加druid连接池监控
  12. 车型代号对照表_上海大众车型与VIN代号对照表
  13. Siamese-RPN论文阅读
  14. 解决:“证书错误,导航已阻止”
  15. 淘宝天猫评论爬取,简单的办法完成滑动验证
  16. VMware Workstation使用安装系统
  17. 前端实现图片快速反转替换_canvas实现图片镜像翻转的2种方式
  18. 计算机EV录屏培训体会,ev录屏不能录制声音怎么办?对照原因进行解决
  19. mysql、oracle、sqlserver各自的默认端口号
  20. 【杂记】万用表测试三极管

热门文章

  1. 一个女中医写的女人保养秘笈
  2. JPEG图像的压缩编码——笔记整理
  3. iOS 稳定性问题治理:卡死崩溃监控原理及最佳实践
  4. 【HDU4691】【后缀数组】Front compression 题解
  5. 新生植发年度大戏开播在即 关注效果再现新生
  6. py3dtiles read a .b3dm file.py
  7. winsvr服务器C盘突然满了的处理方法
  8. 用c语言用星号生日快乐,用C语言写个代码,利用空格和符号拼写出生日快乐之类的...
  9. ipynb文件转pdf 使用jupyter无需安装其他软件
  10. PNAS:简化且具有代表性的玉米根系细菌群落