`
shappy1978
  • 浏览: 702887 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Lucas–Kanade光流算法

 
阅读更多
 
<!-- 广告占位容器 --><!-- 投放代码 -->

<!-- 广告位结束 -->

Lucas–Kanade光流算法

标签: 算法生活imageapplicationreport工作
6779人阅读 评论(4) 收藏 举报
分类:
TLD

来自 李杜 的 ZOL blog:

转自: http://blog.zol.com.cn/936/article_935964.html

 

作者:gnuhpc@gmail.com

简介:在计算机视觉中,Lucas–Kanade光流算法是一种两帧差分的光流估计算法。它由Bruce D. Lucas 和 Takeo Kanade提出。

光流的概念:(Optical flow or optic flow)
它是一种运动模式,这种运动模式指的是一个物体、表面、边缘在一个视角下由一个观察者(比如眼睛、摄像头等)和背景之间形成的明显移动。光流技术,如运动检测和图像分割,时间碰撞,运动补偿编码,三维立体视差,都是利用了这种边缘或表面运动的技术。

二维图像的移动相对于观察者而言是三维物体移动的在图像平面的投影。
有序的图像可以估计出二维图像的瞬时图像速率或离散图像转移。

光流算法:
它评估了两幅图像的之间的变形,它的基本假设是体素和图像像素守恒。它假设一个物体的颜色在前后两帧没有巨大而明显的变化。基于这个思路,我们可以得到图像约束方程。不同的光流算法解决了假定了不同附加条件的光流问题。

Lucas–Kanade算法:
这个算法是最常见,最流行的。它计算两帧在时间t 到t + δt之间每个每个像素点位置的移动。 由于它是基于图像信号的泰勒级数,这种方法称为差分,这就是对于空间和时间坐标使用偏导数。
图像约束方程可以写为I(x,y,z,t) = I(x + δx,y + δy,z + δz,t + δt)
I(x, y,z, t) 为在(x,y,z)位置的体素。
我们假设移动足够的小,那么对图像约束方程使用泰勒公式,我们可以得到:
I(x+\delta x,y+\delta y,z+\delta z,t+\delta t) = I(x,y,z,t) + \frac{\partial I}{\partial x}\delta x+\frac{\partial I}{\partial y}\delta y+\frac{\partial I}{\partial z}\delta z+\frac{\partial I}{\partial t}\delta t+H.O.T.

H.O.T. 指更高阶,在移动足够小的情况下可以忽略。从这个方程中我们可以得到:
\frac{\partial I}{\partial x}\delta x+\frac{\partial I}{\partial y}\delta y+\frac{\partial I}{\partial z}\delta z+\frac{\partial I}{\partial t}\delta t = 0
或者
\frac{\partial I}{\partial x}\frac{\delta x}{\delta t}+\frac{\partial I}{\partial y}\frac{\delta y}{\delta t}+\frac{\partial I}{\partial z}\frac{\delta z}{\delta t}+\frac{\partial I}{\partial t}\frac{\delta t}{\delta t} = 0
我们得到:

\frac{\partial I}{\partial x}V_x+\frac{\partial I}{\partial y}V_y+\frac{\partial I}{\partial z}V_z+\frac{\partial I}{\partial t} = 0
Vx,Vy,Vz 分别是I(x,y,z,t)的光流向量中x,y,z的组成。  \frac{\partial I}{\partial x}\frac{\partial I}{\partial y}\frac{\partial I}{\partial z} 和  \frac{\partial I}{\partial t}则是图像在 (x,y,z,t)这一点向相应方向的差分
所以
IxVx + IyVy + IzVz = − It。
写做:
\nabla I^T\cdot\vec{V} = -I_t
这个方程有三个未知量,尚不能被解决,这也就是所谓光流算法的光圈问题。那么要找到光流向量则需要另一套解决的方案。而Lucas-Kanade算法是一个非迭代的算法:
假设流(Vx,Vy,Vz)在一个大小为m*m*m(m>1)的小窗中是一个常数,那么从像素1...nn = m3中可以得到下列一组方程:
I_{x_1} V_x + I_{y_1} V_y + I_{z_1} V_z = -I_{t_1}
I_{x_2} V_x + I_{y_2} V_y + I_{z_2} V_z = -I_{t_2}
\vdots
I_{x_n} V_x + I_{y_n} V_y + I_{z_n} V_z = -I_{t_n}
三个未知数但是有多于三个的方程,这个方程组自然是个超定方程,也就是说方程组内有冗余,方程组可以表示为:
\begin{bmatrix}<br/>I_{x_1} & I_{y_1} & I_{z_1}\\<br/>I_{x_2} & I_{y_2} & I_{z_2}\\<br/>\vdots  & \vdots  & \vdots\\<br/>I_{x_n} & I_{y_n} & I_{z_n}<br/>\end{bmatrix} <br/>\begin{bmatrix}<br/>V_x\\<br/>V_y\\<br/>V_z <br/>\end{bmatrix} <br/>=  <br/>\begin{bmatrix}<br/>-I_{t_1}\\ <br/>-I_{t_2}\\ <br/>\vdots \\<br/>-I_{t_n}<br/>\end{bmatrix}
记作:A\vec{v}=-b
为了解决这个超定问题,我们采用最小二乘法:
A^TA\vec{v}=A^T(-b) or
\vec{v}=(A^TA)^{-1}A^T(-b)
得到:
\begin{bmatrix}<br/>V_x\\<br/>V_y\\<br/>V_z <br/>\end{bmatrix} <br/>=<br/>\begin{bmatrix}<br/>\sum I_{x_i}^2      & \sum I_{x_i}I_{y_i} & \sum I_{x_i}I_{z_i} \\<br/>\sum I_{x_i}I_{y_i} & \sum I_{y_i}^2      & \sum I_{y_i}I_{z_i} \\<br/>\sum I_{x_i}I_{z_i} & \sum I_{y_i}I_{z_i} & \sum I_{z_i}^2  \\<br/>\end{bmatrix}^{-1}<br/>\begin{bmatrix}<br/>-\sum I_{x_i}I_{t_i} \\<br/>-\sum I_{y_i}I_{t_i} \\<br/>-\sum I_{z_i}I_{t_i}<br/>\end{bmatrix}
其中的求和是从1到n。
这也就是说寻找光流可以通过在四维上图像导数的分别累加得出。我们还需要一个权重函数W(i, j,k), i,j,k \in [1,m] 来突出窗口中心点的坐标。高斯函数做这项工作是非常合适的,
这个算法的不足在于它不能产生一个密度很高的流向量,例如在运动的边缘和黑大的同质区域中的微小移动方面流信息会很快的褪去。它的优点在于有噪声存在的鲁棒性还是可以的。
补充:opencv里实现的看上去蛮复杂,现在还不是太明白。其中LK经典算法也是迭代法,是由高斯迭代法解线性方程组进行迭代的。
参考文献:Lucas B and Kanade T. An Iterative Image Registration Technique with an Application to Stereo Vision. Proc. Of 7th International Joint Conference on Artificial Intelligence (IJCAI), pp.674-679.是81年发表的。
opencv中实现的是84年发表的算法,
参考文献:Bruce D. Lucas, "Generalized Image Matching by the Method of Differences," doctoral dissertation, tech. report , Robotics Institute, Carnegie Mellon University, July, 1984
这篇论文是收费的,一直都没下到还。
分享到:
评论

相关推荐

    Lucas_Kanade光流场算法实现

    算法实现了Lucas_Kanade光流场算法,得到平滑的运动矢量

    一种改进的Lucas_Kanade光流估计方法

    Lucas-Kanade 算法是一种常用的光流估计方法,但其存在一些缺点,例如在图像纹理欠丰富区域的光流估计结果较差。本文提出了一种改进的 Lucas-Kanade 光流估计方法,该方法定义了新的跟踪置信度因子,消除权值对光流...

    Lucas_Kanade实现的光流算法

    本篇文章将深入探讨Lucas-Kanade光流算法的原理、实现方式以及在MATLAB环境下的应用。 首先,光流的基本概念是基于物理假设:相邻帧间的亮度恒定。它试图找出图像中每个像素在连续帧间的位置变化,即像素的运动矢量...

    Lucas-Kanade-Tracker-master_光流法实现视频图像追踪_

    Lucas-Kanade方法是光流算法的一种经典实现,由Lucas和Kanade在1981年提出。 在Lucas-Kanade光流法中,关键步骤包括: 1. **特征检测**:首先,需要在连续的两帧图像中检测出稳定的特征点。这些点通常具有显著的...

    基于matlab的三维Lucas-Kanade光流提取算法仿真,含仿真操作录像

    2.领域:三维Lucas-Kanade光流提取算法。 3.内容:基于matlab的三维Lucas-Kanade光流提取算法仿真。 x=ux(1:f:size(ux,1),1:f:size(ux,2),1:f:size(ux,3)); y=uy(1:f:size(ux,1),1:f:size(ux,2),1:f:size(ux,3)); ...

    Lucas-Kanade光流法原理及应用

    Lucas-Kanade光流法是计算机视觉领域中一种经典的图像运动分析算法,主要用于估计图像序列中像素在时间上的连续移动。它由Bruce Lucas和Takeo Kanade在1981年提出,因其简单而有效的特性,被广泛应用于视频处理、...

    87520747HornandSchunck.rar_Lucas-Kanade_lucas_lucas kanade_光流估计_

    总的来说,Lucas-Kanade光流估计算法是计算机视觉中一种高效且实用的方法,它通过局部灰度不变性假设来估计像素的运动,是理解图像序列动态的关键工具。这个压缩包提供的资源可以帮助读者深入了解并实现这一算法。

    Matlab实现Lucas-Kanade 光流金字塔方法 上传.zip

    2.领域:智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,更多内容可点击博主头像 3.内容:标题所示,对于介绍可点击主页搜索博客 4.适合人群:本科,硕士...

    对视频目标进行光流提取,对比Lucas-Kanade和Horn-Schunck+matlab操作视频

    2.内容:对视频目标进行光流提取,对比Lucas-Kanade和Horn-Schunck+matlab操作视频 3.用处:用于Lucas-Kanade和Horn-Schunck算法编程学习 4.指向人群:本硕博等教研学习使用 5.运行注意事项: 使用matlab2021a...

    基于Lucas–Kanade算法的光流估计(MATLAB实现)

    总之,Lucas-Kanade光流估算是图像处理领域的一个基础而重要的技术,它利用MATLAB的便利性提供了直观的实现方式。掌握这种算法对于理解和应用计算机视觉技术至关重要,特别是在实时视频分析、自动驾驶、无人机导航等...

    迭代金字塔 LK 光流:Lucas-Kanade 光流计算的实现。-matlab开发

    Lucas-Kanade(LK)光流法是最早且最著名的光流算法之一,由Bruce Lucas和Takeo Kanade于1981年提出。这个算法基于小波运动假设,即邻近像素共享相同的运动。在本项目中,我们将深入探讨如何使用MATLAB来实现迭代...

    Lucas_Kanade.rar_Lucas Kanade matl_optical flow_ucas kanade ma

    《Lucas-Kanade光流算法在MATLAB中的实现》 光流是计算机视觉领域中的一个核心概念,它描述了图像序列中像素的运动轨迹。Lucas-Kanade(L-K)光流法是由Bruce Lucas和Takeo Kanade在1981年提出的,是一种基于像素级...

    Lucas_Kanade-optical-flow.rar_Lucas_Kanade_Lucas_kanade method _

    总的来说,Lucas-Kanade光流法是计算机视觉中的经典算法,它的理论基础和实现细节对于理解图像运动分析至关重要。通过提供的代码,我们可以更深入地了解光流法的工作原理,并将其应用于实际项目中。

    lucas_kanade算法

    在提供的文件名`www.pudn.com.txt`和`lk20_p2_release`中,`www.pudn.com.txt`可能是相关资料的链接,而`lk20_p2_release`可能是一个MATLAB代码文件或程序包,用于实现Lucas-Kanade光流算法。你可以通过阅读这个文件...

    Optical-Flow:Lucas-Kanade光流算法的实现

    光流算法的实现实现有4个部分: 朴素密集光流。 ( opticalFlow.m ) 最小特征值的opticalFlow.m和阈值是自由参数基于角点的稀疏光流角点检测基于高斯偏差( CornerDetect.m , gaussian.m , d_gaussian.m ) 迭代粗到...

    OpenCV实现光流算法

    光流算法的假设条件是亮度恒定,就是同一点随着时间的变化,其亮度不会发生改变,用于得到光流法基本方程;基于opencv实现,可实现最小障碍检测光流算法。

    lucas_kanade.pdf

    lucas-kanade的光流算法原文(1981) 对相关研究具有参考价值。

Global site tag (gtag.js) - Google Analytics