光流法学习「建议收藏」

光流法学习「建议收藏」光流的计算光流估计就是指利用时间上相邻的两帧图像,得到点的运动。满足以下几点假设:前后两帧点的位移不大(泰勒展开)外界光强保持恒定。空间相关性,每个点的运动和他们的邻居相似(连续函数,泰勒展开

大家好,又见面了,我是你们的朋友全栈君。

 

光流的计算

 

光流估计就是指利用时间上相邻的两帧图像,得到点的运动。满足以下几点假设:

  • 前后两帧点的位移不大(泰勒展开)
  • 外界光强保持恒定。
  • 空间相关性,每个点的运动和他们的邻居相似(连续函数,泰勒展开)

在相邻的两帧图像中,点(x,y)发生了位移(u,v),那么移动前后两点的亮度应该是相等的。如下:

                                            光流法学习「建议收藏」

从这个式子出发,我们将其利用Taylor展开做一阶线性近似。其中IxIy, It分别是Image对这几个变量的偏导数。

                           光流法学习「建议收藏」

上面两式联立,可以得到,

                               光流法学习「建议收藏」

上式中,光流法学习「建议收藏」可以通过图像沿xx方向和yy方向的导数计算,光流法学习「建议收藏」可以通过光流法学习「建议收藏」计算。未知数是光流法学习「建议收藏」, 正是我们想要求解的每个像素在前后相邻两帧的位移。

 

上面就是光流估计的基本思想。上述式子虽然给出了光流估计的思路,但是还是没有办法解出位移量。

 

L-K方法

 

Lucas-Kanade方法是一种具体的求解方法。L-K方法依据相邻像素之间的位移相似的假设,通过一个观察窗口,将窗口内的像素点的位移看做是相同的,建立了一个超定方程,使用最小二乘法进行求解。下面是观察窗口为5×5的时候,建立的方程。

                          光流法学习「建议收藏」

 

使用最小二乘法求解,可以得到如下的式子,求和号代表是对窗口内的每一个像素点求和。        

                         光流法学习「建议收藏」

上式即是L-K方法求解光流估计问题的方程。

 

金字塔方法

 在最开始的假设中,第一条指出点的位移应该是较小的。从上面的分析可以看出,当位移较大时,Taylor展开式一阶近似误差较大。其修正方法就是这里要介绍的金字塔方法。我们通过将图像降采样,就能够使得较大的位移在高层金字塔图像中变小,满足假设条件1.如下所示。

                              光流法学习「建议收藏」

 

求像素梯度

而图像是一个二维函数f(x,y),其微分当然就是偏微分。因此有:

                      光流法学习「建议收藏」

因为图像是一个离散的二维函数,ϵ不能无限小,我们的图像是按照像素来离散的,最小的ϵ就是1像素。因此,上面的图像微分又变成了如下的形式(ϵ=1):

                          光流法学习「建议收藏」

这分别是图像在(x, y)点处x方向和y方向上的梯度,从上面的表达式可以看出来,图像的梯度相当于2个相邻像素之间的差值。

 

梯度的方向是函数f(x,y)变化最快的方向,当图像中存在边缘时,一定有较大的梯度值,相反,当图像中有比较平滑的部分时,灰度值变化较小,则相应的梯度也较小,图像处理中把梯度的模简称为梯度,由图像梯度构成的图像成为梯度图像(we can get the gradient image through computing the gradient of each pixel in the image)
经典的图像梯度算法是考虑图像的每个像素的某个邻域内的灰度变化,利用边缘临近的一阶或二阶导数变化规律,对原始图像中像素某个邻域设置梯度算子,通常我们用小区域模板进行卷积来计算,有Sobel算子、Scharr 算子(opencv)Robinson算子、Laplace算子等

 

Opencv求光流函数   

函数位置opencv-2.4.9/modules/video/src/lkpyramid.cpp

void cvCalcOpticalFlowPyrLK(
                            const CvArr* prev,
                            const CvArr* curr,
                            CvArr* prevPyr,
                            CvArr* currPyr,
                            const CvPoint2D32f* prevFeatures,
                            CvPoint2D32f* currFeatures,
                            int count,
                            CvSize winSize,
                            int level,
                            char* status,
                            float* track error,
                            CvTermCriteria criteria,
                            int flags );

 

  

1. 光流估计 https://xmfbit.github.io/2017/05/03/cs131-opticalflow/ 

2. 图像梯度的基本原理 https://blog.csdn.net/saltriver/article/details/78987096

3. 数字图像的梯度概念以及计算(the gradient of the image) https://blog.csdn.net/computer_liuyun/article/details/21328753

4. opencv入门12:梯度和边缘检测-GRADIENTS AND EDGE DETECTION https://harveyyeung.github.io/2018/05/11/PracPythonOpenCV/PracPythonOpenCV12/#espandi

5. Lucas-Kanade算法原理介绍及OpenCV代码实现分析  https://blog.csdn.net/banyao2006/article/details/39484113#commentBox

6. [learning opencv]第十章 跟踪与运动:金字塔Lucas-kanade(cvCalcOpticalFlowPyrLK)检测光流  https://blog.csdn.net/moc062066/article/details/6636106

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155021.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 104规约笔记「建议收藏」

    104规约笔记「建议收藏」电力系统中常见的设备分为调度端(控制站、主站、客户机),服务端(被控站、子站,典型设备包含TTU、RTU等),两者之间通过104规约来进行数据通信与传输。其传输层实际上使用的是TCP协议进行数据的传输。固定端口号为2404。《电力系统104规约帧报文解析》注意这里的调度端和服务端,调度端往往安装在PC电脑上,用网线连接(可靠的网络),服务端是工业设备:TTU(distributionTransformersupervisoryTerminalUnit,配电变压器监测终端)。RTU(远程终

    2022年6月20日
    35
  • 银行家算法C++实现

    银行家算法C++实现网上有很多银行家算法的源代码,下面是本人自己写的,基本算法模型参考教材。介绍银行家算法(Banker’sAlgorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉(EdsgerWybeDijkstra)在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。背景简介在银行中…

    2022年7月22日
    12
  • mysql导入Excel表格中文表头_把一个表里的数据导入另一个表

    mysql导入Excel表格中文表头_把一个表里的数据导入另一个表一,Linux版本1.先把Excel的xls格式转为csv3.用notepad++转为uft8编码4.然后转为txt格式5.将本地文件上传到服务器上选择数据库5.创建表格式要跟Excel一样createtableclass(idvarchar(20),namevarchar(20),chinesevarchar(20),mathvarchar(20),englishvarchar(20),physicsvarchar(20)

    2022年9月21日
    3
  • 深入理解适配器设计模式(java版本)

    深入理解适配器设计模式(java版本)

    2021年8月3日
    64
  • 产品经理面试内容_产品专员简历

    产品经理面试内容_产品专员简历前言经过深思熟路后,本渣决定参加放弃研发转投产品了。本科,硕士所学的东西也不能说可惜,这些都会帮助我在产品岗位更进一步。那么在研究与学习之下,我来研究一下产品经理的简历如何投能不当炮灰。(现在写好加深一下印象,也方便一下一年后写简历参加秋招的小周。)思路:PM的面试简历,就是一份产品产品用户:HR,业务主管简历被HR的阅读时间很短,15S左右,且较为粗略。所以就需要满足d…

    2025年7月11日
    4
  • linux amd显卡驱动画面撕裂,从此告别画面撕裂 AMD-FreeSync技术解析

    linux amd显卡驱动画面撕裂,从此告别画面撕裂 AMD-FreeSync技术解析说到”垂直同步”技术,相信很多玩家都知道是啥意思,它可以有效解决游戏中的画面撕裂问题,让画面更平滑。然而它也有一个致命伤:会限制显卡的性能输出,进而造成卡顿。至于具体缘由,还要从显示器的工作原理说起。●为什么会有撕裂?目前几乎所有显示器的画面都是一行一行扫描上去的,刷新率通常固定为60Hz,而显卡在渲染不同画面时的速度不一样,简单画面渲染的快,复杂画面则要慢一些,当显卡输出和显示器输出不同步,…

    2022年6月7日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号