这个页面力图搜集各种跟CV,AR相关的代码,如无特别声明,均是c/c++代码。还是一贯的标准,不求全面,只求质量。
如有特别推荐的代码,请在本页留言,或者email我:cvchina AT gmail.com
通用库/General Library
无需多言。
Recognition And Vision Library. 线程安全。强大的IO机制。包含AAM。
很酷的一个图像处理包。整个库只有一个头文件。包含一个基于PDE的光流算法。
图像,视频IO/Image, Video IO
AR相关/Augmented Reality
基于Marker的AR库
ARToolKit的增强版。实现了更好的姿态估计算法。
实时的跟踪、SLAM、AR库。无需Marker,模板,内置传感器等。
基于特征点检测和识别的AR库。
局部不变特征/Local Invariant Feature
目前最好的Sift开源实现。同时包含了KD-tree,KD-Forest,BoW实现。
基于Naive Bayesian Bundle的特征点识别。高速,但占用内存高。
基于OpenCV的Sift实现。
目标检测/Object Detection
又一个AdaBoost实现。训练速度快。
基于Centrist和Linear SVM的快速行人检测。
(近似)最近邻/ANN
目前最完整的(近似)最近邻开源库。不但实现了一系列查找算法,还包含了一种自动选取最快算法的机制。
另外一个近似最近邻库。
SLAM & SFM
monoSLAM库。由Androw Davison开发。
图像分割/Segmentation
使用Simple Linear Iterative Clustering产生指定数目,近似均匀分布的Super Pixel。
目标跟踪/Tracking
基于Online Random Forest的目标跟踪算法。
Kanade-Lucas-Tracker
Online Boosting Trackers
直线检测/Line Detection
基于联通域连接的直线检测算法。
基于梯度的,局部直线段检测算子。
指纹/Finger Print
基于感知的多媒体文件Hash算法。(提取,对比图像、视频、音频的指纹)
图像检索/Image Retrieval
Pyramid Matching Algorithm实现。
一个简单的的Vocabulary Tree实现。
视觉显著性/Visual Salience
Ming-Ming Cheng的视觉显著性算法。
最快,最好的开源FFT。
轻量级的FFT实现。许可证是亮点。
音频处理/Audio processing
音频处理,音频合成。
音频文件IO。
音频重采样。
分类: 标签: adaboost, ann, ARToolKit, artoolkitplus, bazar, cimg, code, devil, Ferns, ffmpeg, fft, fftreal, fftw, flann, KLT, open source, opencv, pHash, portvideo, ptam, ravl, scenelib, sift, slartoolkit, sport universal, TLD, vlfeat, 代码, 行人检测

MonoSLAM的概念来自于SLAM(wiki),是Robotics中的一种定位算法,全称是Simultaneous Localization and Mapping。
让机器人知道自己在那里(Localization),可以用GPS,但是误差有点大(5米左右?),而且还必须在室外。怎么才能让机器人在室内,或者更精确地知道自己的位置呢?SLAM就是一种方法。
基本的想法是,如果我是一个机器人,我知道两个定点1:(x1,y1)和定点2:(x2,y2),我现在可以看见定点1,测量一下,离它5米,把头向右转过30度角后,可以看见离定点2,测量一下,离它10米。然后解一个三角形,我就知道自己在那里了(Localization),位置准确度和测量精度有关(转角,距离),通常可以控制在很小。
但是问题又来了,每次我走几步,就得回头看看定点1和定点2,才知道自己在哪里。这一步三回头的走法,真是一件非常二的事情。于是聪明勤劳勇敢的博士生们想出来一个方法,在第一步的时候,一旦我知道自己在哪里,我就添加几个定点:定点3,定点4,定点5……。因为知道自己的坐标,我可以测量出这些新定点离我多远,加上自己的坐标,就知道这些定点在哪里(Mapping)。以后的定位(Localization)就可以用这些新定点。多了这些定点后,以后再走路,哇身边都是定点,腰不酸腿不疼,知道自己在哪里了。
所以SLAM就是指,同时(Simultaneous)知道自己的位置(Localization)和(And…) 新的定点的位置((feature) Mapping)。因为不管是测量距离,还是计算自己的转角,或记录行走的距离(利用Odometer)都会有noise,而直接计算SLAM,noise会叠加。所以一般SLAM要有一个Kalman Filter的过程。ICRA 10的一篇文章就讨论了为什么需要Filter. (ICRA 10: Why Filter?) .如果对SLAM还有兴趣,可以看看这个Oxford的Summer School。
而MonoSLAM,是Andrew Davison提出来的利用一个摄像头来做SLAM的方法,也叫Real-Time Structure From Motion。在这里,定点变成了visual feature,测量定点的位置转变为match feature, then triangulate. 一个2004年的demo 。当摄像头在空间里忘乎所以地移动时,MonoSLAM都可以利用feature matching,知道摄像头的位置,和那些feature的位置。demo中的右图的黄线,是camera的trajectory。而椭圆表示对于新加的feature的不确定性。paper

可以看到在demo中,虽然知道摄像头的位置,但是mapping的feature很少很稀疏,这样不好不强大。经过了6年,随着CPU,GPU越来越可怕,人民生活越来越幸福,Andrew Davison这个组终于在CVPR 10搞出了dense live MonoSLAM:利用GPU计算PTAM,然后Mesh成Surfeace。请看demo。有点长,请耐心,最后的小车的激情一跃很精彩。project page
SLAM和MonoSLAM在网上都有很多现成的code。像MRPT (跨平台),Andrew Davison的SceneLib (Linux),还有C#版本的。
最新评论