光流法学习「建议收藏」

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

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

 

光流的计算

 

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

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

在相邻的两帧图像中,点(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)
上一篇 2022年7月1日 下午11:16
下一篇 2022年7月1日 下午11:36


相关推荐

  • 不是单组分组函数「建议收藏」

    不是单组分组函数「建议收藏」问题:一:SELECT tablespace_name, SUM(bytes) freeFROM dba_free_space不是单组分组函数原因: 1、如果程序中使用了分组函数,则有两种情况可以使用:程序中存在group by,并指定了分组条件,这样可以将分组条件一起查询出来改为:  SELECT tablespace_name, SUM(bytes) freeFROM dba_free_spa…

    2022年6月30日
    33
  • dw中css制作导航,Dreamweaver导航条按钮制作方法

    dw中css制作导航,Dreamweaver导航条按钮制作方法核心提示:教你Dreamweaver用表格巧妙制作导航条按钮看到上面的导航条了吗?你可以点击一下看看它的效果,请注意,这可是用表格做出来的,你相信吗?其实代码很简单,现在让我们来看看该怎么做。1.首先创建一个1×6的表格,参数为:border=0cellspacing=3cellpadding=0;2.在这个表格的每个单元格内分别插入一个表格,宽度和高度设为100%;3.建立一个CSS样式.u…

    2022年7月22日
    13
  • java snippet_snippet,让你编码效率翻倍

    java snippet_snippet,让你编码效率翻倍为什么谈到 Snippet 今天下午在用 vscode 做小程序的时候 发现很不方便 因为商店里提供的代码片段极为有限 而且平时几乎每天都需要用到代码片段 所以就在思考他们是怎么做到给别人提供代码的 我可以自定义代码片段吗 然后查了下 果然 这在 vscode 里自带的 好像藏得有点深 是可以自定义的 然后在做完自己的任务后捣鼓了下 基本了解了 snippet 的语法 突然有种打开新世界大门的感觉 做个记录 上

    2026年3月16日
    1
  • 几何画板 很实用的一个软件

    几何画板 很实用的一个软件

    2021年8月21日
    97
  • 解决: java.net.ConnectException: Connection refused: connect

    解决: java.net.ConnectException: Connection refused: connectjava.net.ConnectException:Connectionrefused:connect1.报错如上。2.原因和解决:1)端口号被占用:杀死占用端口号(一般为8080)的进程,释放端口;彻底关闭Tomcat服务器,或者重新启动项目。2)使用以下命令检查服务器中允许的最大进程数:ulimit-u。如果将此值设置为较低值,例如1024,则使用以下…

    2022年4月30日
    44
  • pycharm tensorflow 使用 GPU跑代码

    pycharm tensorflow 使用 GPU跑代码importosos environ CUDA VISIBLE DEVICES 0 指定使用 1 卡 config tf ConfigProto allow soft placement False log device placement False config gpu options allow growth Truesession tf Session config config 查看是否使用了 GPU cmd 输入 nvidia smi 如果执行了代码先

    2026年3月27日
    3

发表回复

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

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