分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
目标跟踪是绝大多数视觉系统中不可或缺的环节。在二维视频跟踪算法中,基于目标颜色信息或基于目标运动信息等方法是常用的跟踪方法。从以往的研究中我们发现,大多数普通摄像头(彩色摄像头)下非基于背景建模的跟踪算法都极易受光照条件的影响。这是因为颜色变化在某种程度上是光学的色彩变化造成的。如基于体素和图像像素守恒假设的光流算法它也是假设一个物体的颜色在前后两帧没有巨大而明显的变化。
但在特定的场景应用中(如视频监控等领域),不失有一些经典的跟踪算法可以实现较好的跟踪效果。以下主要介绍三种经典的跟踪算法:CamShift算法、光流跟踪以及粒子滤波算法。最后将给出一个各种跟踪方法间的比较。
1、 CamShift(Continuously Adaptive Mean Shift)跟踪算法
CamShift算法是一种基于均值漂移的算法。均值移动的理论基础是概率密度估计。均值移动的过程实际上就是在概率密度空间中寻找局部极大点。从其全称可知CamShift的算法基础实际上是MeanShift算法,均值移动的操作过程可用如下几步来表示:
(a) 计算以初始点x0为中心的某一核窗所对应的均值移动向量mG(x0);
(b) 根据mG(x0)来移动核窗的中心位置,也即把mG(x0)中的加权平均值部分赋予x0,把x0作为新的初始点,并转回步骤(a);
(c) 重复(a)、(b)过程,直到满足某一预定的条件。
因此,均值移动过程就是寻找数据分布最密处的过程。
均值移动的实现过程可图示为:
(1) 计算目标区域的均值、移动目标区域
(2) 重新计算目标区域均值,还存在移动向量,继续移动目标区域
(3) 移动向量越来越小
(4) 找到局部极大点,停止移动
以上过程只是一次MeanShift算法过程,在连续帧上使用MeanShift算法就是CamShift跟踪算法。CamShift同经典的均值移动跟踪算法的基本思想是相同的,所不同的它是建立在颜色概率分布图和矩的基础之上。CamShift对室内环境下的目标跟踪具有较高的鲁棒性。
1、 光流跟踪算法
将三维空间中的目标和场景对应于二维图像平面运动时,他们在二维图像平面的投影就形成了运动,这种运动以图像平面亮度模式表现出来的流动就称为光流。光流法是对运动序列图像进行分析的一个重要方法,光流不仅包含图像中目标的运动信息,而且包含了三维物理结构的丰富信息,因此可用来确定目标的运动情况以及反映图像其它等信息。
光流是空间运动物体在观测成像面上的像素运动的瞬时速度。光流的研究是利用图像序列中的像素强度数据的时域变化和相关性来确定各自像素位置的“运动”,即研究图像灰度在时间上的变化与景象中物体结构及其运动的关系。一般情况下,光流由相机运动、场景中目标运动或两者的共同运动产生。光流计算方法大致可分为三类:基于匹配的、频域的和梯度的方法。
(1) 基于匹配的光流计算方法包括基于特征和基于区域两种。基于特征的方法不断地对目标主要特征进行定位和跟踪,对大目标的运动和亮度变化具有鲁棒性。存在的问题是光流通常很稀疏,而且特征提取和精确匹配也十分困难。基于区域的方法先对类似的区域进行定位,然后通过相似区域的位移计算光流。这种方法在视频编码中得到了广泛的应用。然而,它计算的光流仍不稠密。
(2) 基于频域的方法利用速度可调的滤波组输出频率或相位信息。虽然能获得高精度的初始光流估计,但往往涉及复杂的计算。另外,进行可靠性评价也十分困难。
(3) 基于梯度的方法利用图像序列的时空微分计算2D速度场(光流)。由于计算简单和较好的效果,基于梯度的方法得到了广泛的研究。虽然很多基于梯度的光流估计方法取得了较好的光流估计,但由于在计算光流时涉及到可调参数的人工选取、可靠性评价因子的选择困难,以及预处理对光流计算结果的影响,在应用光流对目标进行实时监测与自动跟踪时仍存在很多问题。
光流法检测运动物体的基本原理是:给图像中的每一个像素点赋予一个速度矢量,这就形成了一个图像运动场,在运动的一个特定时刻,图像上的点与三维物体上的点一一对应,这种对应关系可由投影关系得到,根据各个像素点的速度矢量特征,可以对图像进行动态分析。如果图像中没有运动物体,则光流矢量在整个图像区域是连续变化的。当图像中有运动物体时,目标和图像背景存在相对运动,运动物体所形成的速度矢量必然和邻域背景速度矢量不同,从而检测出运动物体及位置。采用光流法进行运动物体检测的问题主要在于大多数光流法计算耗时,实时性和实用性都较差。但是光流法的优点在于光流不仅携带了运动物体的运动信息,而且还携带了有关景物三维结构的丰富信息,它能够在不知道场景的任何信息的情况下,检测出运动对象。
对于视频监控系统来说,所用的图像基本都是摄像机静止状态下摄取得,所以对有实时性和准确性要求的系统来说,纯粹使用光流法来检测目标不太实际。更多的是利用光流计算方法与其它方法相结合来实现对目标检测和运动估计。
然而,在实际应用中,由于遮挡性、多光源、透明性和噪声等原因,使得光流场基本方程的灰度守恒假设条件不能满足,不能求解出正确的光流场,同时大多数的光流计算方法相当复杂,计算量巨大,不能满足实时的要求,因此,一般不被对精度和实时性要求比较高的监控系统所采用。
3、 粒子滤波跟踪算法
粒子滤波算法有很多变种,以Rob Hess实现的这种最基本的粒子滤波算法为例。它的核心思想是随机采样和重要性重采样。在不知道目标在哪里的情况下,随机向场景中分散粒子,撒完粒子后,根据特征相似度计算每个粒子的重要性,然后在重要的地方多撒粒子,不重要的地方少撒粒子。所以说粒子滤波较之蒙特卡洛滤波计算量较小。这种思想虽然简单,但效果往往很好。
粒子滤波实现对目标的跟踪通常分以下四个步骤:
(1) 初始化阶段-提取跟踪目标特征
该阶段要人工指定跟踪目标,程序计算跟踪目标的特征,比如可以采用目标的颜色特征。这点和CamShift算法类似,不能实现自动初始化。但我们可以在初始时给定一个颜色样本,实现程序的半自动初始化。然后计算该区域色调(Hue)空间的直方图,即为目标的特征。直方图可以用一个向量来表示,所以目标特征就是一个N*1的向量V。
(2) 搜索阶段—分撒搜索粒子
获取目标特征后,在场景中分撒许多搜索粒子去搜索目标对象。粒子分撒有许多种方式。比如,a) 均匀分撒。即在整个图像平面均匀的撒粒子(uniform distribution);b)在上一帧得到的目标附近按照高斯分布来放,可以理解成,靠近目标的地方多放,远离目标的地方少放。Rob Hess的代码用的是后一种方法。粒子放出去后按照初始化阶段得到的目标特征(色调直方图,向量V)计算它所处的位置处图像的颜色特征,得到一个色调直方图,向量Vi,计算该直方图与目标直方图的相似性(直方图匹配)。相似性有多种度量,最简单的一种是计算sum(abs(Vi-V))。每个粒子算出相似度后再做一次归一化,使得所有的粒子得到的相似度加起来等于1。
(3) 决策阶段
分撒出去的每个粒子将返回其所处位置的图像信息。比如,“一号粒子处图像与目标的相似度是0.3”,“二号粒子处图像与目标的相似度是0.02”,“三号粒子处图像与目标的相似度是0.0003”,“N号粒子处图像与目标的相似度是0.013”然后做加权平均。设N号粒子的图像像素坐标是(Xn,Yn),它报告的相似度是Wn,于是目标最可能的像素坐标X = sum(Xn*Wn),Y = sum(Yn*Wn)。
(4) 重采样阶段Resampling
在新的一帧图像里,为了搜索到目标的新位置,需要再分撒粒子进行搜索。但现在应该怎样分撒呢?这要根据上一帧各个粒子返回的相似度报告。比如,“一号粒子处图像与目标的相似度是0.3”,“二号粒子处图像与目标的相似度是0.02”,“三号粒子处图像与目标的相似度是0.0003”,“N号粒子处图像与目标的相似度是0.013”。综合所有粒子的报告,一号粒子处的相似度最高,三号粒子处的相似度最低,于是要重新分撒粒子,在相似度最高的粒子那里放更多条粒子,在相似度最低的粒子那里少放粒子,甚至把原来那条粒子也撤回来。这就是Sampling Importance Resampling,根据重要性重采样(更具重要性重新放粒子)。
(2)->(3)->(4)->(2)如是反复循环,即完成了目标的动态跟踪。
粒子滤波跟踪算法可用于视频监控领域,可以跟踪速度较快的跟踪目标。
4、 其他跟踪算法及优缺点
将其他一些常用的跟踪算法及优缺点形成了一个表,其原理不做赘述,可参阅相关文献。
local orientation correlation (LOC) , flocks of features tracking (FF) , optical flow tracking using templates on a regular grid (OF) and local feature tracking, KLT-tracker(KLT) , and boosted detection (BD).
参考
[1] 《基于均值移动的人脸跟踪简介》 未公开
[2] http://kb.cnblogs.com/a/1742263/
[3] AIDIA – Adaptive Interface for Display Interaction
[4] http://baike.baidu.com/view/2810997.htm
从cvchina搞到的机器视觉开源处理库汇总,转来了,很给力,还在不断更新。。。
无需多言。
Recognition And Vision Library. 线程安全。强大的IO机制。包含AAM。
很酷的一个图像处理包。整个库只有一个头文件。包含一个基于PDE的光流算法。
基于Marker的AR库
ARToolKit的增强版。实现了更好的姿态估计算法。
实时的跟踪、SLAM、AR库。无需Marker,模板,内置传感器等。
基于特征点检测和识别的AR库。
目前最好的Sift开源实现。同时包含了KD-tree,KD-Forest,BoW实现。
基于Naive Bayesian Bundle的特征点识别。高速,但占用内存高。
基于OpenCV的Sift实现。
又一个AdaBoost实现。训练速度快。
基于Centrist和Linear SVM的快速行人检测。
目前最完整的(近似)最近邻开源库。不但实现了一系列查找算法,还包含了一种自动选取最快算法的机制。
另外一个近似最近邻库。
monoSLAM库。由Androw Davison开发。
使用Simple Linear Iterative Clustering产生指定数目,近似均匀分布的Super Pixel。
基于Online Random Forest的目标跟踪算法。
Kanade-Lucas-Tracker
Online Boosting Trackers
基于联通域连接的直线检测算法。
基于梯度的,局部直线段检测算子。
基于感知的多媒体文件Hash算法。(提取,对比图像、视频、音频的指纹)
Ming-Ming Cheng的视觉显著性算法。
最快,最好的开源FFT。
轻量级的FFT实现。许可证是亮点。
音频处理,音频合成。
音频文件IO。
音频重采样。
小波变换
快速小波变换(FWT)
BRIEF: Binary Robust Independent Elementary Feature 一个很好的局部特征描述子,里面有FAST corner + BRIEF实现特征点匹配的DEMO:http://cvlab.epfl.ch/software/brief/
http://code.google.com/p/javacv
Java打包的OpenCV, FFmpeg, libdc1394, PGR FlyCapture, OpenKinect, videoInput, and ARToolKitPlus库。可以放在Android上用~
libHIK,HIK SVM,计算HIK SVM跟Centrist的Lib。http://c2inet.sce.ntu.edu.sg/Jianxin/projects/libHIK/libHIK.htm
一组视觉显著性检测代码的链接:http://cg.cs.tsinghua.edu.cn/people/~cmm/saliency/
不规则物体形状匹配综述
物体识别是计算机视觉应用的一项基本任务。识别通常基于目标物体的灰度信息、颜色信息或形状信息。物体识别的目的就是要找到一个包含可以区分不同目标物体的有效信息的描述。由于要识别的物体是事先知道的,所以目标物体的几何特征可以被直接应用到识别任务中。
不规则物体的形状匹配是一种有效的利用物体几何特征进行识别的方法。根据匹配对象的不同,可以将不规则物体的形状匹配分为基于区域的匹配方法和基于轮廓的匹配方法。
一、基于轮廓特征的形状匹配
基于轮廓特征的形状匹配在实际中更为常用,这主要有两方面的原因:一是基于轮廓特征的匹配计算量小,可以较好的满足实时性要求;二是要识别的目标物通常是预先知道的,那么它的几何信息完全可以被用于识别过程中。为了识别不规则物体,主要任务就是设计一种基于(少量的)目标物几何约束先验知识的有效匹配方法。
1. 链码直方图(chain code histogram)
链码直方图将人眼看上去相似的物体归为一类。因此利用它不能进行精确的识别和分类。
方向链码(Freeman链码)是用来表示物体轮廓的典型链码表示法。一条离散曲线可以定义为Z2域内一组数量有限的8联通点。因此,一条数字化二值曲线可以用方向链码表示方向链码是相邻两像素连线的8种可能的方向值。一条曲线被网格离散化后形成n个链码方向,最终此曲线链码可表示为{ai}n,每条链指向8个方向重的一个方向,ai={0,1,2,3,4,5,6,7},i为像素的索引值,ai是由像素(i)指向像素(i+1)的方向链码。
链码直方图的计算简单而且快速。计算公式如下:
其中,nk是一个链码中链码值k的数目,n是一个链码中的节点数。
(a)编码的方向示意,(b)简单物体形状,(c)形状的链码表示,(d)链码直方图
链码法的特点:
(1) 计算量小,可满足实时性要求;
(2) 具有平移、尺度不变性;
(3) 具有90度旋转不变性;
(4) 规格化链码直方图可以达到更好的旋转不变性。
2. 成对几何直方图(Pairwise Geometric Histogram)
成对几何直方图通过相对角和相对位置特征来描述目标轮廓,并采用关系直方图统计这对几何特征来进行形状索引。采用这种编码方式需要具备一定的前提,即对于一个不规则物体我们可以将其近似为一个几何多边形。这种编码方法可以很好地描述一个多边形物体。
将不规则形状近似为多边形,并将其定义为边缘点的集合。这样它所包含的轮廓边缘(线段)就可以由连续的边缘点来表示。接下来我们计算多边形的PGH:将每一个轮廓边缘视为其方向上的基准线,那么它与其他轮廓边缘间的相对角 以及最大最小垂直距离(dmin和dmax)可以被计算出来。边缘之间的角度定义了直方图的行,然后在其中增加对应的计算出来的最大和最小距离的所有直方块,就得到了当前多边形的PGH。
它具有如下特点:
(1) 计算简单,可满足实时性要求;
(2) 具有平移、尺度不变性;
(3) 具有360度旋转不变性。
3. 简单形状描述符的结合(Combination of Simple Shape Descriptors)
如图,它们是几种简单的形状描述符,分别代表了凹凸性、主轴、致密性、差异性和椭圆差异性。
凹凸性:轮廓凸包周长与原轮廓周长的比率。(所有凸起的覆盖轮廓称为凸包)
主轴:过物体质心的正交轴,主轴之间的比例可以由物体轮廓的协方差矩阵计算出来
致密性:物体区域面积与等面积的正方形周长的比例,也可以是圆。
差异性:表现为与模板比较的比例均方误差。
单独用这几种简单描述符的任何一种来表示形状进行匹配,都不能达到较好的匹配结果。但是如果我们将这五种简单形状描述符进行结合,同时用它们来描述一个形状,那么这个形状的描述信息就非常丰富了,匹配的结果也会很好。
这种形状描述方式具有如下的特点:
(1) 单独的任何一种简单描述符都不能用于精确识别物体,但是多种简单描述符的结合可以达到很高的识别效率;
(2) 计算简单,可以达到实时性;
(3) 具有平移、尺度不变性;
(4) 理论上360度旋转不变性。
4. 基于hausdorff距离的形状匹配
Hausdorff距离用来计算两个点集之间的匹配程度。给定两个有限集A={a1,a2,…,ap}和B={b1,b2,…,bq},A,B之间的Hausdorff距离定义如下:
其中:
Hausdorff距离H(A,B)取h(A,B)和h(B,A)的最大值,这样通过计算h(A,B)和h(B,A)就可以获得两个点集A,B之间的匹配程度。
为了减少计算量,可以取角点进行匹配。但这样匹配率将降低。基于hausdorff距离的形状匹配的特点;
(1) 对每个边缘点进行hausdorff距离计算,计算量稍大,但对不是过于复杂的轮廓(如小尺寸轮廓),可以满足实时性;
(2) 具有平移、尺度不变性;
(3) 具有旋转不变性;
二、基于区域特征的形状匹配
基于不变矩的形状匹配是典型的基于区域的匹配方法。其中,基于Hu不变矩的形状匹配应用最为广泛。
图像的矩函数在模式识别、目标分类中得到了广泛的应用。在1961年首先基于代数不变量引入矩不变量。通过对几何矩的非线性组合,导出了一组对于图像平移、尺度、旋转变化不变的矩,这种矩就成为Hu矩。
一幅大小为M×N的二维图像其中(p+q)阶矩:
对于二值图像,其零阶矩就是该形状区域的面积。因此,将面积归一化,每一个图像矩除以零阶矩得到的商具有形状的尺度变化无关性。
求图像的p+q阶中心矩,面积归一化,使得具有平移、尺度不变性。
(1)
(2)
计算图像的7个面积归一化的中心矩,{m11,m02,m20,m21,m12,m03,m30}Hu不变矩是关于这7个矩的函数。具有平移、旋转和尺度不变性。
彩色图像Hu不变矩的计算流程如下:
基于Hu矩的形状匹配所具有的特点:
(1) Hu不变矩只能用于对区域的检测,不能用于边界的检测,但由于计算简单,计算量不大,可以满足实时性;
(2) 具有平移、尺度不变性;
(3) 具有旋转不变性。
三、匹配方法间的比较
CCH(链码直方图):是一种基于轮廓匹配方法。具有较强的平移不变性,尺度不变性一般,具有90度的旋转不变性。由于编码简单,执行速度快。计算量和所需内存都较小,适合差别明显的物体,对平滑和非平滑物体的识别并不明显;
PGH(成对几何直方图):是一种基于轮廓匹配方法。具有较强的平移不变性和尺度不变性,具有360度的旋转不变性。执行速度快,可以较好地识别多边形物体和部分自封闭的物体,由于它的计算过程,对非多边形物体的识别可能会浪费计算量;
CFSS(五种简单形状描述符结合):是一种基于轮廓匹配方法。具有较强的平移不变性和尺度不变性,具有360度的旋转不变性。执行速度处于CCH方法和PGH方法之间。识别率与PGH相当,但是比它需要更少的计算时间和内存。
HAUSDORFF距离:是一种基于轮廓匹配方法。具有较强的平移不变性,但是尺度不变性和旋转不变性都较差。由于处理的数据维数较多,执行效率是这五种方法中最慢的一个。可用于匹配部分重和形状物体。
Hu不变矩:是一种基于区域的形状匹配方法。具有较强的平移、尺度和旋转不变性,其中旋转不变性为360度。但由于匹配的数据量大,执行速度较慢。适合于进行一些更精确的匹配。
一、简单介绍
Hough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题。也即把检测整体特性转化为检测局部特性。比如直线、椭圆、圆、弧线等。
二、Hough变换的基本思想
设已知一黑白图像上画了一条直线,要求出这条直线所在的位置。我们知道,直线的方程可以用y=k*x+b 来表示,其中k和b是参数,分别是斜率和截距。过某一点(x0,y0)的所有直线的参数都会满足方程y0=kx0+b。即点(x0,y0)确定了一族直线。方程y0=kx0+b在参数k--b平面上是一条直线,(你也可以是方程b=-x0*k+y0对应的直线)。这样,图像x--y平面上的一个前景像素点就对应到参数平面上的一条直线。我们举个例子说明解决前面那个问题的原理。设图像上的直线是y=x, 我们先取上面的三个点:A(0,0), B(1,1), C(22)。可以求出,过A点的直线的参数要满足方程b=0, 过B点的直线的参数要满足方程1=k+b, 过C点的直线的参数要满足方程2=2k+b, 这三个方程就对应着参数平面上的三条直线,而这三条直线会相交于一点(k=1,b=0)。 同理,原图像上直线y=x上的其它点(如(3,3),(4,4)等) 对应参数平面上的直线也会通过点(k=1,b=0)。这个性质就为我们解决问题提供了方法,就是把图像平面上的点对应到参数平面上的线,最后通过统计特性来解决问题。假如图像平面上有两条直线,那么最终在参数平面上就会看到两个峰值点,依此类推。
简而言之,Hough变换思想为:在原始图像坐标系下的一个点对应了参数坐标系中的一条直线,同样参数坐标系的一条直线对应了原始坐标系下的一个点,然后,原始坐标系下呈现直线的所有点,它们的斜率和截距是相同的,所以它们在参数坐标系下对应于同一个点。这样在将原始坐标系下的各个点投影到参数坐标系下之后,看参数坐标系下有没有聚集点,这样的聚集点就对应了原始坐标系下的直线。
在实际应用中,y=k*x+b形式的直线方程没有办法表示x=c形式的直线(这时候,直线的斜率为无穷大)。所以实际应用中,是采用参数方程p=x*cos(theta)+y*sin(theta)。这样,图像平面上的一个点就对应到参数p---theta平面上的一条曲线上,其它的还是一样。
三、Hough变换推广
1、已知半径的圆
其实Hough变换可以检测任意的已知表达形式的曲线,关键是看其参数空间的选择,参数空间的选择可以根据它的表达形式而定。比如圆的表达形式为 ,所以当检测某一半径的圆的时候,可以选择与原图像空间同样的空间作为参数空间。那么圆图像空间中的一个圆对应了参数空间中的一个点,参数空间中的一个点对应了图像空间中的一个圆,圆图像空间中在同一个圆上的点,它们的参数相同即a,b相同,那么它们在参数空间中的对应的圆就会过同一个点(a,b),所以,将原图像空间中的所有点变换到参数空间后,根据参数空间中点的聚集程度就可以判断出图像空间中有没有近似于圆的图形。如果有的话,这个参数就是圆的参数。
2、未知半径的圆
对于圆的半径未知的情况下,可以看作是有三个参数的圆的检测,中心和半径。这个时候原理仍然相同,只是参数空间的维数升高,计算量增大。图像空间中的任意一个点都对应了参数空间中的一簇圆曲线。 ,其实是一个圆锥型。参数空间中的任意一个点对应了图像空间中的一个圆。
3、椭圆
椭圆有5个自由参数,所以它的参数空间是5维的,因此他的计算量非常大,所以提出了许多的改进算法。
四、总结
图像空间中的在同一个圆,直线,椭圆上的点,每一个点都对应了参数空间中的一个图形,在图像空间中这些点都满足它们的方程这一个条件,所以这些点,每个投影后得到的图像都会经过这个参数空间中的点。也就是在参数空间中它们会相交于一点。所以,当参数空间中的这个相交点的越大的话,那么说明元图像空间中满足这个参数的图形越饱满。越象我们要检测的东西。
Hough变换能够查找任意的曲线,只要你给定它的方程。Hough变换在检验已知形状的目标方面具有受曲线间断影响小和不受图形旋转的影响的优点,即使目标有稍许缺损或污染也能被正确识别。
转自:http://blog.csdn.net/icerain_3321/article/details/1665280
计算机视觉库 OpenCV
OpenCV是Intel®开源计算机视觉库。它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV 拥有包括 300 多个C函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也可以使用某些外部库。 OpenCV 对非商业... |
人脸识别 faceservice.cgi
faceservice.cgi 是一个用来进行人脸识别的 CGI 程序, 你可以通过上传图像,然后该程序即告诉你人脸的大概坐标位置。faceservice是采用 OpenCV 库进行开发的。 |
OpenCV的.NET版 OpenCVDotNet
OpenCVDotNet 是一个 .NET 对 OpenCV 包的封装。 |
人脸检测算法 jViolajones
jViolajones是人脸检测算法Viola-Jones的一个Java实现,并能够加载OpenCV XML文件。 示例代码:http://www.oschina.net/code/snippet_12_2033 |
Java视觉处理库 JavaCV
JavaCV 提供了在计算机视觉领域的封装库,包括:OpenCV、ARToolKitPlus、libdc1394 2.x 、PGR FlyCapture和FFmpeg。此外,该工具可以很容易地使用Java平台的功能。 JavaCV还带有硬件加速的全屏幕图像显示(CanvasFrame),易于在多个内核中执行并行代码(并... |
运动检测程序 QMotion
QMotion 是一个采用 OpenCV 开发的运动检测程序,基于 QT。 |
视频监控系统 OpenVSS
OpenVSS - 开放平台的视频监控系统 - 是一个系统级别的视频监控软件视频分析框架(VAF)的视频分析与检索和播放服务,记录和索引技术。它被设计成插件式的支持多摄像头平台,多分析仪模块(OpenCV的集成),以及多核心架构。 |
手势识别 hand-gesture-detection
手势识别,用OpenCV实现 |
人脸检测识别 mcvai-tracking
提供人脸检测、识别与检测特定人脸的功能,示例代码 cvReleaseImage( &gray ); cvReleaseMemStorage(&storage); cvReleaseHaarClassifierCascade(&cascade);... |
人脸检测与跟踪库 asmlibrary
Active Shape Model Library (ASMLibrary©) SDK, 用OpenCV开发,用于人脸检测与跟踪。 |
Lua视觉开发库 libecv
ECV 是 lua 的计算机视觉开发库(目前只提供linux支持) |
OpenCV的.Net封装 OpenCVSharp
OpenCVSharp 是一个OpenCV的.Net wrapper,应用最新的OpenCV库开发,使用习惯比EmguCV更接近原始的OpenCV,有详细的使用样例供参考。 |
3D视觉库 fvision2010
基于OpenCV构建的图像处理和3D视觉库。 示例代码: ImageSequenceReaderFactory factory; ImageSequenceReader* reader = factory.pathRegex("c:/a/im_%03d.jpg", 0, 20); //ImageSequenceReader* reader = factory.avi("a.avi"); if (reader == NULL) { ... |
基于QT的计算机视觉库 QVision
基于 QT 的面向对象的多平台计算机视觉库。可以方便的创建图形化应用程序,算法库主要从 OpenCV,GSL,CGAL,IPP,Octave 等高性能库借鉴而来。 |
图像特征提取 cvBlob
cvBlob 是计算机视觉应用中在二值图像里寻找连通域的库.能够执行连通域分析与特征提取. |
实时图像/视频处理滤波开发包 GShow
GShow is a real-time image/video processing filter development kit. It successfully integrates DirectX11 with DirectShow framework. So it has the following features: GShow 是实时 图像/视频 处理滤波开发包,集成DiretX11。... |
视频捕获 API VideoMan
VideoMan 提供一组视频捕获 API 。支持多种视频流同时输入(视频传输线、USB摄像头和视频文件等)。能利用 OpenGL 对输入进行处理,方便的与 OpenCV,CUDA 等集成开发计算机视觉系统。 |
开放模式识别项目 OpenPR
Pattern Recognition project(开放模式识别项目),致力于开发出一套包含图像处理、计算机视觉、自然语言处理、模式识别、机器学习和相关领域算法的函数库。 |
OpenCV的Python封装 pyopencv
OpenCV的Python封装,主要特性包括: 提供与OpenCV 2.x中最新的C++接口极为相似的Python接口,并且包括C++中不包括的C接口 提供对OpenCV 2.x中所有主要部件的绑定:CxCORE (almost complete), CxFLANN (complete), Cv (complete), CvAux (C++ part almost... |
视觉快速开发平台 qcv
计算机视觉快速开发平台,提供测试框架,使开发者可以专注于算法研究。 |
图像捕获 libv4l2cam
对函数库v412的封装,从网络摄像头等硬件获得图像数据,支持YUYV裸数据输出和BGR24的OpenCV IplImage输出 |
计算机视觉算法 OpenVIDIA
OpenVIDIA projects implement computer vision algorithms running on on graphics hardware such as single or multiple graphics processing units(GPUs) using OpenGL, Cg and CUDA-C. Some samples will soon support OpenCL and Direct Compute API'... |
高斯模型点集配准算法 gmmreg
实现了基于混合高斯模型的点集配准算法,该算法描述在论文: A Robust Algorithm for Point Set Registration Using Mixture of Gaussians, Bing Jian and Baba C. Vemuri. ,实现了C++/Matlab/Python接口... |
模式识别和视觉库 RAVL
Recognition And Vision Library (RAVL) 是一个通用 C++ 库,包含计算机视觉、模式识别等模块。 |
图像处理和计算机视觉常用算法库 LTI-Lib
LTI-Lib 是一个包含图像处理和计算机视觉常用算法和数据结构的面向对象库,提供 Windows 下的 VC 版本和 Linux 下的 gcc 版本,主要包含以下几方面内容: 1、线性代数 2、聚类分析 3、图像处理 4、可视化和绘图工具 |
OpenCV优化 opencv-dsp-acceleration
优化了OpenCV库在DSP上的速度。 |
C++计算机视觉库 Integrating Vision Toolkit
Integrating Vision Toolkit (IVT) 是一个强大而迅速的C++计算机视觉库,拥有易用的接口和面向对象的架构,并且含有自己的一套跨平台GUI组件,另外可以选择集成OpenCV |
计算机视觉和机器人技术的工具包 EGT
The Epipolar Geometry Toolbox (EGT) is a toolbox designed for Matlab (by Mathworks Inc.). EGT provides a wide set of functions to approach computer vision and robotics problems with single and multiple views, and with different vision se... |
OpenCV的扩展库 ImageNets
ImageNets 是对OpenCV 的扩展,提供对机器人视觉算法方面友好的支持,使用Nokia的QT编写界面。 |
libvideogfx
视频处理、计算机视觉和计算机图形学的快速开发库。 |
Matlab计算机视觉包 mVision
Matlab 的计算机视觉包,包含用于观察结果的 GUI 组件,貌似也停止开发了,拿来做学习用挺不错的。 |
Scilab的计算机视觉库 SIP
SIP 是 Scilab(一种免费的类Matlab编程环境)的图像处理和计算机视觉库。SIP 可以读写 JPEG/PNG/BMP 格式的图片。具备图像滤波、分割、边缘检测、形态学处理和形状分析等功能。 |
STAIR Vision Library
STAIR Vision Library (SVL) 最初是为支持斯坦福智能机器人设计的,提供对计算机视觉、机器学习和概率统计模型的支持。 |
Jia-Bin Huang童鞋收集,此童鞋毕业于国立交通大学,之前拍过很多CVPR举办地科罗拉多州的照片,这里大多为matlab code,
link: https://netfiles.uiuc.edu/jbhuang1/www/resources/vision/index.html
包括:
等等等等。。。。
大家可以去那个网址自己看。。。。
下面是前端时间搜集整理的一些和计算机视觉、模式识别的资源,拿出来与大家分享下。以后,我将把图像处理真正的作为我的兴趣来玩玩了,也许不把研究作为谋生的手段,会更好些。
标题 |
作者 |
主题 |
关键字 |
类别 |
来源 |
备注 |
nipsfast.ppt |
Nando de Freitas |
N-Body problems in learning |
Fast N-Body Learning |
Ppt |
http://www.cs.ubc.ca/~nando/nipsfast/schedule.html |
|
nipsfgtf.ppt |
Ramani Duraiswami |
Fast Multipole Methods Fast Gaussian Transform |
FM and FGT |
ppt |
http://www.cs.ubc.ca/~nando/nipsfast/schedule.html |
|
Gray.pdf/ppt |
Alex Gray |
Statistical N-Body/Proximity Data Structures |
N-Body and Data Structures |
Ppt/pdf |
http://www.cs.ubc.ca/~nando/nipsfast/schedule.html |
|
dt-nips04.pdf/ppt |
Dan Huttenlocher |
Fast Distance Transforms |
FDT |
Ppt/pdf |
http://www.cs.ubc.ca/~nando/nipsfast/schedule.html |
|
High.pdf/ppt |
Alexander Gray |
Fast high-dimensional function integration |
Fast integration |
Ppt/pdf |
http://www.cs.ubc.ca/~nando/nipsfast/schedule.html |
|
Fast04.pdf/ppt |
David Lowe |
Fast high-dimensional feature indexing for object recognition |
Feature indexing |
Ppt/pdf |
http://www.cs.ubc.ca/~nando/nipsfast/schedule.html |
|
ihler-fast.pdf/ppt |
Alexander lhler |
Fast methods and non-parametric BP |
Non-parametric BP |
Ppt/pdf |
http://www.cs.ubc.ca/~nando/nipsfast/schedule.html |
|
fastview.pdf |
Dustin Lang |
Comparing fast methods |
Overview fast methods |
http://www.cs.ubc.ca/~nando/nipsfast/schedule.html |
|
|
nbody_methods.tar.gz |
|
|
|
code |
http://www.cs.ubc.ca/~awll/nbody_methods.html |
|
demo_rbpf_gauss.tar |
|
Rao Blackwellised particle filtering for conditionally Gaussian Models |
particle filtering for conditionally |
code |
http://www.cs.ubc.ca/~nando/nipsfast/schedule.html |
|
demorbpfdbn.tar.gz |
|
Rao Blackwellised Particle Filtering |
|
code |
http://www.cs.ubc.ca/~nando/nipsfast/schedule.html http://www.cs.ubc.ca/~nando/software.html |
|
upf_demos.tar.gz |
|
Unscented Particle Filter |
Particle Filter |
code |
http://www.cs.ubc.ca/~nando/nipsfast/schedule.html |
|
BPF_1_3.zip |
|
Boosted Particle Filter |
Tracking |
code |
http://www.cs.ubc.ca/~okumak/research.html |
1 |
flyer_14_800.mpg |
|
Source image |
Database |
Image |
http://www.cs.ubc.ca/~okumak/research.html |
1 |
trans_flyer_14_800.mpg |
|
image transformed |
Database |
Image |
http://www.cs.ubc.ca/~okumak/research.html |
1 |
LBP.c/h |
Topi Mäenpää |
LBP operator |
Texture |
code |
http://www.ee.oulu.fi/~topiolli/cpplibs/files/ |
|
calibr_v30.zip |
|
Camera Calibration |
Computer vision |
code |
http://www.ee.oulu.fi/mvg/page/camera_calibration _toolbox_for_matlab |
2 |
|
LEAR(Learning and Recognition in Vision |
Common dataset |
Human/car horse soccer human actions |
dataset |
http://lear.inrialpes.fr/data |
3 |
Lic.zip/highlight.zip |
Robby T. Tan |
Color Constancy Through Inverse Intensity Chromaticity Space |
Highlight Removal from single image |
code |
http://www.commsp.ee.ic.ac.uk/~rtan/ |
|
2008_oxford_fog.pdf |
Robby T. Tan |
Defog |
Defog from single |
http://www.commsp.ee.ic.ac.uk/~rtan/ |
|
|
08_cvpr.pdf |
Robby T. Tan |
Defog |
Defog from single |
http://www.commsp.ee.ic.ac.uk/~rtan/ |
|
|
Retinex_frankle_mccann |
|
Retinex |
|
Code |
http://www.cs.sfu.ca/~colour/publications/IST-2000/ |
Some |
Retinex_maccann99 |
|
Retinex |
|
code |
http://www.cs.sfu.ca/~colour/publications/IST-2000/ |
pictures |
Gamut.tar.bz2 |
|
Retinex |
|
code |
http://kobus.ca/research/programs/colour_constancy/index.html |
|
Video.avi/dehaze.m |
|
dehazing |
Raanan Fattal |
code |
http://www.cs.huji.ac.il/~raananf/projects/defog/index.html |
|
MPTK-Windows-bin-0-5-6-beta.zip |
Matching pursuit(MP) |
Alogrithm |
CNRS |
Code |
http://mptk.irisa.fr/downloads |
|
generateDictionaries.txt |
GenerateGabor |
Alogrithm |
|
code |
http://www.scholarpedia.org/article/Matching_pursuit |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Notes:
1. 视频和源码都是对应的文章的:
Kenji Okuma, Ali Taleghani, Nando De Freitas, Jim Little, David G. Lowe. Boosted Particle Filter: Multitarget Detection and Tracking. the European Conference on Computer Vision(ECCV), May 2004.
2. 该网站下面还有其他一些资源可以下载:
http://www.ee.oulu.fi/mvg/page/downloads
是个研究组织:http://lear.inrialpes.fr/ , 除此之外,还有一些源码。
计算机视觉文献与代码资源
CVonline
http://homepages.inf.ed.ac.uk/rbf/CVonline
http://homepages.inf.ed.ac.uk/rbf/CVonline/unfolded.htm
http://homepages.inf.ed.ac.uk/rbf/CVonline/CVentry.htm
李子青的大作:
Markov Random Field Modeling in Computer Vision
http://www.cbsr.ia.ac.cn/users/szli/mrf_book/book.html
Handbook of Face Recognition (PDF)
http://www.umiacs.umd.edu/~shaohua/papers/zhou04hfr.pdf
张正友的有关参数鲁棒估计著作:
Parameter Estimation Techniques:A Tutorial with Application to Conic Fitting
http://research.microsoft.com/~zhang/INRIA/Publis/Tutorial-Estim/Main.html
Andrea Fusiello“计算机视觉中的几何”教程:Elements of Geometric Computer Vision
http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/FUSIELLO4/tutorial.html#x1-520007
有关马尔可夫蒙特卡罗方法的资料:
An introduction to Markov chain Monte Carlo
http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/SENEGAS/mcmc.html
Markov Chain Monte Carlo for Computer Vision--- A tutorial at ICCV05
http://civs.stat.ucla.edu/MCMC/MCMC_tutorial.htm
有关独立成分分析(Independent Component Analysis , ICA)的资料:
An ICA-Page
http://www.cnl.salk.edu/~tony/ica.html
Fast ICA
http://www.cis.hut.fi/projects/ica/fastica/
The Kalman Filter (介绍卡尔曼滤波器的终极网页)
http://www.cs.unc.edu/~welch/kalman/index.html
Cached k-d tree search for ICP algorithms
http://kos.informatik.uni-osnabrueck.de/download/3dim2007/paper.html
几个计算机视觉研究工具
Machine Vision Toolbox for Matlab
http://www.petercorke.com/Machine%20Vision%20Toolbox.html
Matlab and Octave Function for Computer Vision and Image Processing
http://www.csse.uwa.edu.au/~pk/research/matlabfns/
Bayes Net Toolbox for Matlab
http://www.cs.ubc.ca/~murphyk/Software/BNT/bnt.html
OpenCV (Chinese)
http://www.opencv.org.cn/index.php/%E9%A6%96%E9%A1%B5
Gandalf (A Computer Vision and Numerical Algorithm Labrary)
http://gandalf-library.sourceforge.net/
CMU Computer Vision Home Page
http://www.cs.cmu.edu/afs/cs/project/cil/ftp/html/vision.html
Machine Learning Resource Links
http://www.cse.ust.hk/~ivor/resource.htm
The Bayesian Filtering Library
http://www.orocos.org/bfl
Optical Flow Algorithm Evaluation (提供了一个动态贝叶斯网络框架,例如递归信息处理与分析、卡尔曼滤波、粒子滤波、序列蒙特卡罗方法等,C++写的)
http://of-eval.sourceforge.net/
MATLAB code for ICP algorithm
http://www.usenet.com/newsgroups/comp.graphics.visualization/msg00102.html
牛人主页:
朱松纯(Song-Chun Zhu)
http://www.stat.ucla.edu/~sczhu/
David Lowe (SIFT) (很帅的一个老头哦 ^ ^)
http://www.cs.ubc.ca/~lowe/
Andrea Vedaldi (SIFT)
http://vision.ucla.edu/~vedaldi/index.html
Pedro F. Felzenszwalb
http://people.cs.uchicago.edu/~pff/
Dougla Dlanman (Brown的一个研究生,在其主页上搜集了大量算法教程和源码)
http://mesh.brown.edu/dlanman/courses.html
Jianbo Shi (Ncuts 的始作俑者)
http://www.cis.upenn.edu/~jshi/
Active Vision Group (Oxford的一个机器视觉研究团队,特色是SLAM,监视,导航)
http://www.robots.ox.ac.uk/ActiveVision/index.html
Juyang Weng(机器学习的专家,Autonomous Mental Development 是其特色)
http://www.cse.msu.edu/~weng/
测试图片或视频:
Middlebury College‘s Stereo Vision Data Set
http://cat.middlebury.edu/stereo/data.html
Intelligent Vehicle:
IVSource
www.ivsoruce.net
Robot Car
http://www.plyojump.com/robot_cars.html
How to Build a Robot: The Computer Vision Part
http://www.societyofrobots.com/programming_computer_vision_tutorial.shtml
计算机视觉应关注的资源 |
来自美国帝腾大学的链接。 Camera Calibration Links to toolboxes (mostly MATLAB) for camera calibration. Paul Debevec. Modeling and Rendering Architecture from Photographs. Marc Pollefeys, Tutorial on 3D Modeling from Images,, ECCV 2000, Available here: notes (12.1MB pdf) Richard Szeliski NIPS 2004 Tutorial on Acquiring Detailed 3D Models From Images and Video, Available here: slides (37.6 MB, ppt) Peter Corke did his thesis work on visual servoing for robot applications and has authored a robotics toolkit and vision toolkit for MATLAB. local copy of thesis: Corke thesis (4.36 MB, pdf) P. D. Kovesi., MATLAB Functions for Computer Vision and Image Analysis. Philip Torr, among many other contributions, submitted a Structure and motion toolkit in Matlab to the MathSoft File Exhange. |
本文引用地址:http://blog.sciencenet.cn/home.php?mod=space&uid=454498&do=blog&id=456240
1.hausdorff距离
马氏距离是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示数据的协方差距离。它是一种有效的计算两个未知样本集的相似度的方法。与欧式距离不同的是它考虑到各种特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的)并且是尺度无关的(scale-invariant),即独立于测量尺度。对于一个均值μ,为协方差矩阵为Σ的多变量向量,其马氏距离为((x-μ)'Σ^(-1)(x-μ))^(1/2)。
马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量与的差异程度:
如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧式距离,如果协方差矩阵为对角阵,则其也可称为正规化的欧氏距离'.
其中σi 是 xi 的标准差.
马氏优缺点:
1)马氏距离的计算是建立在总体样本的基础上的,这一点可以从上述协方差矩阵的解释中可以得出,也就是说,如果拿同样的两个样本,放入两个不同的总体中,最后计算得出的两个样本间的马氏距离通常是不相同的,除非这两个总体的协方差矩阵碰巧相同;
2)在计算马氏距离过程中,要求总体样本数大于样本的维数,否则得到的总体样本协方差矩阵逆矩阵不存在,这种情况下,用欧式距离计算即可。
3)还有一种情况,满足了条件总体样本数大于样本的维数,但是协方差矩阵的逆矩阵仍然不存在,比如三个样本点(3,4),(5,6)和(7,8),这种情况是因为这三个样本在其所处的二维空间平面内共线。这种情况下,也采用欧式距离计算。
4)在实际应用中“总体样本数大于样本的维数”这个条件是很容易满足的,而所有样本点出现3)中所描述的情况是很少出现的,所以在绝大多数情况下,马氏距离是可以顺利计算的,但是马氏距离的计算是不稳定的,不稳定的来源是协方差矩阵,这也是马氏距离与欧式距离的最大差异之处。
优点:它不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关;由标准化数据和中心化数据(即原始数据与均值之差)计算出的二点之间的马氏距离相同。马氏距离还可以排除变量之间的相关性的干扰。缺点:它的缺点是夸大了变化微小的变量的作用。
如果用dij表示第i个样品和第j个样品之间的距离,那么对一切i,j和k,dij应该满足如下四个条件:
①当且仅当i=j时,dij=0
②dij>0
③dij=dji(对称性)
④dij≤dik+dkj(三角不等式)
显然,欧氏距离满足以上四个条件。满足以上条件的函数有多种,本节将要用到的马氏距离也是其中的一种。
第i个样品与第j个样品的马氏距离dij用下式计算:
dij =((x i 一x j)TS-1(x i一xj) )1/2(T、-1、1/2都是上标)
其中,T表示转置,x i 和x j分别为第i个和第j个样品的m个指标所组成的向量,S为样本协方差矩阵。
本文引用地址:http://blog.sciencenet.cn/home.php?mod=space&uid=261330&do=blog&id=526762