图像与机器学习-3-特征

来源:互联网 发布:药物实验志愿者知乎 编辑:程序博客网 时间:2024/06/05 19:43

学习了图像处理中的5种特征提取方法,这些特征提取方法各有特点,适用场景也不同。

1. 直方图&&haar-like特征提取:

直方图:单个像素灰度分布的一阶统计量。纹理是灰度在空间以一定的形式变换产生的图案,直方图是描述图像中像素灰度级分布的工具,可以用直方图或其统计特征作为图像的纹理特征。

其中最常用的是灰度直方图,英文灰度具有一定的稳定性,对大小、方向都不敏感, 能表现出相当强的鲁棒性。

示例:

Haar-like:

Haar-like的优势在于能更好地描述明暗变化,如:眼睛比脸颊的颜色要深,鼻梁两侧比鼻梁颜色要深等,因此用于检测正面的人脸。

特征值:特征模板内有白色和黑色两种矩形,并定义该模板的特征值为白色矩形像素和减去黑色矩形像素和,反映了图像的灰度变化,但是矩形特征只对简单的图形结构,如边缘、线段较敏感,因此只能描述特定方向(水平、垂直、对角)的结构。

边缘特征,线性特征,中心特征,对角特征等等


A、B、C、D称为特征原型,在图像子窗口中扩展(平移伸缩)得到的特征称为矩形特征,其值称为特征值。

预处理:

积分图:是一个数据结构,可以用于快速计算子区域的像素和。定义为:

表示为在(x,y)位置上,对应的积分图中的像素为其左上角所有像素之和。

适用积分图快速计算某区域的像素和:



个人总结:积分图对图像的预处理极大程度的加快了运算中的计算量,通过一次计算,免去了后面无数次重复的计算量,计算小区域的像素和只需要做一个简单的加减运算即可得到结果,这个预处理的实现对于图像处理中的减少运算量有极大的启发。

 

2. PCA&LBP

PCA(Principal Component Analysis)主成因分析:

是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。PCA是人脸识别的主流方法之一。

其核心思想是:重整高维数据,提取其中的重要部分,忽略其中无关紧要的部分。

实例:3维降为2维:


PCA不仅仅是对高维数据进行降维,更重要的是经过降维去除了噪声,发现了数据中的模式。PCA把原先的n个特征用数目更少的m个特征取代,新特征是旧特征的线性组合,这些线性组合最大化样本方差,尽量使新的m个特征互不相关。从旧特征到新特征的映射捕获数据中的固有变异性。

LBP (Local Binary Pattern)局部二值模式:

LBP是一种用来描述图像局部特征的算子,LBP特征具有灰度不变性和旋转不变性等显著优点。LBP特征比较出名的应用是用在人脸识别和目标检测中。

原始LBP特征描述及计算方法:

原始的LBP算子定义在像素3*3的邻域内,以邻域中心像素为阈值,相邻的8个像素的灰度值与邻域中心的像素值进行比较,若周围像素大于中心像素值,则该像素点的位置被标记为1,否则为0。这样,3*3邻域内的8个点经过比较可产生8位二进制数,将这8位二进制数依次排列形成一个二进制数字,这个二进制数字就是中心像素的LBP值,LBP值共有28种可能,因此LBP值有256种。中心像素的LBP值反映了该像素周围区域的纹理信息。

LBP特征的改进版本:

在原始的LBP特征提出以后,研究人员对LBP特征进行了很多的改进,因此产生了许多LBP的改进版本:

圆形LBP: 3×3邻域扩展到任意邻域,并用圆形邻域代替了正方形邻域,改进后的 LBP算子允许在半径为 R的圆形邻域内有任意多个像素点。从而得到了诸如半径为R的圆形区域内含有P个采样点的LBP算子:


旋转不变LBP特征:上面的LBP特征具有灰度不变性,但还不具备旋转不变性,因此研究人员又在上面的基础上进行了扩展,提出了具有旋转不变性的LBP特征。

首先不断的旋转圆形邻域内的LBP特征,根据选择得到一系列的LBP特征值,从这些LBP特征值选择LBP特征值最小的作为中心像素点的LBP特征。具体做法如下图所示:


如图,通过对得到的LBP特征进行旋转,得到一系列的LBP特征值,最终将特征值最小的一个特征模式作为中心像素点的LBP特征。

3. HOG(方向梯度直方图):

与其他的特征描述方法相比,HOG有很多优点。首先,由于HOG是在图像的局部方格单元上操作,所以它对图像几何的和光学的形变都能保持很好的不变性,这两种形变只会出现在更大的空间领域上。其次,在粗的空域抽样、精细的方向抽样以及较强的局部光学归一化等条件下,只要行人大体上能够保持直立的姿势,可以容许行人有一些细微的肢体动作,这些细微的动作可以被忽略而不影响检测效果。因此HOG特征是特别适合于做图像中的人体检测的。

大概过程:

1)灰度化

2)采用Gamma校正法对输入图像进行颜色空间的标准化(归一化);目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰;

3)计算图像每个像素的梯度(包括大小和方向);主要是为了捕获轮廓信息,同时进一步弱化光照的干扰。

4)将图像划分成小cells;

5)统计每个cell的梯度直方图(不同梯度的个数),即可形成每个cell的描述子;

6)将每几个cell组成一个block,一个block内所有cell的特征描述子串联起来便得到该block的HOG特征描述子。

7)将图像image内的所有block的HOG特征描述子串联起来就可以得到该image(你要检测的目标)的HOG特征描述子了。这个就是最终的可供分类使用的特征向量了。

一个图像的HOG特征维数:

举例说明:对于64*128的图像而言,每8*8的像素组成一个cell,每2*2cell组成一个块,因为每个cell9个特征,所以每个块内有4*9=36个特征,以8个像素为步长,那么,水平方向将有7个扫描窗口,垂直方向将有15个扫描窗口。也就是说,64*128的图片,总共有36*7*15=3780个特征。

4. SIFT:

SIFT 特征是基于物体上的一些局部外观的兴趣点而与影像的大小和旋转无关。对于光线、噪声、些微视角改变的容忍度也相当高。基于这些特性,它们是高度显著而且相对容易撷取,在母数庞大的特征数据库中,很容易辨识物体而且鲜有误认。使用 SIFT特征描述对于部分物体遮蔽的侦测率也相当高,甚至只需要3个以上的SIFT物体特征就足以计算出位置与方位。在现今的电脑硬件速度下和小型的特征数据库条件下,辨识速度可接近即时运算。SIFT特征的信息量大,适合在海量数据库中快速准确匹配。

主体步骤:

1. 尺度空间极值检测:搜索所有尺度上的图像位置。通过高斯微分函数来识别潜在的对于尺度和旋转不变的兴趣点。

2. 关键点定位:在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度。关键点的选择依据于它们的稳定程度。

3. 方向确定:基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。所有后面的对图像数据的操作都相对于关键点的方向、尺度和位置进行变换,从而提供对于这些变换的不变性。

4. 关键点描述:在每个关键点周围的邻域内,在选定的尺度上测量图像局部的梯度。这些梯度被变换成一种表示,这种表示允许比较大的局部形状的变形和光照变化。


其中主要的核心思想是:

1.用高斯核函数实现尺度变换;

2.用高斯差分金字塔(DOG)近似代替了拉普拉斯算子进行极值检测。

3.关键点方向分配中,使用了类似HOG直方图类似的方法。

4.通过对描述子进行统一操作:旋转ox轴到主方向,解决旋转不变性;对特征向量进行归一化,消除光照影响和整体漂移。

当然SIFT也有缺点:

实时性不高,对于边缘光滑,模糊,平滑的图像特征点少。


5. SURF:

主要步骤:

1. 构建Hessian(黑塞矩阵),生成所有的兴趣点,用于特征的提取;

2. 构建尺度空间

3. 特征点定位

4. 特征点主方向分配

5. 生成特征点描述子

6. 特征点匹配

SURF大体思想与SIFT是类似的,但是在很多地方有所不同。

首先不同的是关键点的检测方法不一样,SIFT使用的是高斯差分金字塔中在点进行上下周围26点检测,而SURF则是使用Hession矩阵探测器(hession矩阵与盒子滤波器)找出斑点;

与SIFT的尺度构造方法不同的是,并没有使用高斯金字塔,高斯金字塔从下到上,图片大小会变小。而surf的金字塔图片大小不会变,而取而代之,是通过改变卷积模板的尺寸来实现的。

另一个不同点是在特征点的方向分配方式上,SIFT中使用了8个方向的方向直方图,这样一个关键点特征描述向量有4x4x8=128维,而SURF水样的特征点方向分配是使用特征点半径内的点在x,y方向上的响应,这样每个点的方向信息从8维压缩到了4维,一个关键点特征描述向量也变为4x4x4=64维。


通过这些改变,包括Hession矩阵找关键点,以及关键点特征描述向量的降维,大大减少了计算量,这就使得SURF和SIFT比起来在运算速度上快很多,但是另一方面,SURF的精度就要稍微差一点。

 

6. 各种距离度量方法:

例子:计算向量(0,0)、(1,0)、(0,2)两两间的曼哈顿距离

X = [0 0 ; 1 0 ; 0 2]

 

1:欧式距离:


Matlab用法:

D = pdist(X,'euclidean')

2. 曼哈顿距离:


D = pdist(X, 'cityblock')

3. 切比雪夫距离:


D = pdist(X,'chebychev')

4. 闵可夫斯基距离:

其中p是一个变参数。

当p=1时,就是曼哈顿距离

当p=2时,就是欧氏距离

当p→∞时,就是切比雪夫距离      

根据变参数的不同,闵氏距离可以表示一类的距离。

D =pdist(X,'minkowski',2)

5. 标准化欧氏距离:


D = pdist(X, 'seuclidean',[0.5,1])

6. 马氏距离:


Y =pdist(X,'mahalanobis')

7. 巴氏距离:

在同一定义域 X中,对于离散概率分布 p和q,它被定义为:


8. 汉明距离:

两个等长字符串s1与s2之间的汉明距离定义为将其中一个变为另外一个所需要作的最小替换次数,即两个字符串对应位置的不同字符的个数。

如:

1011101与 1001001 之间的汉明距离是2   

2143896与 2233796 之间的汉明距离是3   

 irie与 rise之间的汉明距离是 3

9. 夹角余弦:


D = 1- pdist(X,'cosine')




原创粉丝点击