图像跟踪(十一)CFWCR目标跟踪算法

时隔一年,再次回归目标跟踪领域,图像跟踪系列博客继续更新。目标跟踪领域在2017年发生了许多大事件,新老牛人提出了多个有趣的算法,这些在VOT2017中都有体现。这篇博客介绍的CFWCR算法取得了VOT2017比赛的第二名,CFWCR正是以MD大神的ECO(我之前的博客介绍过该算法)为Baseline的(CFWCR作者表示复现不了ECO的效果,这就很尴尬了),于是CFWCR的效果出来之后,就成为CF派系的重量级算法。

阅读更多

使用C++在Windows/Linux下精确计时

在Windows和Linux下有多种计时方式,包括Windows定时器(精度大约在15ms),借助CPU的多媒体定时器(精度在1ms左右)。然而在计算机主板上都有专门的时钟芯片,可以提供极为精确的时间,在选择计时方式时,要考虑到,获取约精确的时间,就要耗费更多的资源,在实际编程时应根据使用条件选择合理的计时方式。这篇博客将介绍Windows/Linux下获取精确时间的方法,并提供一个封装较好的简单计时类。

阅读更多

图像配准的常用方法

图像配准的方法大致分为三类,一类是基于灰度和模板的,这类方法直接采用相关运算等方式计算相关值来寻求最佳匹配位置,方法简单较为死板,一般效果不会太好。第二类是基于特征的匹配方法,如sift、surf点特征,或者向量特征等等,适应性较强。第三类是基于域变换的方法,采用相位相关(傅里叶-梅林变换)或者沃尔什变换、小波等方法,在新的域下进行配准。

我之前的博客介绍过傅里叶-梅林变换进行图像配准,其实也就是基于相位相关的原理,结合对数-极坐标变换进行图像配准,并给出了源码。这篇博客是对以上三类方法的小总结,无源码,都是废话,见谅。

阅读更多

无人驾驶汽车工作原理及关键技术

作为研究生,科研工作进入最后阶段,繁忙于各种非技术性问题,已经不太有看Paper分享新东西的精力,网站内容也很久没有更新,考虑到今后可能进入无人驾驶领域,有空时会Post一些科普性的ppt,可能会有些琐碎浅显。个人的考虑是,即使降低原创性和质量,也有必要维持网站内容不断更新,以后有机会从事新的研究,再不断的来分享。

作为计算机视觉研究者,无人驾驶无疑是对目前计算机视觉技术、传感器技术的总结,这篇博客主要介绍(科普)一些无人驾驶的工作原理和关键技术。

阅读更多

Piotr Dollar目标检测工具箱,样本标注与训练工具Matlab

Piotr Dollar在行人检测方面有着深入的研究,尤其是在深度学习兴起以前,其对Adaboost的研究优化和改进令人瞩目,其目标检测工具箱Piotr Dollar’s Toolbox被广泛使用。在使用该工具箱的过程中,我们通常需要手动勾选正样本,不得不承认,在监督学习的过程中,标注样本是重要,且费时费力的重复体力劳动,提高标注的效率至关重要。

博主在这篇博客中,释出一份配合该工具箱使用的GUI程序,帮助勾选样本,进行标注。

阅读更多

双目立体视觉中的相机标定与机器人位置标定

在基于双目立体视觉的工业机器人抓取系统中涉及三个坐标系:世界坐标系(现实世界中的坐标位置)、机器人坐标系(以机器人基座标 标识的坐标位置)和 相机坐标系(以双目相机中某相机光心位置为原点,光轴作为参考坐标轴的坐标表示)。这篇博客主要介绍立体视觉系统中坐标转化,以及实际操作中如何进行相机的标定和机器人的标定。

这篇博客主要是博主的实验流程记录,代码托管于github。

阅读更多

MFC-SpinButton响应鼠标抬起事件

SpinButton鼠标抬起的响应需要将CSpinButtonCtrl控件先子类化,然后再子类中响应WM_LBUTTONUP事件,在该事件的响应函数中发送消息给父窗口,这里博主发送的是自定义消息,然后再父窗口中接受该消息进行处理,即可响应Spin控件的鼠标抬起了。具体代码如下:

阅读更多

MFC中嵌入VTK显示点云数据

最近折腾MFC中的PCL点云显示,折腾了很久,尝试过OpenGL方案、VTK方案等,最终整理出一套最优的方案,决定使用VTK来显示点云。博主将显示整理成一个CVtkViewer类,该类继承自CStatic,直接修改Picture控件变量的类型就可以实现显示,对点云和图像接口进行封装,使用较为方便和安全。并且使用VTK显示的类封装可以在多个窗口分别显示,如左图所示可以在两个以上的窗口分别显示不同的点云,如果使用OpenGL来实现会相当麻烦。还有就是VTK这种上层接口封装非常全面,OpenGL太偏底层了,比如VTK会自动设置合适的相机位置,而OpenGL实现同样的效果就需要自己解算位置,这也是博主放弃OpenGL的重要原因。

在这篇博客之前,你需要对VTK开发有基本了解,博主使用的是VTK7.0,PCL1.8.0,博客中对博主遇到的编译错误、运行错误等都做了详细解释,希望能有帮助。

阅读更多

VTK开发错误处理

VTK开发过程中常常遇到的一些问题,比如:no override found for ‘…’ 这种错误,如果没有用CMake编译肯定会出现,并且不好查,这些错误常常让人摸不着头脑。

本文参考了51blog和stackoverflow中相关内容,并做整理完善,希望能有帮助。

阅读更多

进程间通信(内存映射)方式传输CV::Mat图像数据

关于内存映射的进程间通信,我直接一篇博客已经详细介绍过,这里只是再次补充一个传输图像的应用,因为OpenCV中Mat格式较为常用(并且也很方便传输),刚好用到,就做个笔记好了。应用的场景是B进程中的Mat传给A进程,A进程接受并恢复为Mat格式。其它也没什么好说的,有细节为题就参见我之前的博客,那么开始吧。

阅读更多

MFC/C++多线程

操作系统中线程和进程的概念就不再强调,这篇博客主要介绍在Windows中多线程的创建、挂起、终止、通信、同步,大都是代码层面的介绍,这也是个人的笔记,摘抄自网络。

如果对这些概念不熟悉,建议先移步百度,或者操作系统教材,如果你支持查阅手册或者API参数讲解,那么希望这篇博客能给你答案。话不多说,开始吧。

阅读更多

MFC坐标转换详解

MFC中存在两个坐标系,一个是屏幕坐标系,以显示器左上角为原点,另一个是窗口坐标系,以MFC包含边界的客户端的左上角为原点,我们在涉及MFC坐标操作时常常对获取的坐标是哪个坐标系下的坐标感到非常困扰,于是这篇博客将详细解析MFC中的各种坐标以及其转换关系,希望能有帮助。

阅读更多

Protobuf反射详解

所谓反射机制,就是能够在运行时知道任意类的所有属性和方法,能够调用任意对象的任意方法和属性。这种动态获取的信息以及动态调用对象方向的功能称为反射机制。

不像Jave等语言,C++本身没有反射机制,在使用C++版本Protobuf时,protobuf通过proto文件产生响应的message和service,protobuf可以通过proto文件提供反射机制,程序在运行时可以通过proto获取任意message和任意service的属性和方法,也可以在运行时调用message的属性和方法。

阅读更多