光流(optical flow) 光流法(optical flow method) 光流场(optical flow field)

本文介绍了光流的概念及计算方法,包括基于梯度、匹配、能量、相位的方法及神经动力学方法,并探讨了未来发展趋势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

光流是空间运动物体在观测成像面上的像素运动的瞬时速度。光流的研究是利用图像序列中的像素强度数据的时域变化和相关性来确定各自像素位置的“运动”,即研究图像灰度在时间上的变化与景象中物体结构及其运动的关系。将二维图像平面特定坐标点上的灰度瞬时变化率定义为光流矢量。
光流场(optical flow field)是指图像灰度模式的表观运动。它是一个二维矢量场,它包含的信息即是各像点的瞬时运动速度矢量信息。研究光流场的目的就是为了从序列图像中近似计算不能直接得到的运动场。
当人的眼睛观察运动物体时,物体的景象在人眼的视网膜上形成一系列连续变化的图像,这一系列连续变化的信息不断“流过”视网膜(即图像平面),好像一种光的“流”,故称之为光流(optical flow)。光流表达了图像的变化,由于它包含了目标运动的信息,因此可被观察者用来确定目标的运动情况。
1981年,Horn和Schunck创造性地将二维速度场与灰度相联系,引入光流约束方程,得到光流计算的基本算法。人们基于不同的理论基础提出各种光流计算方法,算法性能各有不同。Barron等人对多种光流计算技术进行了总结,按照理论基础与数学方法的区别把它们分成四种:基于梯度的方法、基于匹配的方法、基于能量的方法、基于相位的方法。近年来神经动力学方法也颇受学者重视。

1 基于梯度的方法
基于梯度的方法又称为微分法,它是利用时变图像灰度(或其滤波形式)的时空微分(即时空梯度函数)来计算像素的速度矢量。由于计算简单和较好的结果,该方法得到了广泛应用和研究。典型的代表是Horn-Schunck的光流计算方法,该方法在光流基本约束方程的基础上附加了全局平滑假设,从而计算出光流场。基于此思想,大量的改进算法不断提出。Nagel采用有条件的平滑约束,即通过加权矩阵的控制对梯度进行不同平滑处理;Black和Anandan针对多运动的估计问题,提出了分段平滑的方法。虽然很多基于梯度的光流估计方法取得了较好的光流估计,但由于在计算光流时涉及到可调参数的人工选取、可靠性评价因子的选择困难,以及预处理对光流计算结果的影响,在应用光流对目标进行实时检测与自动跟踪时仍存在很多问题。
2 基于匹配的方法
基于匹配的光流计算方法包括基于特征和区域的两种。基于特征的方法不断地对目标主要特征进行定位和跟踪,对目标大的运动和亮度变化具有鲁棒性(robustness)。存在的问题是光流通常很稀疏,而且特征提取和精确匹配也十分困难。基于区域的方法先对类似的区域进行定位,然后通过相似区域的位移计算光流。这种方法在视频编码中得到了广泛的应用。然而,它计算的光流仍不稠密。另外,这两种方法估计亚像素精度的光流也有困难,计算量很大。在考虑光流精度和稠密性时,基于匹配的方法适用。
3 基于能量的方法
基于能量的方法首先要对输入图像序列进行时空滤波处理,这是一种时间和空间整合。对于均匀的流场,要获得正确的速度估计,这种时空整合是非常必要的。然而,这样做会降低光流估计的空间和时间分辨率。尤其是当时空整合区域包含几个运动成分(如运动边缘)时,估计精度将会恶化。此外,基于能量的光流技术还存在高计算负荷的问题。此方法涉及大量的滤波器,目前这些滤波器是主要的计算消费。然而,可以预期,随着相应硬件的发展,在不久的将来,滤波将不再是一个严重的限制因素,所有这些技术都可以在帧速下加以实现。
4 基于相位的方法
Fleet和Jepson首次从概念上提出了相位信息用于光流计算的问题。因为速度是根据带通滤波器输出的相位特性确定的,所以称为相位方法。他们根据与带通速度调谐滤波器输出中的等相位轮廓相垂直的瞬时运动来定义分速度。带通滤波器按照尺度、速度和定向来分离输入信号。
基于相位的光流技术的综合性能是比较好的:速度估计比较精确且具有较高的空间分辨率,对图像序列的适用范围也比较宽。同时,这里仍有几个问题值得讨论:
(1)与基于能量的光流技术一样,基于相位的模型既有一定的生物合理性,又有较高的计算复杂性;
(2)尽管相位技术用两帧图像就可计算光流,但要获得足够的估计精度,就必须有一定的整合时间,这个延迟将会降低边缘处运动估计的时间分辨率;
(3)Fleet和Jespon的方法对输入图像序列中的时间混叠比较敏感。
5 神经动力学方法
计算机视觉研究的初衷就是为了模仿人类视觉系统的功能。然而人类理解与识别图像的能力与计算机形成了巨大的反差。视觉科学家们迫切期望借鉴人类处理图像的方法,以摆脱困境。对于光流计算来讲,如果说前面的基于能量或相位的模型有一定的生物合理性的话,那么近几年出现的利用神经网络建立的视觉运动感知的神经动力学模型则是对生物视觉系统功能与结构的更为直接的模拟。
Grossberg等人的视觉运动感知神经动力学模型描述了运动感知中视皮层简单细胞、复杂细胞、超复杂细胞以及视网膜双极细胞之间的相互作用,揭示了运动分割与组合、竞争与合作的神经整合机制。这个称为运动边界轮廓系统的神经网络解释了复杂运动图形上的局部模糊运动如何被积极地组织成一个整体一致的运动信号,给出了整体小孔问题的一个解。这个模型对于整体运动方向的判别非常有效,然而它却不能给出运动速度的大小。
Fay和Waxman模仿视网膜中的时空处理和大脑的视觉运动通路,基于并联动力学提出了一个多层神经网络,它涉及光适应、边缘增强和边缘速度提取等几个处理阶段。网络中,每个节点的动力学特性类似于具有可变电导的细胞膜,光适应利用神经元间的抑制作用来获取,空间对比度增强借助于一个修正的on-中心/off-周边反馈网络来实现,最后的速度估计由一个称为对传活化法的动力学方程来提取。这个神经网络在一并行机上实现了30帧/秒的帧速下的速度提取。遗憾的是它仅能提供运动边缘的法向速度估计,为了恢复整个模式的光流场,还必须用速度泛函方法将估计的法向流整合成一个致密的光流场。尽管用这些神经动力学模型来测量光流还很不成熟,然而这些方法及其结论为进一步研究打下了良好的基础,是将神经机制引入运动计算方面所做的极有意义的尝试。一并行机上实现了30帧/秒的帧速下的速度提取。遗憾的是它仅能提供运动边缘的法向速度估计,为了恢复整个模式的光流场,还必须用速度泛函方法将估计的法向流整合成一个致密的光流场。
尽管用这些神经动力学模型来测量光流还很不成熟,然而这些方法及其结论为进一步研究打下了良好的基础,是将神经机制引入运动计算方面所做的极有意义的尝试。
目前,对光流的研究方兴未艾,新的计算方法还在不断涌现。这里对光流技术的发展趋势与方向提出以下几点看法:
(1)现有技术各有自己的优点与缺陷,方法之间相互结合,优势互补,建立光流计算的多阶段或分层模型,是光流技术发展的一个趋势;
(2)通过深入的研究发现,现有光流方法之间有许多共通之处。如微分法和匹配法的前提假设极为相似;某些基于能量的方法等效于区域匹配技术;而相位方法则将相位梯度用于法向速度的计算。这些现象并不是偶然的。Singh指出,现有
各种光流估计方法基本上可以统一在一个框架之中,这个框架将光流信息分成两类:保持信息和邻域信息,光流场的恢复通过两种信息的提取和融合来实现。光流计算的统一框架的研究是这个领域的又一趋势;
(3)尽管光流计算的神经动力学方法还很不成熟,然而对它的研究却具有极其深远的意义。随着生物视觉研究的不断深入,神经方法无疑会不断完善,也许光流计算乃至计算机视觉的根本出路就在于神经机制的引入。神经网络方法是光流技术的一个发展方向。
### VT-L1 算法概述 VT-L1 是一种基于能量最小化的计算方法,其核心目标是最小化一个由数据项和正则化项组成的能量函数。该算法通过变分法(Variational Technique)来优化这一能量函数,并利用 L1 范数作为正则化约束条件[^2]。 #### 数据项与正则化项 在 VT-L1 中,数据项通常表示图像亮度恒定假设下的误差度量,而正则化项用于平滑流场并减少噪声影响。L1 正则化相比传统的 L2 正则化具有更强的鲁棒性和稀疏性特性,能够更好地处理不连续区域以及遮挡情况[^3]。 #### 数学模型描述 设 \( I(x,y,t) \) 表示输入视频序列中的像素强度值,则矢量 \( (u,v) \) 可定义如下: \[ E(u,v)=\int_{\Omega} D(I(x-u,y-v),I(x,y))dx dy+\lambda R(u,v) \] 其中: - \( E(u,v) \): 总体能量函数; - \( D(\cdot,\cdot) \): 数据项距离度量; - \( R(u,v) \): 正则化项; - \( \lambda \): 平衡参数; 具体而言,在 VT-L1 方法里采用绝对差代替平方差形式的数据匹配准则即\( |I(x-u,y-v)-I(x,y)|\) 来构建上述方程组求解过程[^4]。 #### 实现步骤概览 以下是 Python 的伪代码框架展示如何实现 VT-L1 估计: ```python import numpy as np from scipy.optimize import minimize def vt_l1_optical_flow(image_prev, image_next, lambda_param=0.1): """ Compute the optical flow using VT-L1 method. Parameters: image_prev : ndarray The previous frame in grayscale format. image_next : ndarray The next frame in grayscale format. lambda_param : float Regularization parameter balancing data term vs smoothness. Returns: u, v : tuple(ndarray,ndarray) Estimated horizontal and vertical components of optical flow field respectively. """ def energy_function(flow_uv): # Extracting U & V from flattened array representation h,w = image_prev.shape[:2] uv_map = flow_uv.reshape((h,w,2)) u = uv_map[...,0];v = uv_map[...,1] # Data Term Calculation based on brightness constancy assumption with L1 norm warped_img = warp_image(image_prev,u,v) diff_abs_sum = np.sum(np.abs(warped_img-image_next)) # Smoothness/Regularization Term Using Gradient Magnitude With L1 Norm grad_u_x,grad_u_y=np.gradient(u);grad_v_x,grad_v_y=np.gradient(v) reg_term =np.sum(abs(grad_u_x)+abs(grad_u_y))+\ np.sum(abs(grad_v_x)+abs(grad_v_y)) return diff_abs_sum + lambda_param * reg_term initial_guess = np.zeros((*image_prev.shape,2)).flatten() result = minimize(energy_function,initial_guess) optimized_flow=result.x.reshape((*image_prev.shape,2)) return optimized_flow[...,0],optimized_flow[...,1] # Helper function for warping images according to given displacements def warp_image(img,u,v): pass # Implementation details omitted here but should implement bilinear interpolation etc. ``` 此段代码仅为示意性质,实际应用时需补充 `warp_image` 函数的具体逻辑以及其他必要的边界条件处理等内容[^5]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值