优化梯度计算的改进的HS光流算法
前言
在经典HS光流算法中,图像中两点间的灰度变化被假定为线性的,但实际上灰度变化是非线性的。本文详细分析了灰度估计不准确造成的偏差并提出了一种改进HS光流算法,这种算法可以得到较好的计算结果,并能明显减少光流计算的迭代次数。
经典HS光流法的误差分析
以前的梯度计算方法只考虑到了图像灰度的一阶变化率而没有考虑高阶部分,在实际应用中会导致较大误差。根据如下一般泰勒公式:
(1)
假设物体没帧的位移是0.5像素,那么如果物体移动了30个像素之后,累计的误差可达

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

曲线表示移动物体表面未知的真实灰度变化,Y轴表示灰度,物体沿X轴运动,d1表示实际的移动距离,X1和X2表示两个相邻的离散点,t2表示相邻点X1和X2之间的灰度梯度。
求移动距离实际上就是:已知X1对应点的灰度Y1和X2对应点的灰度Y2,以及移动点的灰度Y’,求移动点X‘的位置。
传统光流法得到的移动距离将会是d2。由上图可知,这个结果和实际情况有一定的计算误差,并且,该误差不能通过增加循环次数来减少。而且,二维情况下产生的误差将会更大。
改进的HS光流法
该算法首先确定移动距离 dn 作为指导参数来产生逼近期望梯度的梯度值,之后再用该梯度重新新一轮的循环,计算出新的移动距离 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光流算法的更多相关文章
- HS光流算法详解<转载>
HS 光流法详解 前言 本文较为详细地介绍了一种经典的光流法 - HS 光流法. 光流法简介 当人的眼睛与被观察物体发生相对运动时,物体的影像在视网膜平面上形成一系列连续变化的图像,这一系列变化的图像 ...
- 光流算法:Brox算法(转载)
参考论文:1. High Accuracy Optical Flow Estimation Based on a Theory for Warping, Thomas Box, ECCV20042. ...
- 光流算法:Brox算法
参考论文:1. High Accuracy Optical Flow Estimation Based on a Theory for Warping, Thomas Box, ECCV20042. ...
- Andrew Ng机器学习课程笔记--week10(优化梯度下降)
本周主要介绍了梯度下降算法运用到大数据时的优化方法. 一.内容概要 Gradient Descent with Large Datasets Stochastic Gradient Descent M ...
- HS 光流法详解
前言 本文较为详细地介绍了一种经典的光流法 - HS 光流法. 光流法简介 当人的眼睛与被观察物体发生相对运动时,物体的影像在视网膜平面上形成一系列连续变化的图像,这一系列变化的图像信息不断 &quo ...
- LK光流算法:提高计算精度和增加搜索范围
LK光流算法:提高计算精度和增加搜索范围 关于LK算法的基本理论,见:http://www.cnblogs.com/dzyBK/p/4960630.html 这里主要阐述如何提高LK算法的计算精度和在 ...
- 光流法详解之二(HS光流)
Horn–Schunck光流算法[1]是一种全局方法估算光流场. 参考博文:https://blog.csdn.net/hhyh612/article/details/79216021 假设条件: H ...
- 实现属于自己的TensorFlow(二) - 梯度计算与反向传播
前言 上一篇中介绍了计算图以及前向传播的实现,本文中将主要介绍对于模型优化非常重要的反向传播算法以及反向传播算法中梯度计算的实现.因为在计算梯度的时候需要涉及到矩阵梯度的计算,本文针对几种常用操作的梯 ...
- 多类 SVM 的损失函数及其梯度计算
CS231n Convolutional Neural Networks for Visual Recognition -- optimization 1. 多类 SVM 的损失函数(Multicla ...
随机推荐
- 【Vijos1222】等值拉面(DP)
题意:有N个数对(a[i],b[i]) 每次可以把(x,y)变成(x+a[i],y+b[i])或(x+b[i],x+a[i]),后者称为交换一次 求使abs(x-y)最小时的最小交换次数 n<= ...
- vSphere Client 更改 ESX/ESXi 主机的端口
https://blog.csdn.net/hanzheng260561728/article/details/51283808?locationNum=8&fps=1
- 在 .Net Core xUnit test 项目中使用配置文件
在对项目做集成测试的时候,经常会需要用到一些参数比如用户名密码等,这些参数不宜放在测试代码中.本文介绍一种方法:使用配置文件. 添加配置文件 在集成测试项目目录下新建文件:Configuration. ...
- luogu P1140 相似基因
题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了4种核苷酸,简记作A,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类基因工作组的任务中,生物学家研究 ...
- 327. Count of Range Sum
/* * 327. Count of Range Sum * 2016-7-8 by Mingyang */ public int countRangeSum(int[] nums, int lowe ...
- mac 安装opencv-python
Mac下安装opencv-python 项目中使用的是opencv 2的版本,因此下面说一下opencv2的一些安装流程. 安装方法 1:如果没有homebrew的话,需要先安装 安装命令: ruby ...
- Android Studio apk 打包流程(转)http://blog.chinaunix.net/uid-26000296-id-5567890.html
1.Build -> Generate Signed APK...,打开如下窗口 2.假设这里没有打过apk包,点击Create new,窗口如下 这里只要输入几个必要项 Key store p ...
- 记一次痛苦的ubuntu配置Go环境 -- Ubuntu & Go
下载Go一定到: https://golang.org/dl/ 这里, 其他的都不好使. 还有go不一定跟32位和64有关, 还和CPU架构有关, 不知道架构一个一个试, 亦可以看我的关于查看Ubu ...
- 【Tensorflow】tf.argmax函数
tf.argmax(input, axis=None, name=None, dimension=None) 此函数是对矩阵按行或列计算最大值 参数 input:输入Tensor axis:0表示 ...
- pycharm的todo和fixme标记,标志为今后再做和bug点
使用方法,及查看方法: https://blog.csdn.net/xiemanR/article/details/73368440