前言

  在经典HS光流算法中,图像中两点间的灰度变化被假定为线性的,但实际上灰度变化是非线性的。本文详细分析了灰度估计不准确造成的偏差并提出了一种改进HS光流算法,这种算法可以得到较好的计算结果,并能明显减少光流计算的迭代次数。

经典HS光流法的误差分析

  以前的梯度计算方法只考虑到了图像灰度的一阶变化率而没有考虑高阶部分,在实际应用中会导致较大误差。根据如下一般泰勒公式:

    (1)

  假设物体没帧的位移是0.5像素,那么如果物体移动了30个像素之后,累计的误差可达

  

  在一维情况下,该误差产生的机理如下图所示:

  

  曲线表示移动物体表面未知的真实灰度变化,Y轴表示灰度,物体沿X轴运动,d1表示实际的移动距离,X1和X2表示两个相邻的离散点,t2表示相邻点X1和X2之间的灰度梯度。

  求移动距离实际上就是:已知X1对应点的灰度Y1和X2对应点的灰度Y2,以及移动点的灰度Y’,求移动点X‘的位置。

  传统光流法得到的移动距离将会是d2。由上图可知,这个结果和实际情况有一定的计算误差,并且,该误差不能通过增加循环次数来减少。而且,二维情况下产生的误差将会更大。

改进的HS光流法

  该算法首先确定移动距离 d作为指导参数来产生逼近期望梯度的梯度值,之后再用该梯度重新新一轮的循环,计算出新的移动距离 dn+1

  下面再次在一维的情况下解释该算法如何改进灰度梯度,首先请看下图:

  

  V表示移动距离,tp表示正方向上的两个像素点在图像中的梯度;tp则表示负方向上的两个像素点在图像中的梯度。实曲线是通过插值得到,虚曲线是假设的物体表面真实灰度曲线。

  考虑曲线的二阶导数得到如下函数:

    (2)

  用差商代替导数可得:

    (3)

  从而可得新的梯度公式:

    (4)

  该算法在大多数情况下都是收敛的,只要循环次数足够多,步进不要太大,则改进算法得到的运动距离一定充分地接近于该插值算法的理论距离。

  可推导出该插值在一维情况下得到的曲线数学表达式为:

    (5)

  为了与新的梯度相配合,引入下面几个公式:

    (6)
    (7)

改进的HS光流法的伪代码

  如果是计算前两帧则各个点位移置为 0,否则位移初始化为上两帧计算得到的位移;

  利用 (7) 式计算图像上各点的灰度对时间的差分It;  

  利用 (6) 式计算图像上各点灰度梯度;  ★

  对图像上的每一个块:{

    // 根据块中各点的位移计算块的平均位移;

    do {

      根据 (4) 式计算块内每一点的灰度梯度;  ★

      然后用传统HS光流法计算块内各点的位移;

      根据块内各点的位移计算整个块的平均位移;

    } while ( 迭代次数足够多 || 最近两次计算平均位移非常接近 );

  }

  end;

  // 需要说明的是尾部标有★的两行代码,它们协同计算出 tnew

结束语

  灰度梯度的准确性是所有光流法准确性的基础,本文提供的改进的HS光流法针对传统HS光流法中不准确的灰度梯度提出了一种新的能够循环求精的梯度算法。

优化梯度计算的改进的HS光流算法的更多相关文章

  1. HS光流算法详解<转载>

    HS 光流法详解 前言 本文较为详细地介绍了一种经典的光流法 - HS 光流法. 光流法简介 当人的眼睛与被观察物体发生相对运动时,物体的影像在视网膜平面上形成一系列连续变化的图像,这一系列变化的图像 ...

  2. 光流算法:Brox算法(转载)

    参考论文:1. High Accuracy Optical Flow Estimation Based on a Theory for Warping, Thomas Box, ECCV20042. ...

  3. 光流算法:Brox算法

    参考论文:1. High Accuracy Optical Flow Estimation Based on a Theory for Warping, Thomas Box, ECCV20042. ...

  4. Andrew Ng机器学习课程笔记--week10(优化梯度下降)

    本周主要介绍了梯度下降算法运用到大数据时的优化方法. 一.内容概要 Gradient Descent with Large Datasets Stochastic Gradient Descent M ...

  5. HS 光流法详解

    前言 本文较为详细地介绍了一种经典的光流法 - HS 光流法. 光流法简介 当人的眼睛与被观察物体发生相对运动时,物体的影像在视网膜平面上形成一系列连续变化的图像,这一系列变化的图像信息不断 &quo ...

  6. LK光流算法:提高计算精度和增加搜索范围

    LK光流算法:提高计算精度和增加搜索范围 关于LK算法的基本理论,见:http://www.cnblogs.com/dzyBK/p/4960630.html 这里主要阐述如何提高LK算法的计算精度和在 ...

  7. 光流法详解之二(HS光流)

    Horn–Schunck光流算法[1]是一种全局方法估算光流场. 参考博文:https://blog.csdn.net/hhyh612/article/details/79216021 假设条件: H ...

  8. 实现属于自己的TensorFlow(二) - 梯度计算与反向传播

    前言 上一篇中介绍了计算图以及前向传播的实现,本文中将主要介绍对于模型优化非常重要的反向传播算法以及反向传播算法中梯度计算的实现.因为在计算梯度的时候需要涉及到矩阵梯度的计算,本文针对几种常用操作的梯 ...

  9. 多类 SVM 的损失函数及其梯度计算

    CS231n Convolutional Neural Networks for Visual Recognition -- optimization 1. 多类 SVM 的损失函数(Multicla ...

随机推荐

  1. bzoj 4311 向量 时间线建线段树+凸包+三分

    题目大意 你要维护一个向量集合,支持以下操作: 1.插入一个向量(x,y) 2.删除插入的第i个向量 3.查询当前集合与(x,y)点积的最大值是多少.如果当前是空集输出0 分析 按时间线建线段树 大致 ...

  2. 【BZOJ4472】salesman(树形DP)

    题意: 给定一颗有点权的树,每个树上的节点最多能走到lim[u]次,求一条路径,使路径上的点权和最大,每个节点上的点权如果走了多次只能算一次.还要求方案是否唯一. 思路:每个点只能取lim[u]-1个 ...

  3. ORCLE数据库用户、权限、角色管理

    PS:中括号表示可选项. ORACLE 用户管理 1.创建用户 CREATE USER username   --用户名 IDENTIFIED BY password --密码 [ACCOUNT LO ...

  4. ZOJ 2619: Generator

    类型:概率 + 解方程组(高斯消元法) + KMP(好吧其实我用的是暴力~)题意:你可以等概率的选择大写字母里的前n个字母,在纸上写啊写,一直到出现给定的字符串.问写的字母个数的期望.思路: 期望递推 ...

  5. 使用 IntelliJ IDEA 开发一般 Java 应用程序时配置 Allatori 进行代码混淆

    使用 IntelliJ IDEA 开发一般 Java 应用程序时通过 Allatori 进行代码混淆非常容易配置,下面总结一下本人经验,介绍一下配置方法. 首先在 IDEA 的 Module 所在硬盘 ...

  6. jQuery移动端手机键盘输入车牌号代码【附加新能源车牌】

    最近在移动应用中要做到一个录取汽车牌号码的功能,在网上找了一个插件后发现没有增加新能源车牌功能, 和同事研究了一下,将其进行改造完美的实现了这个功能,这里放出该插件的源码: 原插件来自A5源码网[ht ...

  7. Wannafly挑战赛2 D.Delete(拓扑排序 + dij预处理 + 线段树维护最小值)

    题目链接  D.Delete 考虑到原图是个DAG,于是我们可以求出每个点的拓扑序. 然后预处理出起点到每个点的最短路$ds[u]$, 和所有边反向之后从终点出发到每个点的最短路$dt[u]$. 令点 ...

  8. [原创][FPGA]有限状态机FSM学习笔记(一)

    1. 概述--何为有限状态机FSM? 有限状态机-Finite State Machine,简写为FSM,是表示有限个状态及在这些状态之间的转移和动作等行为的数学模型,在计算机领域有着广泛的应用.通常 ...

  9. guava之cache

    转自:http://ifeve.com/google-guava-cachesexplained/ 范例 01 LoadingCache<Key, Graph> graphs = Cach ...

  10. 「NOI2014」动物园

    link : https://loj.ac/problem/2246 水水KMP #include<bits/stdc++.h> #define ll long long #define ...