前言

  在经典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. 如何在github上寻找漏洞

    https://github.com/search?p=2&q=eval%28%24_POST[&ref=searchresults&type=Code   1.$_GET s ...

  2. iOS-文件断点续传

    * 移动客户端在和服务器交互的时候,上传和下载使用十分广泛. * 在我们下载文件的时候,我们在点击暂停的时候可以暂停下载,点击下载的时候可以继续下载,这个功能如何实现? * 下载进度条如何显示? 先大 ...

  3. hdu 3264 圆的交+二分

    Open-air shopping malls Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

  4. Linux System Programming 学习笔记(八) 文件和目录管理

    1. 文件和元数据 每个文件都是通过inode引用,每个inode索引节点都具有文件系统中唯一的inode number 一个inode索引节点是存储在Linux文件系统的磁盘介质上的物理对象,也是L ...

  5. Linux System Programming 学习笔记(七) 线程

    1. Threading is the creation and management of multiple units of execution within a single process 二 ...

  6. php的fastcgi_finish_request()函数

    php的fastcgi_finish_request()函数 功能: 此函数冲刷(flush)所有响应的数据给客户端并结束请求. 这使得客户端结束连接后,需要大量时间运行的任务能够继续运行. 返回值: ...

  7. 牛客网 牛客练习赛11 A.假的线段树

    看不懂题意,而且太菜,写了两道就溜了... A.假的线段树 链接:https://www.nowcoder.com/acm/contest/59/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2 ...

  8. Codeforces 877E Danil and a Part-time Job(dfs序 + 线段树)

    题目链接   Danil and a Part-time Job 题意    给出一系列询问或者修改操作 $pow$ $x$表示把以$x$为根的子树的所有结点的状态取反($0$变$1$,$1$变$0$ ...

  9. Linux下使用mv重命名文件或者移动文件(增强版的工具为rename)

    mv命令既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B 例子:将/a目录移动到/b下,并重命名为c mv /a /b/c 例子:将文件A.txt重命名为B.txt mv ...

  10. UPLINK口

    为什么我买的交换机没有UPLINK口? UPLINK端口的作用是为了解决网络设备互连时的网线(交叉线和直通线)的使用问题.现在新出的交换机有的是没有UPLINK口的,没有UPLINK口的交换机的每个端 ...