matlab 高斯迭代代码_KLT目标跟踪学习与代码实现
![](/assets/blank.gif)
一、 前言
本篇文章链接:https://zhuanlan.zhihu.com/p/91341439
近年来研究跟踪的方法很多,各种算法几乎层出不齐,主要可将其分为两类目标跟踪算法,一类是传统的目标跟踪算法,一类是基于深度学习的跟踪方法,而基于传统的目标跟踪算法比较经典的有粒子滤波(pf)、Mean Shift目标跟踪算法以及KLT的跟踪算法又或者叫做Lucas光流法,这些方法各有优缺点:
粒子滤波(pf):能够比较好的在全局搜索到最优解,但其求解速度相对较慢,由于其是基于颜色直方图的计算,对颜色相近的物体不太能够区别开来。
Mean Shift算法:很容易陷入局部最优,但其跟踪的速度很快。
基于以上两种算法各自的优缺点,常常有人将Mean Shift和pf做结合,恰好在很多方面能够达到互补的效果。
二、 KLT跟踪算法
Kanade-Lucas-Tomasi方法,在跟踪方面表现的也不错,尤其在实时计算速度上,用它来得到的,是很多点的轨迹“trajectory”,并且还有一些发生了漂移的点,所以,得到跟踪点之后要进行一些后期的处理,说到Kanade-Lucas-Tomasi方法,首先要追溯到Kanade-Lucas两人在上世纪80年代发表的paper:An Iterative Image Registration Technique with an Application to Stereo Vision,这里讲的是一种图像点定位的方法,即图像的局部匹配,将图像匹配问题,从传统的滑动窗口搜索方法变为一个求解偏移量d的过程,后来Jianbo Shi和Carlo Tomasi两人发表了一篇CVPR(94')的文章Good Features To Track,这篇文章,主要就是讲,在求解d的过程中,哪些情况下可以保证一定能够得到d的解,这些情况的点有什么特点(后来会发现,很多时候都是寻找的角点)。
1、具体实现:
(1)几个前提假设:很直观的讲,如果判断一个视频的相邻两帧I、J在某局部窗口w上是一样的,则在窗口w内有:
1)亮度恒定:是为了保证其等号成立不受亮度的影响。这里也可以是从t-1时刻到t时刻,如下所示:
![](/assets/blank.gif)
亮度恒等式,时刻亮度与t时刻亮度相等:
2)时间连续或者是运动是“小运动”:为了保证KLT能够找到点
3)空间一致,临近点有相似运动,保持相邻:在同一个窗口中,所有点的偏移量都相等。
假设对像素点来说,周围的像素点都保持相同的移动距离假设窗口大小为
![](/assets/blank.gif)
得到下面的过约束等式:
![](/assets/blank.gif)
即:
采用最小二乘法求解d:
![](/assets/blank.gif)
这样我们就得到了KLT光流等式与该窗口的Hessian矩阵:
![](/assets/blank.gif)
![](/assets/blank.gif)
2、具体推导过程:
在窗口中,所有
![](/assets/blank.gif)
用积分来表示上述式子,以上式子可等效为:
![](/assets/blank.gif)
这个式子的含义,即找到两幅图像中,在W窗口中,I,J的差异,这里的w(x)表示权重函数,一般我们可以采用高斯函数进行加权。其中I以
![](/assets/blank.gif)
的值为0,由泰勒性质展开:
![](/assets/blank.gif)
可以得到:
![](/assets/blank.gif)
于是,问题转化为:
![](/assets/blank.gif)
其中:
![](/assets/blank.gif)
从而,问题即为:
![](/assets/blank.gif)
可将上面的等式看作为:
这里,Z为一个2x2的矩阵,e为一个2x1的向量,
![](/assets/blank.gif)
为了要使得d能够得到解,则Z需要满足
3、KLT特征跟踪的主要步骤:
1) 用诸如Harris角点的特征检测器在初始帧中寻找一系列特征点;
2) 基于各特征点的局部模板,通过采用平移或仿射运动模型的Lucas-Kanade运动估计,寻找各特征点的帧间对应矢量。
3) 对于各特征点,在各帧中判断其跟踪的好坏。有些特征可以移除(比如去除掉那些被遮挡的或者无法准确跟踪的),可以周期性(如每隔5帧)加入一些新的特征。
三、 基于Opencv代码实现
代码参考:http://cecas.clemson.edu/~stb/klt/
对于下面两幅图像img0.pgm和img1.pgm:
![](/assets/blank.gif)
![](/assets/blank.gif)
检测Harris角点得到:
![](/assets/blank.gif)
KLT跟踪计算得到:
![](/assets/blank.gif)
![](/assets/blank.gif)
上面分别选取了100个特征点,计算了其所在的位置,最后有55个特征点成功被追踪到。
四、 基于Matlab的人脸检测与KLT特征跟踪
1、基于Matlab的官方自带的人脸检测的代码实列:
主要参考代码:https://ww2.mathworks.cn/help/vision/examples/face-detection-and-tracking-using-the-klt-algorithm.html
![](/assets/blank.gif)
然后在框内进行特征点提取。
![](/assets/blank.gif)
KLT跟踪:
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
最后由于我的动作太快,导致了后面的跟踪失败,可见这里体现了前面提到的KLT的假设2:时间连续或者是“小动作”,KLT跟踪局限性还是很大。
2、具体原理步骤实现的代码:
有大神已经在github上上传了相关的代码:https://github.com/yjadaa/KLT,具体实现原理步骤可以参考论文 《good features to track》,效果图附上:
![](/assets/blank.gif)
![](/assets/blank.gif)
我在基于此上的代码基础上做了修改,通过框选指定矩形内检测最大角点响应点,对该角点进行跟踪,代码我已经上传到github上,
有需要的可自行下载:https://github.com/hli151/Object-Tracking,代码文件描述如下:
![](/assets/blank.gif)
![](/assets/blank.gif)
代码运行结果如下:
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
由于本身KLT算法就是很耗时的,所以运行过程中会比较慢,但是能够看到自己修改的代码能有结果也很开森啦,但是到后面不知道出于什么原因,跟踪就不准确,导致跟踪失败,我猜测是不是KLT算法的三个前提假设不满足了呢?或者是有尺度变化导致?(因为KLT算法对目标的跟踪是不具备尺度不变性的),总之,这个算法还是很有局限性的,有待改善!
五、基于QT的代码实现:
也有大神已经在github上上传了相关的代码:https://github.com/search?q=KLT+QT,具体实现的效果图附上:
![](/assets/blank.gif)
![](/assets/blank.gif)
由效果图我们不难看出,物体的运动速度越慢,所画出来的运动场的矢量对应幅度越短,物体的运动速度越快,所画出来的运动场的矢量对应幅度越长。
主要参考:
1、具体推导过程。https://www.cnblogs.com/moondark/archive/2012/05/12/2497391.html
2、这篇博客很不错哦。
lowkeyway:(三十八)稀疏光流----KLTzhuanlan.zhihu.com
![](/assets/blank.gif)
五、结束语。
作者人丑勿喷,小菜鸟一枚,欢迎指点,谢谢大家!!!
matlab 高斯迭代代码_KLT目标跟踪学习与代码实现相关推荐
- opencv动态目标跟踪学习总结
用opencv实现对视频中动态目标的追踪 第一步,是要建立一个编程环境,然后加载opencv的库路径等等.具体步骤在 http://www.opencv.org.cn/ 的"安装" ...
- Jarry的目标跟踪学习笔记一
Jarry的目标跟踪学习笔记一 目标跟踪是计算机视觉中的一个重要方向,已经由来已久,并且有着广泛的应用,如:视频监控,人机交互, 无人驾驶等.在我的想象中,自己研究的内容就是,将来钢铁侠头盔里追踪敌人 ...
- Py之pygame:有趣好玩—利用pygame库实现鱼儿自动实时目标跟踪(附完整代码)
Py之pygame:有趣好玩-利用pygame库实现鱼儿自动实时目标跟踪(附完整代码) 目录 输出结果 实现代码 输出结果 实现代码 #Py之pygame:利用pygame库实现鱼儿自动实时目标跟踪i ...
- c++代码好玩_Py之pygame:有趣好玩—利用pygame库实现鱼儿自动实时目标跟踪(附完整代码)...
Py之pygame:有趣好玩-利用pygame库实现鱼儿自动实时目标跟踪(附完整代码) 目录 输出结果 实现代码 输出结果 实现代码 #Py之pygame:利用pygame库实现鱼儿自动实时目标跟 ...
- 目标跟踪学习算法DSST
原文:http://blog.csdn.net/gxb0505/article/details/52601613?locationNum=8 简介(Accurate Scale Estimation ...
- 目标跟踪学习笔记_2(particle filter初探1)
首先提供几篇关于粒子滤波算法的博客: http://www.cnblogs.com/yangyangcv/archive/2010/05/23/1742263.html 这篇博客比较通俗易懂,简单的介 ...
- Staple目标跟踪算法C++代码测试
一.介绍 Staple综合了局部特征HOG和全局特征颜色直方图用于目标跟踪的算法. 首先作者发现颜色分布不足以将目标和背景区分开来.局部特征这样的模板在应对剧烈形变的时候效果往往很差. 作者针对这两个 ...
- 更深更宽的孪生网络,有效提升目标跟踪精度,代码开源
点击我爱计算机视觉标星,更快获取CVML新技术 本文为52CV群友Mr.Chen投稿,深入解读了CVPR 2019 跟踪方向的论文Deeper and Wider Siamese Networks f ...
- 目标跟踪学习笔记_1(opencv中meanshift和camshift例子的应用)
在这一节中,主要讲目标跟踪的一个重要的算法Camshift,因为它是连续自使用的meanShift,所以这2个函数opencv中都有,且都很重要.为了让大家先达到一个感性认识.这节主要是看懂和运行op ...
最新文章
- SAP MM 采购附加费在收货以及发票过账时候的会计分录
- 笔记-项目质量管理-质量保证和质量控制
- 2021牛客多校5 - Double Strings(dp+组合数学)
- django+celery+rabitmq
- 大数据 数据库 评测_为什么腾讯QQ的大数据平台选择了这款数据库?
- 玩转spring boot——开篇
- Java 集合处理/ 空值处理/ 异常处理,使用心得分享!
- Arduino温控风扇
- 最全编程开发常用单词词汇
- Phyton学习笔记
- 网络诊断提示:远程计算机或设备将不接受连接 (根治 )
- vue 二级路由嵌套和二级路由高亮问题
- UE_材质_UV计算相关
- linux查询日志命令加过滤,日志查看技巧之筛选[linux命令集][排查篇]
- Hive On Spark
- PBC Library Manual(PBC库手册)翻译(一)
- ARM-CPU工作原理,基于ARM的SOC讲解
- react中findDOMNode
- geo mysql_GEO数据库及应用场景介绍
- Java: 生成plist文件
热门文章
- 1.让博客被搜索引擎检索到
- 文档已无水印,苹果手机看word有水印
- 处理使用node-gpy时遇到的Can't find msbuild.exe错误
- 安卓学习日记(一):了解安卓架构(linux内核层、系统运行库层、应用框架层、应用层)
- sqlserver200864位下载_SQL Server 2008 SP3
- [SPC]生产统计过程控制一
- 机器学习中的常见问题——K-Means算法与矩阵分解的等价
- 同态加密GSW方案学习笔记1-GSW最初方案概述
- python 苹果 劣势_Mac与Windows各自的优势是什么?
- Arduino直接控制遥控汽车