一文理清LK光流

举出几种光流方法,说明LK光流的建模方式?

光流方法是用于估计图像序列中像素点运动的技术,广泛应用于计算机视觉和视频处理领域。以下是几种常见的光流方法:

  1. Lucas-Kanade (LK) 方法

    • 一种基于局部窗口的光流估计方法,假设在小的窗口内像素运动是一致的。
  2. Horn-Schunck 方法

    • 一种全局方法,通过最小化整个图像的光流场的平滑性来估计运动,对于平滑和连续的运动场估计非常有效。
  3. Farneback 方法

    • 这种方法基于多尺度的多项式展开来估计光流,能够提供比较稠密的光流估计。
  4. DeepFlow、FlowNet 等深度学习方法

    • 利用深度学习架构来直接从数据中学习光流估计,提供了高精度的光流预测。

LK光流的建模方式

Lucas-Kanade (LK) 光流方法基于几个关键假设:

  • 亮度恒定性

    • 假设像素的亮度在时间间隔内保持不变。即使图像中的物体在移动,相同的物体在不同时间的图像帧中的亮度应相同。
  • 小运动

    • 像素在连续的图像帧间移动的距离是小的,这使得运动可以通过图像的一阶泰勒展开近似。
  • 空间一致性

    • 在小的邻域内,相邻像素具有相似的运动。

基于这些假设,LK光流模型可以描述为:
[
I x u + I y v + I t = 0 I_x u + I_y v + I_t = 0 Ixu+Iyv+It=0
]
其中,( I x I_x Ix) 和 ( I y I_y Iy) 是图像在x和y方向的梯度,( I t I_t It) 是时间梯度,( u u u) 和 ( v v v) 是x和y方向的速度分量。

为了解决这个模型,LK 方法通常在一个小窗口内应用加权最小二乘法,其中权重通常取决于像素到窗口中心的距离。通过求解正规方程组,可以得到对应的速度分量 (u) 和 (v):
[
[ ∑ w I x 2 ∑ w I x I y ∑ w I x I y ∑ w I y 2 ] [ u v ] = − [ ∑ w I x I t ∑ w I y I t ] \begin{bmatrix} \sum w I_x^2 & \sum w I_x I_y \\ \sum w I_x I_y & \sum w I_y^2 \end{bmatrix} \begin{bmatrix} u \\ v \end{bmatrix} = -\begin{bmatrix} \sum w I_x I_t \\ \sum w I_y I_t \end{bmatrix} [wIx2wIxIywIxIywIy2][uv]=[wIxItwIyIt]
]

这个正规方程可以通过逆矩阵解析求解,得到每个窗口内像素的运动估计。LK方法由于其简单性和效率,在实际应用中非常流行,尤其适合于高分辨率视频或实时应用场景。

https://www.youtube.com/watch?v=6wMoHgpVUn8

光流约束方程的求得

1. 光流法的基本假设

光流法基于一个基本假设,即一个像素点的灰度值在时间上是连续的。因此,对于时间 KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲ t ) 和 ( t + Δ t t + \Delta t t+Δt ) 两个时间点,一个像素点的灰度值 ( KaTeX parse error: Can't use function '\)' in math mode at position 12: I(x, y, t) \̲)̲ 和 \( I(x + \De… ) 之间的关系可以表示为:
[ I ( x , y , t ) ≈ I ( x + Δ x , y + Δ y , t + Δ t ) I(x, y, t) \approx I(x + \Delta x, y + \Delta y, t + \Delta t) I(x,y,t)I(x+Δx,y+Δy,t+Δt) ]

2. 泰勒展开

为了将这个非线性方程线性化,我们对右侧进行泰勒展开式,在点 ( ( x , y , t ) (x, y, t) (x,y,t) ) 处展开,忽略高阶项。泰勒展开式如下:
[
I ( x + Δ x , y + Δ y , t + Δ t ) = I ( x , y , t ) + ∂ I ∂ x Δ x + ∂ I ∂ y Δ y + ∂ I ∂ t Δ t + higher order terms I(x + \Delta x, y + \Delta y, t + \Delta t) = I(x, y, t) + \frac{\partial I}{\partial x} \Delta x + \frac{\partial I}{\partial y} \Delta y + \frac{\partial I}{\partial t} \Delta t + \text{higher order terms} I(x+Δx,y+Δy,t+Δt)=I(x,y,t)+xIΔx+yIΔy+tIΔt+higher order terms
]

其中,( ∂ I ∂ x \frac{\partial I}{\partial x} xI )、( ∂ I ∂ y \frac{\partial I}{\partial y} yI ) 和 ( ∂ I ∂ t \frac{\partial I}{\partial t} tI ) 分别是图像灰度值在 ( x )、( y ) 和 ( t ) 方向上的偏导数。

3. 忽略高阶项

忽略高阶项,我们得到:
[
I ( x + Δ x , y + Δ y , t + Δ t ) ≈ I ( x , y , t ) + ∂ I ∂ x Δ x + ∂ I ∂ y Δ y + ∂ I ∂ t Δ t I(x + \Delta x, y + \Delta y, t + \Delta t) \approx I(x, y, t) + \frac{\partial I}{\partial x} \Delta x + \frac{\partial I}{\partial y} \Delta y + \frac{\partial I}{\partial t} \Delta t I(x+Δx,y+Δy,t+Δt)I(x,y,t)+xIΔx+yIΔy+tIΔt
]

根据光流法的假设,两个时间点的像素灰度值近似相等:
[
I ( x , y , t ) ≈ I ( x + Δ x , y + Δ y , t + Δ t ) I(x, y, t) \approx I(x + \Delta x, y + \Delta y, t + \Delta t) I(x,y,t)I(x+Δx,y+Δy,t+Δt)
]

将这个近似代入上式,我们有:
[
I ( x , y , t ) ≈ I ( x , y , t ) + ∂ I ∂ x Δ x + ∂ I ∂ y Δ y + ∂ I ∂ t Δ t I(x, y, t) \approx I(x, y, t) + \frac{\partial I}{\partial x} \Delta x + \frac{\partial I}{\partial y} \Delta y + \frac{\partial I}{\partial t} \Delta t I(x,y,t)I(x,y,t)+xIΔx+yIΔy+tIΔt
]

4. 消去常数项

为了消去常数项 ( I(x, y, t) ),我们将左边的 ( I(x, y, t) ) 移到右边:
[
0 ≈ ∂ I ∂ x Δ x + ∂ I ∂ y Δ y + ∂ I ∂ t Δ t 0 \approx \frac{\partial I}{\partial x} \Delta x + \frac{\partial I}{\partial y} \Delta y + \frac{\partial I}{\partial t} \Delta t 0xIΔx+yIΔy+tIΔt
]

5. 引入光流分量

假设像素点在 ( x ) 和 ( y ) 方向上的位移速度分别为 ( u ) 和 ( v ),即:
[
Δ x = u Δ t \Delta x = u \Delta t Δx=uΔt
]
[
Δ y = v Δ t \Delta y = v \Delta t Δy=vΔt
]

将这些代入上式,我们得到:
[
0 ≈ ∂ I ∂ x u Δ t + ∂ I ∂ y v Δ t + ∂ I ∂ t Δ t 0 \approx \frac{\partial I}{\partial x} u \Delta t + \frac{\partial I}{\partial y} v \Delta t + \frac{\partial I}{\partial t} \Delta t 0xIuΔt+yIvΔt+tIΔt
]

6. 消去 ( Δ t \Delta t Δt )

因为 ( Δ t \Delta t Δt ) 是常数,且假设 ( Δ t ≠ 0 \Delta t \neq 0 Δt=0 ),可以将 ( Δ t \Delta t Δt ) 消去,得到:
[
0 ≈ ∂ I ∂ x u + ∂ I ∂ y v + ∂ I ∂ t 0 \approx \frac{\partial I}{\partial x} u + \frac{\partial I}{\partial y} v + \frac{\partial I}{\partial t} 0xIu+yIv+tI
]

这就是光流约束方程(Optical Flow Constraint Equation, OFCE):
[
I x u + I y v + I t = 0 I_x u + I_y v + I_t = 0 Ixu+Iyv+It=0
]

其中:

  • ( I x = ∂ I ∂ x I_x = \frac{\partial I}{\partial x} Ix=xI )
  • ( I y = ∂ I ∂ y I_y = \frac{\partial I}{\partial y} Iy=yI )
  • ( I t = ∂ I ∂ t I_t = \frac{\partial I}{\partial t} It=tI )

7. 总结

通过以上步骤,我们利用泰勒展开式将非线性的像素灰度变化关系线性化,得到光流约束方程,并通过最小二乘法求解光流分量 ( u ) 和 ( v )。

最小二乘法在光流法中的应用主要体现在光流计算的基本原理上,特别是在求解光流场时的方程组。以下是光流法中最小二乘法的具体应用步骤:

最小二乘法求解光流

在实际应用中,一个像素点附近的多个像素点都会满足上述光流约束方程。为了求解光流分量 ( u ) 和 ( v ),我们通常在一个局部窗口内使用所有像素点的光流约束方程,通过最小二乘法进行求解。

假设在窗口内有 ( n ) 个像素点,对于每个像素点,我们都有一个光流约束方程:
[
I x i u + I y i v + I t i = 0 ( i = 1 , 2 , . . . , n ) I_{xi} u + I_{yi} v + I_{ti} = 0 \quad (i = 1, 2, ..., n) Ixiu+Iyiv+Iti=0(i=1,2,...,n)
]

这些方程可以用矩阵形式表示为:
[
A ( u v ) = b A \begin{pmatrix} u \\ v \end{pmatrix} = b A(uv)=b
]
其中,矩阵 ( A ) 和向量 ( b ) 的形式为:
[
A = ( I x 1 I y 1 I x 2 I y 2 ⋮ ⋮ I x n I y n ) , b = ( − I t 1 − I t 2 ⋮ − I t n ) A = \begin{pmatrix} I_{x1} & I_{y1} \\ I_{x2} & I_{y2} \\ \vdots & \vdots \\ I_{xn} & I_{yn} \end{pmatrix}, \quad b = \begin{pmatrix} -I_{t1} \\ -I_{t2} \\ \vdots \\ -I_{tn} \end{pmatrix} A= Ix1Ix2IxnIy1Iy2Iyn ,b= It1It2Itn
]

4. 最小二乘法解

目标函数

我们通过最小化误差平方和来求解 ( u ) 和 ( v )。目标函数为:
[
J ( u , v ) = ∑ i = 1 n ( I x i u + I y i v + I t i ) 2 J(u, v) = \sum_{i=1}^n (I_{xi} u + I_{yi} v + I_{ti})^2 J(u,v)=i=1n(Ixiu+Iyiv+Iti)2
]

用矩阵表示,则目标函数为:
[
J ( u , v ) = ∥ A ( u v ) − b ∥ 2 J(u, v) = \| A \begin{pmatrix} u \\ v \end{pmatrix} - b \|^2 J(u,v)=A(uv)b2
]

最小化误差平方和

为了最小化 ( J ),我们对 ( J ) 求导并设导数为零。目标是找到使得 ( J ) 最小的 ( u ) 和 ( v )。

[ ∂ J ∂ u = 0 \frac{\partial J}{\partial u} = 0 uJ=0 ]
[ ∂ J ∂ v = 0 \frac{\partial J}{\partial v} = 0 vJ=0 ]

正规方程

求导数并设为零,得到正规方程:
[ A T ( A ( u v ) − b ) = 0 A^T (A \begin{pmatrix} u \\ v \end{pmatrix} - b) = 0 AT(A(uv)b)=0 ]

展开后得到:
[ A T A ( u v ) = A T b A^T A \begin{pmatrix} u \\ v \end{pmatrix} = A^T b ATA(uv)=ATb ]

求解正规方程

如果 ( A T A A^T A ATA ) 是可逆的,则可以解得:
[ ( u v ) = ( A T A ) − 1 A T b \begin{pmatrix} u \\ v \end{pmatrix} = (A^T A)^{-1} A^T b (uv)=(ATA)1ATb ]

其中:

  • ( A T A^T AT ) 是 ( A A A ) 的转置矩阵
  • ( ( A T A ) − 1 (A^T A)^{-1} (ATA)1 ) 是 ( A T A A^T A ATA ) 的逆矩阵

实际应用

在实际应用中,为了确保 ( A T A A^T A ATA ) 是可逆的,通常会选择合适的窗口大小和像素点数。对于一些稀疏或特定图像区域,可能需要进行额外的处理(如加入正则化项)以保证解的稳定性。

总结

通过最小二乘法,我们将光流约束方程转化为一个线性方程组,并通过正规方程求解得到光流分量 ( u ) 和 ( v )。这一过程在图像运动检测、视频稳定等应用中具有重要意义。

什么是正规方程

正规方程(Normal Equations)是最小二乘法(Least Squares Method)中用来求解线性回归问题的一种方法。它通过构造一个线性方程组来找到最佳拟合参数。下面详细解释正规方程的概念和推导过程。

背景

假设我们有一组线性方程,表示为矩阵形式:
[ A x = b A \mathbf{x} = \mathbf{b} Ax=b ]
其中:

  • ( KaTeX parse error: Can't use function '\)' in math mode at position 3: A \̲)̲ 是一个 \( m \time…
  • ( x \mathbf{x} x ) 是一个 ( n × 1 n \times 1 n×1 ) 的参数向量
  • ( b \mathbf{b} b ) 是一个 ( m × 1 m \times 1 m×1 ) 的观测值向量

在最小二乘法中,我们的目标是找到参数向量 ( x \mathbf{x} x ),使得误差平方和最小,即:
[ min ⁡ x ∥ A x − b ∥ 2 \min_{\mathbf{x}} \| A \mathbf{x} - \mathbf{b} \|^2 minxAxb2 ]

推导正规方程

我们通过以下步骤来推导正规方程:

  1. 构造目标函数:定义误差平方和为目标函数 ( J ( x ) J(\mathbf{x}) J(x) ):
    [ J ( x ) = ∥ A x − b ∥ 2 J(\mathbf{x}) = \| A \mathbf{x} - \mathbf{b} \|^2 J(x)=Axb2 ]

  2. 展开目标函数
    [ J ( x ) = ( A x − b ) T ( A x − b ) J(\mathbf{x}) = (A \mathbf{x} - \mathbf{b})^T (A \mathbf{x} - \mathbf{b}) J(x)=(Axb)T(Axb) ]

  3. 求目标函数的梯度:为了找到最小值,我们对目标函数 ( J ( x ) J(\mathbf{x}) J(x) ) 对 ( x \mathbf{x} x ) 求导并设为零。首先,我们对 ( J ( x ) J(\mathbf{x}) J(x) ) 求梯度:
    [ ∇ J ( x ) = 2 A T ( A x − b ) \nabla J(\mathbf{x}) = 2 A^T (A \mathbf{x} - \mathbf{b}) J(x)=2AT(Axb) ]

  4. 设梯度为零
    [ ∇ J ( x ) = 0 \nabla J(\mathbf{x}) = 0 J(x)=0 ]
    [ 2 A T ( A x − b ) = 0 2 A^T (A \mathbf{x} - \mathbf{b}) = 0 2AT(Axb)=0 ]

  5. 得到正规方程:简化后得到正规方程:
    [ A T A x = A T b A^T A \mathbf{x} = A^T \mathbf{b} ATAx=ATb ]

求解正规方程

正规方程 ( A T A x = A T b A^T A \mathbf{x} = A^T \mathbf{b} ATAx=ATb ) 是一个线性方程组,我们可以通过矩阵求逆来求解参数向量 ( x \mathbf{x} x )(前提是 ( A T A A^T A ATA ) 是可逆的):
[ x = ( A T A ) − 1 A T b \mathbf{x} = (A^T A)^{-1} A^T \mathbf{b} x=(ATA)1ATb ]

例子

考虑一个简单的线性回归问题:给定一组数据点 ( (x_i, y_i) ),我们希望找到一条直线 ( y = ax + b ) 来最小化预测值和实际值之间的误差平方和。

  1. 构造矩阵 ( A ) 和向量 ( \mathbf{b} ):
    [ A = ( 1 x 1 1 x 2 ⋮ ⋮ 1 x m ) , b = ( y 1 y 2 ⋮ y m ) A = \begin{pmatrix} 1 & x_1 \\ 1 & x_2 \\ \vdots & \vdots \\ 1 & x_m \end{pmatrix}, \quad \mathbf{b} = \begin{pmatrix} y_1 \\ y_2 \\ \vdots \\ y_m \end{pmatrix} A= 111x1x2xm ,b= y1y2ym ]

  2. 解正规方程 ( A T A x = A T b A^T A \mathbf{x} = A^T \mathbf{b} ATAx=ATb ):
    [ A T A = ( m ∑ i = 1 m x i ∑ i = 1 m x i ∑ i = 1 m x i 2 ) , A T b = ( ∑ i = 1 m y i ∑ i = 1 m x i y i ) A^T A = \begin{pmatrix} m & \sum_{i=1}^m x_i \\ \sum_{i=1}^m x_i & \sum_{i=1}^m x_i^2 \end{pmatrix}, \quad A^T \mathbf{b} = \begin{pmatrix} \sum_{i=1}^m y_i \\ \sum_{i=1}^m x_i y_i \end{pmatrix} ATA=(mi=1mxii=1mxii=1mxi2),ATb=(i=1myii=1mxiyi) ]

  3. 求解参数 ( x = ( a , b ) \mathbf{x} = (a, b) x=(a,b) ):
    [ x = ( A T A ) − 1 A T b \mathbf{x} = (A^T A)^{-1} A^T \mathbf{b} x=(ATA)1ATb ]

通过这些步骤,我们可以找到最佳拟合的参数 ( a ) 和 ( b )。

总结

正规方程是通过最小化误差平方和来求解线性回归问题的一种方法。它通过构造一个线性方程组并求解该方程组来找到最佳拟合参数。在某些情况下(如数据矩阵 ( A ) 的列数远小于行数),正规方程是一个有效的求解方法。# 举出几种光流方法,说明LK光流的建模方式?

光流方法是用于估计图像序列中像素点运动的技术,广泛应用于计算机视觉和视频处理领域。以下是几种常见的光流方法:

  1. Lucas-Kanade (LK) 方法

    • 一种基于局部窗口的光流估计方法,假设在小的窗口内像素运动是一致的。
  2. Horn-Schunck 方法

    • 一种全局方法,通过最小化整个图像的光流场的平滑性来估计运动,对于平滑和连续的运动场估计非常有效。
  3. Farneback 方法

    • 这种方法基于多尺度的多项式展开来估计光流,能够提供比较稠密的光流估计。
  4. DeepFlow、FlowNet 等深度学习方法

    • 利用深度学习架构来直接从数据中学习光流估计,提供了高精度的光流预测。

LK光流的建模方式

Lucas-Kanade (LK) 光流方法基于几个关键假设:

  • 亮度恒定性

    • 假设像素的亮度在时间间隔内保持不变。即使图像中的物体在移动,相同的物体在不同时间的图像帧中的亮度应相同。
  • 小运动

    • 像素在连续的图像帧间移动的距离是小的,这使得运动可以通过图像的一阶泰勒展开近似。
  • 空间一致性

    • 在小的邻域内,相邻像素具有相似的运动。

基于这些假设,LK光流模型可以描述为:
[
I x u + I y v + I t = 0 I_x u + I_y v + I_t = 0 Ixu+Iyv+It=0
]
其中,( I x I_x Ix) 和 ( I y I_y Iy) 是图像在x和y方向的梯度,( I t I_t It) 是时间梯度,( u u u) 和 ( v v v) 是x和y方向的速度分量。

为了解决这个模型,LK 方法通常在一个小窗口内应用加权最小二乘法,其中权重通常取决于像素到窗口中心的距离。通过求解正规方程组,可以得到对应的速度分量 (u) 和 (v):
[
[ ∑ w I x 2 ∑ w I x I y ∑ w I x I y ∑ w I y 2 ] [ u v ] = − [ ∑ w I x I t ∑ w I y I t ] \begin{bmatrix} \sum w I_x^2 & \sum w I_x I_y \\ \sum w I_x I_y & \sum w I_y^2 \end{bmatrix} \begin{bmatrix} u \\ v \end{bmatrix} = -\begin{bmatrix} \sum w I_x I_t \\ \sum w I_y I_t \end{bmatrix} [wIx2wIxIywIxIywIy2][uv]=[wIxItwIyIt]
]

这个正规方程可以通过逆矩阵解析求解,得到每个窗口内像素的运动估计。LK方法由于其简单性和效率,在实际应用中非常流行,尤其适合于高分辨率视频或实时应用场景。

https://www.youtube.com/watch?v=6wMoHgpVUn8

光流约束方程的求得

1. 光流法的基本假设

光流法基于一个基本假设,即一个像素点的灰度值在时间上是连续的。因此,对于时间 KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲ t ) 和 ( t + Δ t t + \Delta t t+Δt ) 两个时间点,一个像素点的灰度值 ( KaTeX parse error: Can't use function '\)' in math mode at position 12: I(x, y, t) \̲)̲ 和 \( I(x + \De… ) 之间的关系可以表示为:
[ I ( x , y , t ) ≈ I ( x + Δ x , y + Δ y , t + Δ t ) I(x, y, t) \approx I(x + \Delta x, y + \Delta y, t + \Delta t) I(x,y,t)I(x+Δx,y+Δy,t+Δt) ]

2. 泰勒展开

为了将这个非线性方程线性化,我们对右侧进行泰勒展开式,在点 ( ( x , y , t ) (x, y, t) (x,y,t) ) 处展开,忽略高阶项。泰勒展开式如下:
[
I ( x + Δ x , y + Δ y , t + Δ t ) = I ( x , y , t ) + ∂ I ∂ x Δ x + ∂ I ∂ y Δ y + ∂ I ∂ t Δ t + higher order terms I(x + \Delta x, y + \Delta y, t + \Delta t) = I(x, y, t) + \frac{\partial I}{\partial x} \Delta x + \frac{\partial I}{\partial y} \Delta y + \frac{\partial I}{\partial t} \Delta t + \text{higher order terms} I(x+Δx,y+Δy,t+Δt)=I(x,y,t)+xIΔx+yIΔy+tIΔt+higher order terms
]

其中,( ∂ I ∂ x \frac{\partial I}{\partial x} xI )、( ∂ I ∂ y \frac{\partial I}{\partial y} yI ) 和 ( ∂ I ∂ t \frac{\partial I}{\partial t} tI ) 分别是图像灰度值在 ( x )、( y ) 和 ( t ) 方向上的偏导数。

3. 忽略高阶项

忽略高阶项,我们得到:
[
I ( x + Δ x , y + Δ y , t + Δ t ) ≈ I ( x , y , t ) + ∂ I ∂ x Δ x + ∂ I ∂ y Δ y + ∂ I ∂ t Δ t I(x + \Delta x, y + \Delta y, t + \Delta t) \approx I(x, y, t) + \frac{\partial I}{\partial x} \Delta x + \frac{\partial I}{\partial y} \Delta y + \frac{\partial I}{\partial t} \Delta t I(x+Δx,y+Δy,t+Δt)I(x,y,t)+xIΔx+yIΔy+tIΔt
]

根据光流法的假设,两个时间点的像素灰度值近似相等:
[
I ( x , y , t ) ≈ I ( x + Δ x , y + Δ y , t + Δ t ) I(x, y, t) \approx I(x + \Delta x, y + \Delta y, t + \Delta t) I(x,y,t)I(x+Δx,y+Δy,t+Δt)
]

将这个近似代入上式,我们有:
[
I ( x , y , t ) ≈ I ( x , y , t ) + ∂ I ∂ x Δ x + ∂ I ∂ y Δ y + ∂ I ∂ t Δ t I(x, y, t) \approx I(x, y, t) + \frac{\partial I}{\partial x} \Delta x + \frac{\partial I}{\partial y} \Delta y + \frac{\partial I}{\partial t} \Delta t I(x,y,t)I(x,y,t)+xIΔx+yIΔy+tIΔt
]

4. 消去常数项

为了消去常数项 ( I(x, y, t) ),我们将左边的 ( I(x, y, t) ) 移到右边:
[
0 ≈ ∂ I ∂ x Δ x + ∂ I ∂ y Δ y + ∂ I ∂ t Δ t 0 \approx \frac{\partial I}{\partial x} \Delta x + \frac{\partial I}{\partial y} \Delta y + \frac{\partial I}{\partial t} \Delta t 0xIΔx+yIΔy+tIΔt
]

5. 引入光流分量

假设像素点在 ( x ) 和 ( y ) 方向上的位移速度分别为 ( u ) 和 ( v ),即:
[
Δ x = u Δ t \Delta x = u \Delta t Δx=uΔt
]
[
Δ y = v Δ t \Delta y = v \Delta t Δy=vΔt
]

将这些代入上式,我们得到:
[
0 ≈ ∂ I ∂ x u Δ t + ∂ I ∂ y v Δ t + ∂ I ∂ t Δ t 0 \approx \frac{\partial I}{\partial x} u \Delta t + \frac{\partial I}{\partial y} v \Delta t + \frac{\partial I}{\partial t} \Delta t 0xIuΔt+yIvΔt+tIΔt
]

6. 消去 ( Δ t \Delta t Δt )

因为 ( Δ t \Delta t Δt ) 是常数,且假设 ( Δ t ≠ 0 \Delta t \neq 0 Δt=0 ),可以将 ( Δ t \Delta t Δt ) 消去,得到:
[
0 ≈ ∂ I ∂ x u + ∂ I ∂ y v + ∂ I ∂ t 0 \approx \frac{\partial I}{\partial x} u + \frac{\partial I}{\partial y} v + \frac{\partial I}{\partial t} 0xIu+yIv+tI
]

这就是光流约束方程(Optical Flow Constraint Equation, OFCE):
[
I x u + I y v + I t = 0 I_x u + I_y v + I_t = 0 Ixu+Iyv+It=0
]

其中:

  • ( I x = ∂ I ∂ x I_x = \frac{\partial I}{\partial x} Ix=xI )
  • ( I y = ∂ I ∂ y I_y = \frac{\partial I}{\partial y} Iy=yI )
  • ( I t = ∂ I ∂ t I_t = \frac{\partial I}{\partial t} It=tI )

7. 总结

通过以上步骤,我们利用泰勒展开式将非线性的像素灰度变化关系线性化,得到光流约束方程,并通过最小二乘法求解光流分量 ( u ) 和 ( v )。

最小二乘法在光流法中的应用主要体现在光流计算的基本原理上,特别是在求解光流场时的方程组。以下是光流法中最小二乘法的具体应用步骤:

最小二乘法求解光流

在实际应用中,一个像素点附近的多个像素点都会满足上述光流约束方程。为了求解光流分量 ( u ) 和 ( v ),我们通常在一个局部窗口内使用所有像素点的光流约束方程,通过最小二乘法进行求解。

假设在窗口内有 ( n ) 个像素点,对于每个像素点,我们都有一个光流约束方程:
[
I x i u + I y i v + I t i = 0 ( i = 1 , 2 , . . . , n ) I_{xi} u + I_{yi} v + I_{ti} = 0 \quad (i = 1, 2, ..., n) Ixiu+Iyiv+Iti=0(i=1,2,...,n)
]

这些方程可以用矩阵形式表示为:
[
A ( u v ) = b A \begin{pmatrix} u \\ v \end{pmatrix} = b A(uv)=b
]
其中,矩阵 ( A ) 和向量 ( b ) 的形式为:
[
A = ( I x 1 I y 1 I x 2 I y 2 ⋮ ⋮ I x n I y n ) , b = ( − I t 1 − I t 2 ⋮ − I t n ) A = \begin{pmatrix} I_{x1} & I_{y1} \\ I_{x2} & I_{y2} \\ \vdots & \vdots \\ I_{xn} & I_{yn} \end{pmatrix}, \quad b = \begin{pmatrix} -I_{t1} \\ -I_{t2} \\ \vdots \\ -I_{tn} \end{pmatrix} A= Ix1Ix2IxnIy1Iy2Iyn ,b= It1It2Itn
]

4. 最小二乘法解

目标函数

我们通过最小化误差平方和来求解 ( u ) 和 ( v )。目标函数为:
[
J ( u , v ) = ∑ i = 1 n ( I x i u + I y i v + I t i ) 2 J(u, v) = \sum_{i=1}^n (I_{xi} u + I_{yi} v + I_{ti})^2 J(u,v)=i=1n(Ixiu+Iyiv+Iti)2
]

用矩阵表示,则目标函数为:
[
J ( u , v ) = ∥ A ( u v ) − b ∥ 2 J(u, v) = \| A \begin{pmatrix} u \\ v \end{pmatrix} - b \|^2 J(u,v)=A(uv)b2
]

最小化误差平方和

为了最小化 ( J ),我们对 ( J ) 求导并设导数为零。目标是找到使得 ( J ) 最小的 ( u ) 和 ( v )。

[ ∂ J ∂ u = 0 \frac{\partial J}{\partial u} = 0 uJ=0 ]
[ ∂ J ∂ v = 0 \frac{\partial J}{\partial v} = 0 vJ=0 ]

正规方程

求导数并设为零,得到正规方程:
[ A T ( A ( u v ) − b ) = 0 A^T (A \begin{pmatrix} u \\ v \end{pmatrix} - b) = 0 AT(A(uv)b)=0 ]

展开后得到:
[ A T A ( u v ) = A T b A^T A \begin{pmatrix} u \\ v \end{pmatrix} = A^T b ATA(uv)=ATb ]

求解正规方程

如果 ( A T A A^T A ATA ) 是可逆的,则可以解得:
[ ( u v ) = ( A T A ) − 1 A T b \begin{pmatrix} u \\ v \end{pmatrix} = (A^T A)^{-1} A^T b (uv)=(ATA)1ATb ]

其中:

  • ( A T A^T AT ) 是 ( A A A ) 的转置矩阵
  • ( ( A T A ) − 1 (A^T A)^{-1} (ATA)1 ) 是 ( A T A A^T A ATA ) 的逆矩阵

实际应用

在实际应用中,为了确保 ( A T A A^T A ATA ) 是可逆的,通常会选择合适的窗口大小和像素点数。对于一些稀疏或特定图像区域,可能需要进行额外的处理(如加入正则化项)以保证解的稳定性。

总结

通过最小二乘法,我们将光流约束方程转化为一个线性方程组,并通过正规方程求解得到光流分量 ( u ) 和 ( v )。这一过程在图像运动检测、视频稳定等应用中具有重要意义。

什么是正规方程

正规方程(Normal Equations)是最小二乘法(Least Squares Method)中用来求解线性回归问题的一种方法。它通过构造一个线性方程组来找到最佳拟合参数。下面详细解释正规方程的概念和推导过程。

背景

假设我们有一组线性方程,表示为矩阵形式:
[ A x = b A \mathbf{x} = \mathbf{b} Ax=b ]
其中:

  • ( KaTeX parse error: Can't use function '\)' in math mode at position 3: A \̲)̲ 是一个 \( m \time…
  • ( x \mathbf{x} x ) 是一个 ( n × 1 n \times 1 n×1 ) 的参数向量
  • ( b \mathbf{b} b ) 是一个 ( m × 1 m \times 1 m×1 ) 的观测值向量

在最小二乘法中,我们的目标是找到参数向量 ( x \mathbf{x} x ),使得误差平方和最小,即:
[ min ⁡ x ∥ A x − b ∥ 2 \min_{\mathbf{x}} \| A \mathbf{x} - \mathbf{b} \|^2 minxAxb2 ]

推导正规方程

我们通过以下步骤来推导正规方程:

  1. 构造目标函数:定义误差平方和为目标函数 ( J ( x ) J(\mathbf{x}) J(x) ):
    [ J ( x ) = ∥ A x − b ∥ 2 J(\mathbf{x}) = \| A \mathbf{x} - \mathbf{b} \|^2 J(x)=Axb2 ]

  2. 展开目标函数
    [ J ( x ) = ( A x − b ) T ( A x − b ) J(\mathbf{x}) = (A \mathbf{x} - \mathbf{b})^T (A \mathbf{x} - \mathbf{b}) J(x)=(Axb)T(Axb) ]

  3. 求目标函数的梯度:为了找到最小值,我们对目标函数 ( J ( x ) J(\mathbf{x}) J(x) ) 对 ( x \mathbf{x} x ) 求导并设为零。首先,我们对 ( J ( x ) J(\mathbf{x}) J(x) ) 求梯度:
    [ ∇ J ( x ) = 2 A T ( A x − b ) \nabla J(\mathbf{x}) = 2 A^T (A \mathbf{x} - \mathbf{b}) J(x)=2AT(Axb) ]

  4. 设梯度为零
    [ ∇ J ( x ) = 0 \nabla J(\mathbf{x}) = 0 J(x)=0 ]
    [ 2 A T ( A x − b ) = 0 2 A^T (A \mathbf{x} - \mathbf{b}) = 0 2AT(Axb)=0 ]

  5. 得到正规方程:简化后得到正规方程:
    [ A T A x = A T b A^T A \mathbf{x} = A^T \mathbf{b} ATAx=ATb ]

求解正规方程

正规方程 ( A T A x = A T b A^T A \mathbf{x} = A^T \mathbf{b} ATAx=ATb ) 是一个线性方程组,我们可以通过矩阵求逆来求解参数向量 ( x \mathbf{x} x )(前提是 ( A T A A^T A ATA ) 是可逆的):
[ x = ( A T A ) − 1 A T b \mathbf{x} = (A^T A)^{-1} A^T \mathbf{b} x=(ATA)1ATb ]

例子

考虑一个简单的线性回归问题:给定一组数据点 ( (x_i, y_i) ),我们希望找到一条直线 ( y = ax + b ) 来最小化预测值和实际值之间的误差平方和。

  1. 构造矩阵 ( A ) 和向量 ( \mathbf{b} ):
    [ A = ( 1 x 1 1 x 2 ⋮ ⋮ 1 x m ) , b = ( y 1 y 2 ⋮ y m ) A = \begin{pmatrix} 1 & x_1 \\ 1 & x_2 \\ \vdots & \vdots \\ 1 & x_m \end{pmatrix}, \quad \mathbf{b} = \begin{pmatrix} y_1 \\ y_2 \\ \vdots \\ y_m \end{pmatrix} A= 111x1x2xm ,b= y1y2ym ]

  2. 解正规方程 ( A T A x = A T b A^T A \mathbf{x} = A^T \mathbf{b} ATAx=ATb ):
    [ A T A = ( m ∑ i = 1 m x i ∑ i = 1 m x i ∑ i = 1 m x i 2 ) , A T b = ( ∑ i = 1 m y i ∑ i = 1 m x i y i ) A^T A = \begin{pmatrix} m & \sum_{i=1}^m x_i \\ \sum_{i=1}^m x_i & \sum_{i=1}^m x_i^2 \end{pmatrix}, \quad A^T \mathbf{b} = \begin{pmatrix} \sum_{i=1}^m y_i \\ \sum_{i=1}^m x_i y_i \end{pmatrix} ATA=(mi=1mxii=1mxii=1mxi2),ATb=(i=1myii=1mxiyi) ]

  3. 求解参数 ( x = ( a , b ) \mathbf{x} = (a, b) x=(a,b) ):
    [ x = ( A T A ) − 1 A T b \mathbf{x} = (A^T A)^{-1} A^T \mathbf{b} x=(ATA)1ATb ]

通过这些步骤,我们可以找到最佳拟合的参数 ( a ) 和 ( b )。

总结

正规方程是通过最小化误差平方和来求解线性回归问题的一种方法。它通过构造一个线性方程组并求解该方程组来找到最佳拟合参数。在某些情况下(如数据矩阵 ( A ) 的列数远小于行数),正规方程是一个有效的求解方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/41751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代理IP在未来将面临哪些挑战?

今天我们来聊聊代理IP在未来可能会面临的挑战。虽然代理IP技术目前应用广泛,但随着科技的发展和网络环境的变化,代理IP也将面临一些新的挑战。让我们一起来看看这些挑战是什么吧! 1. 更严格的网络封锁和检测 现代社会各行各业都在飞速发展&…

可变参数 Collections 不可变集合 Stream流

目录 1.可变参数: 2.Collections: 3.不可变集合: 4.Stream流: 1、什么是流 2、如何生成流 1.单列集合获取Stream流 2.双列集合获取Stream流 3.数组获取Stream流: 4.一堆零散数据: Stream接口中的静态方法 3.Stream流的…

解决分布式环境下session共享问题

在分布式环境下,session会存在两个问题 第一个问题:不同域名下,浏览器存储的jsessionid是没有存储的。比如登录时认证服务auth.gulimall.com存储了session,但是搜索服务search.gulimall.com是没有这个session的; 第二个问题&…

基于SpringBoot的校园台球厅人员与设备管理系统

本系统是要设计一个校园台球厅人员与设备管理系统,这个系统能够满足校园台球厅人员与设备的管理及用户的校园台球厅人员与设备管理功能。系统的主要功能包括首页、个人中心、用户管理、会员账号管理、会员充值管理、球桌信息管理、会员预约管理、普通预约管理、留言…

【SSRF】

SSRF (Server-Side Request Forgery 服务端请求伪造) 文章目录 0x01 是什么?0x02 怎么判断是否存在SSRF漏洞?0x03 防御0x04 绕过手段 0x01 是什么? 是什么?   答:攻击者构造请求,…

w3wp.exe 中发生未处理的 Microsoft ,NETFramework 异常。

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

Spring 6.1.10版本源码编译

每篇一句 我们对时间的感知其实非常主观,我们越习惯于我们的生活方式,生活里面的新鲜感就越少,我们对时间 的感知就越快,生命就越短。 1.源码下载 进入Spring官网 https://spring.io/ 按照上图步骤进入如下Spring Framework链…

罗剑锋的C++实战笔记学习(二):容器、算法库、多线程

4、容器 1)、容器的通用特性 所有容器都具有的一个基本特性:它保存元素采用的是值(value)语义,也就是说,容器里存储的是元素的拷贝、副本,而不是引用 容器操作元素的很大一块成本就是值的拷贝…

RAG 工业落地方案框架(Qanything、RAGFlow、FastGPT、智谱RAG)细节比对!CVPR自动驾驶最in挑战赛赛道,全球冠军被算力选手夺走了

RAG 工业落地方案框架(Qanything、RAGFlow、FastGPT、智谱RAG)细节比对!CVPR自动驾驶最in挑战赛赛道,全球冠军被算力选手夺走了。 本文详细比较了四种 RAG 工业落地方案 ——Qanything、RAGFlow、FastGPT 和智谱 RAG,重…

git push之后回滚到某个版本

背景 因为粗心在主分支上修改了代码,push了上去,污染了主分支,希望将主分支之后的修改回滚,包括提交记录,就是远程的记录中回到希望回到的版本,保持干净。 git push -f 可以做到,会冲掉所有的…

SwiftUI 6.0(iOS 18.0)滚动视图新增的滚动阶段(Scroll Phase)监听功能趣谈

何曾几时,在 SwiftUI 开发中的秃头小码农们迫切需要一种能够读取当前滚动状态的方法。 在过去,他们往往需要借助于 UIKit 的神秘力量。不过这一切在 SwiftUI 6.0 中已成“沧海桑田”。 在本篇博文中,您将学到如下内容: 1. Scroll…

一份适合新手的软件测试练习项目

最近,不少读者托我找一个能实际练手的测试项目。开始,我觉得这是很简单的一件事,但当我付诸行动时,却发现,要找到一个对新手友好的练手项目,着实困难。 我翻了不下一百个web网页,包括之前推荐练…

nginx的知识面试易考点

Nginx概念 Nginx 是一个高性能的 HTTP 和反向代理服务。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。 Nginx 专为性能优化而开发,性能是其最重要的考量指标,实现上非常注重效率&#…

C#用链表和数组分别实现堆栈

1.链表 实现栈的四个基本功能 入栈 出栈 长度 栈顶值 public class 基础 : MonoBehaviour {public class MyStack{//定义每一个元素的数据结构 //下一个元素 和 该元素的值public class StackData{public StackData next;public object data;public StackData(StackData next,…

linux驱动编程 - kfifo先进先出队列

简介: kfifo是Linux Kernel里面的一个 FIFO(先进先出)数据结构,它采用环形循环队列的数据结构来实现,提供一个无边界的字节流服务,并且使用并行无锁编程技术,即当它用于只有一个入队线程和一个出…

nginx修改网站默认根目录及发布(linux、centos、ubuntu)openEuler软件源repo站点

目录 安装nginx配置nginx其它权限配置 安装nginx dnf install -y nginx配置nginx whereis nginxcd /etc/nginx llcd conf.d touch vhost.conf vim vhost.conf 命令模式下输入:set nu或:set number可以显示行号 复制如下内容: server {listen 80;server_name…

【0294】Postgres内核 dynahash 之 hash_search 实现原理

相关文章: 【0289】Postgres内核之哈希表(Hash Tables) 【0290】Postgres内核之dynahash(动态哈希表,dynamic hash tables)(概念篇) 【0291】Postgres内核之dynahash table 创建 【0292】Postgres内核源码之dynahash 插入entry实现 【0293】Postgres内核之创建 dynahas…

ESP32 通过蓝牙显示歌词代码示例

通过蓝牙协议播放音乐,有的时候需要显示歌词,这里就是a2dp库获取了歌词 值得注意的是要想正确获取到歌词,必须打开各种播放器的字幕(歌词)开关 本项目用了三个开源库 a2dp,tft_espi,xfont. a2dp &#x…

基于python实现的监听服务接口是否正常,发送异常消息到钉钉群

获取钉钉机器人 创建钉钉群组(要求至少三个成员)进入群组 设置>机器人>添加机器人选择自定义机器人 按照要求填写完获取到 Webhook的链接 实现代码 from time import sleep import requests import json from datetime import datetime import logging# 配置日志记录的…

数据结构第11节: B树

B树是一种自平衡的树数据结构,它能够保持数据排序,并且在插入、删除和查找操作中具有对数时间复杂度。B树广泛应用于文件系统、数据库和索引中,因为它们可以有效地处理大量数据。 B树的特点: 所有叶子节点都位于同一层。每个节点…