KCF算法是目标跟踪领域最重要的算法(之一),为什么敢说最重要呢?KCF的特点:实现简洁、效果好、速度快。并且博主认为,KCF算法扣住了跟踪问题的一个难点,就是样本过少,通过循环矩阵位移产生大量样本来解决问题,并且通过离散傅里叶变换的推导,在频域计算速度极快。总之,KCF设计非常精妙,以至于现在许多跟踪算法都以KCF为基石来构建。
PengChao
图像跟踪(三)MEEM算法
在长时间视频目标跟踪过程中,由于遮挡、形变、旋转等原因,常常发生样本被污染的情况,MEEM算法通过多专家模型来解决样本被污染的问题。MEEM算法的核心思想是,对当前帧应用多个检测器,根据多个预测值来判断可信,这多个检测器就是从过去储存的分类器中选取。是一种典型的多专家模型
应对样本污染,博主个人不是很推荐这种方法,毕竟解法偏暴力,个人比较推崇denoSRDCF中处理样本污染的方法,实际上效果也是更好的。不过该算法MEEM也是很经典的多专家模型,不妨学习一下。
图像跟踪(二)Struck算法
Struck算法提出于2011年,同样是一种track-by-detection的方法,与其它算法相比,它具有如下特点:使用的是Online-SVM,不直接给样本正负标签,文中称之为Structured Output Prediction。受益于SVM的拟合能力和速度,该算法是当时的state-of-the-art,并且效果和速度都优于其它算法。下面就来详细介绍。
图像跟踪(一)MIL多实例在线学习算法
最近看了一些图像跟踪的Paper,于是图像跟踪系列开更了。开篇介绍的是一种经典的图像跟踪算法MIL(多实例在线学习),提出于2009年,该算法将track-by-detection推向了新高潮。
2006年以来,使用目标检测的方法来处理图像跟踪问题取得了良好的效果,这种方法处理图像跟踪问题相对于处理目标检测问题是有所不同的,处理目标检测问题要求使用的样本量很少,并且实时性要求较高,也就是需要在线学习,快速检测。MIL算法就是在目标周围选取正负样本,通过一种多实例在线学习的方法,训练弱分类器,并且选择合适的特征进行组合,形成强分类器。由于MILBoost的特点,该算法速度较快,并具备抗遮挡能力。
视频图像跟踪算法综述
图像跟踪一直都是计算机视觉领域的难题,事先知道第一帧中的目标位置,然后需要在后续帧中找到目标。先验知识少,目标被遮挡、目标消失、运动模糊、目标和环境的剧烈变化、目标的高速运动、相机的抖动都会对目标跟踪造成影响,图像跟踪一直都是CV领域的难题。
深度学习用于图像跟踪有两大要解决的问题,一是图像跟踪一般使用在线学习,很难提供大量样本集,二是深度学习使用CNN时,由于卷积池化,最后一层的输出丢失了位置信息,而图像跟踪就是要输出目标的位置。
2013年以来,深度学习开始用于目标跟踪,并且为这些问题提供了一些解决思路。这篇博客首先阐述图像跟踪今年来的研究进展,然后再介绍深度学习用于图像跟踪近年来的研究,最后附上一些学习资料和相关网站。
MatConvNet深度学习框架简介及GPU使用注意事项
MatConvNet是一个基于Matlab的深度学习框架,在计算部分,最底层混编了C/C++或者CUDA C,这使得其速度并不是特别慢。就使用体验来说,MatConvNet是非常优秀的,借助于Matlab,定义网络,使用现有模型以及数据可视化都非常方便。
由于MatConvNet文档和Demo都比较完备,所以这篇博客主要介绍一些GPU的配置细节。
OpenCV实现Census变换
Matlab使用vision.TextInserter在图像中嵌入字符
使用Matlab处理图像的时候,如果需要将文字或者图形嵌入图像中,就需要用到vision工具集了,如果嵌入的是文字,那么就要使用vision.TextInserter,这个在新版本的Matlab中提供了insertText函数,与其功能差不多,不过vision.TextInserter要强大一些,insertText可以修改文字背景色块但是不能修改字体。
目标跟踪的评价指标(OTB与VOT)
目标识别的评价指标主要有ROC曲线,missrate(MR,其实就是FALSE Positive)、FPPI、FPPW等。单图像跟踪的评价指标主要有两个,一个是pixel error,一般是算中心距离,另一个是overlap rate,区域重叠率,用重叠区域除以两个矩形所占的总面积Aoverlap /(A1+A2-Aoverlap),常常用pixel error绘制帧误差曲线,用重叠率绘制误差曲线。除此之外,还有针对多目标图像跟踪的评价指标。在VOT中,目标跟踪的评价指标又多了EOA和EOF图,这篇博客都会介绍。
PCL库使用中遇到的一些问题及解决方法
PCL库的各种依赖和冲突让人头大,这里记录了一些PCL使用过程中的问题,长期更新(本次更新时间,2016年12月)。
立体视觉中的内参矩阵、基础矩阵、本质矩阵
立体视觉中的矩阵变换比较多。总的来说,内参矩阵 K是针对单相机的,通过焦距和主点位置直接表示了相机坐标系和图像坐标系之间的关系,如果考虑镜头的畸变,还需要有畸变系数,如果图像传感器有倾斜,还需要有倾斜因子。基础矩阵和本质矩阵是针对双目的,其中基础矩阵 F根据左右相机的RT关系,表示了对极线关系,基础矩阵是左右摄像机坐标系之间的关系,求解基础矩阵的核心是求左右相机的RT。本质矩阵 E是图像坐标系下的,结合了基础矩阵和内参矩阵,直接反应左右图像坐标系下对应点像素坐标的关系。
OpenCV进行各种矩阵变换及变换参数求解
OpenCV可以处理许多2D、3D的变换矩阵,包括但不局限于2D放射变换矩阵(2×3),二维点对的最优单映射变换矩阵H(3×3),四个二维点对之间的透射变换矩阵(3×3),多对三维点之间的旋转平移矩阵(3×4),计算多个点对之间的基矩阵和位姿变换矩阵等。这篇博客对这些变换函数进行了总结,可以通过该博客给出的名字搜索函数进行查询。
C++Intel/VS编译器编译Boost库
在使用Intel编译器(icc)时,如果还想调用Boost库,那么icc会自动调用icc编译的boost库,于是这篇博客就介绍了如何使用icc编译Boost库,并且附带Boost库编译时的参数说明,你可以按照这份说明编译出你想要的库版本。(如果你使用默认编译器,此博客也可做参考,除了编译器选择部分不同之外,其它都一样)
PCL库的环境配置及调用(Windows8.1+VS2013/VS2015)
PCL库被广泛用于三维重建,其在三维世界中的地位正如OpenCV在二维世界中的地位。因为其调用了很多第三方库,所以配置极其复杂。官方也推出了简单安装版OneInAll包,这篇博客主要介绍官方简单安装版的方法。由于简单安装版没有CUDA等模块,如果你想用上CUDA就必须得自己重新编译了(博主在使用CUDA8.0,折腾了一个下午放弃了,不过CUDA7.5及以下都有教程)。另外就是,如果想自己编译,这里有一篇很好的博客。如果想快速入门,这里也有一篇很好的博客。
编译64位levmar库
LM算法在诸多领域有着重要应用,Levmar库可以直接用来做LM,这篇博客主要介绍levmar库的编译过程。库编译本身十分普通,但是由于依赖了其它库,所以这篇博客列出了一些关键步骤,详细步骤参见这篇博客。这篇博客主要介绍CMake编译64为levmar库。
CUDA学习笔记(一)VS/C++代码调用CUDA C/C++函数
最近入手了一块GPU,就迅速的开始了GPU编程的学习,这里强行安利几个中文博客(很不错的哦):CUDA开发环境配置教程、CUDA从入门到精通、CUDA官方手册,这份官方手册的pdf版就在安装文件夹NVIDA Corporation的doc里面。
CUDA齐全丰富的开发工具使得VS可以直接新建CUDA C/C++工程,但是,如果我们要在一个已经建立好的C++工程中调用CUDA应该怎么做呢?这篇博客为您详细解答。
C++类的成员函数指针
对于一般的函数指针我们都比较了解了,而类的成员函数指针以及调用方式都有所不同。博主在调Bug的过程中,将相关资料整理到这篇博客中,仅供参考。