优化梯度计算的改进的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 ...
随机推荐
- 进程与multiprocessing模块
一 进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在 ...
- 2017-2018-2 20179204《网络攻防实践》linux基础
我在实验楼中学习了Linux基础入门课程,这里做一个学习小结. 第一节 linux系统简介 本节主要介绍了linux是什么.发展历史.重要人物.linux与window的区别以及如何学习linux. ...
- input弹出的手机键盘搜索事件
一.input的搜索框 在input标签里面把type设置为search就可以了.弹出的手机键盘回车键也会变成搜索或者是搜索的图标. <input id="search" ...
- 如果你的css文件这么分类,可维护性大大增强!--摘抄
按照css的性质和用途,我们可以将css文件分成: 公共型样式 特殊型样式 皮肤型样式 并以此为顺序引用. 那么他们分别是什么呢? 公共型样式是最为重要的部分,对于比较小的项目,我们只引入一个css, ...
- 【MFC】利用单一对话框内的分页技术实现向导功能(转)
原文转自 http://blog.csdn.net/yongh701/article/details/43793151 所谓的向导功能,在win32的程序中常常见于安装程序或者程序内的设置向导,该向导 ...
- Codeforces Gym101606 I.I Work All Day (2017 United Kingdom and Ireland Programming Contest (UKIEPC 2017))
I I Work All Day 这个题就是取模找最小的. 代码: 1 #include<iostream> 2 #include<cstdio> 3 #include< ...
- 计蒜客 UCloud 的安全秘钥(随机化+Hash)
题目链接 UCloud 的安全秘钥 对于简单的版本,我们直接枚举每个子序列,然后sort一下判断是否完全一样即可. #include <bits/stdc++.h> using names ...
- BZOJ——1419: Red is good
http://www.lydsy.com/JudgeOnline/problem.php?id=1419 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: ...
- 洛谷—— P1440 求m区间内的最小值
https://www.luogu.org/problemnew/show/P1440 题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的 ...
- Leetcode总结之Backtracking
本文我们就Leetcode中的一个类型的题目backtracking进行一系列的总结和归纳.backtracking这个方法本质是建立在递归的基础上,不断尝试新的路径,这里关键是每次尝试完以后需要退回 ...