2019-08-27 11:29:08 xbean1028 阅读数 116

特征检测和特征提取算子

特征检测

特征检测是计算机视觉和图像处理中的一个概念。它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征。特征检测的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者连续的区域。
主要分类:边缘区域

特征提取算子

一.HOG特征

1.HOG特征:

方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。
Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功。
(1)主要思想:
在一副图像中,局部目标的表象和形状(appearance and shape)能够被梯度或边缘的方向密度分布很好地描述。(本质:梯度的统计信息,而梯度主要存在于边缘的地方)。
(2)具体的实现方法是:
首先将图像分成小的连通区域,我们把它叫细胞单元。然后采集细胞单元中各像素点的梯度的或边缘的方向直方图。最后把这些直方图组合起来就可以构成特征描述器。
(3)提高性能:
把这些局部直方图在图像的更大的范围内(我们把它叫区间或block)进行对比度归一化,所采用的方法是:先计算各直方图在这个区间(block)中的密度,然后根据这个密度对区间中的各个细胞单元做归一化。通过这个归一化后,能对光照变化和阴影获得更好的效果。
(4)优点:
与其他的特征描述方法相比,HOG有很多优点。首先,由于HOG是在图像的局部方格单元上操作,所以它对图像几何的和光学的形变都能保持很好的不变性,这两种形变只会出现在更大的空间领域上。其次,在粗的空域抽样、精细的方向抽样以及较强的局部光学归一化等条件下,只要行人大体上能够保持直立的姿势,可以容许行人有一些细微的肢体动作,这些细微的动作可以被忽略而不影响检测效果。因此HOG特征是特别适合于做图像中的人体检测的。

2、HOG特征提取算法的实现过程:

大概过程:
HOG特征提取方法就是将一个image(你要检测的目标或者扫描窗口):
1)灰度化(将图像看做一个x,y,z(灰度)的三维图像);
2)采用Gamma校正法对输入图像进行颜色空间的标准化(归一化);目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰;
3)计算图像每个像素的梯度(包括大小和方向);主要是为了捕获轮廓信息,同时进一步弱化光照的干扰。
4)将图像划分成小cells(例如66像素/cell);
5)统计每个cell的梯度直方图(不同梯度的个数),即可形成每个cell的descriptor;
6)将每几个cell组成一个block(例如3
3个cell/block),一个block内所有cell的特征descriptor串联起来便得到该block的HOG特征descriptor。
7)将图像image内的所有block的HOG特征descriptor串联起来就可以得到该image(你要检测的目标)的HOG特征descriptor了。这个就是最终的可供分类使用的特征向量了。

在这里插入图片描述

3.图像的HOG特征维数

Dalal提出的Hog特征提取的过程:把样本图像分割为若干个像素的单元(cell),把梯度方向平均划分为9个区间(bin),在每个单元里面对所有像素的梯度方向在各个方向区间进行直方图统计,得到一个9维的特征向量,每相邻的4个单元构成一个块(block),把一个块内的特征向量联起来得到36维的特征向量,用块对样本图像进行扫描,扫描步长为一个单元。最后将所有块的特征串联起来,就得到了人体的特征。例如,对于64128的图像而言,每1616的像素组成一个cell,每22个cell组成一个块,因为每个cell有9个特征,所以每个块内有49=36个特征,以8个像素为步长,那么,水平方向将有7个扫描窗口,垂直方向将有15个扫描窗口。也就是说,64128的图片,总共有367*15=3780个特征。

二.SIFT特征

尺度不变特征提取(SIFT)特征

处理两幅图像之间发生平移、旋转、尺度变化、光照变化情况下的特征匹配问题,并能在一定程度上对视角变化具备较为稳定的特征匹配能力。一幅图像的SIFT特征向量的生成主要包括4步:尺度空间极值检测、关键点位置及尺度确定、关键点方向确定、特征向量生成。

SIFT特征提取的方法:

1,构建DOG尺度空间
(1)基础知识
(a)尺度空间:
在视觉信息处理模型中引入一个被视为尺度的参数,通过连续变化尺度参数获得不同尺度下的视觉处理信息,然后综合这些信息以深入地挖掘图像的本质特征。尺度空间方法将传统的单尺度视觉信息处理技术纳入尺度不断变化的动态分析框架中,因此更容易获得图像的本质特征。尺度空间的生成目的是模拟图像数据多尺度特征。
尺度空间中各尺度图像的模糊程度逐渐变大,能够模拟人在距离目标由近到远时目标在视网膜上的形成过程。大尺度对应图像的概貌特征,小尺度对应图像的细节特征。所以对不同尺度的图像检测关键点,最终得到的sift特征点具有尺度不变性。尺度空间是客观存在的,我们使用高斯卷积的形式来表现尺度空间。
一幅二维图像的尺度空间可以定义为
在这里插入图片描述
其中I(x,y)是图像区域,G(x,y,σ)是尺度可变高斯函数,x,y是空间坐标,σ大小决定图像的平滑程度。

参考材料:
http://blog.csdn.net/tanxinwhu/article/details/7048370
(b)高斯模糊:
这里尺度空间的生成需要使用高斯模糊来实现,Lindeberg等人已经证明高斯卷积核是实现尺度变换的唯一线性核。高斯模糊是一种图像滤波器,它使用正态分布(高斯函数)计算模糊模板,并使用该模板与原图像做卷积运算,达到模糊图像的目的。
N维空间正态分布方程为:
在这里插入图片描述
其中,是正态分布的标准差,值越大,图像越模糊(平滑)。r为模糊半径,模糊半径是指模板元素到模板中心的距离。如二维模板大小为mn,则模板上的元素(x,y)对应的高斯计算公式为:
在这里插入图片描述
对图像做卷积运算可以看做是加权求和的过程,把使用到的图像区域中的每个元素分别与卷积核的每个对应位置的元素相乘,所有乘积之和作为区域中心的像素值。
一个5
5的高斯模板:
在这里插入图片描述
可以看出高斯模板是圆对称的,且卷积的结果使原始像素值有最大的权重,距离中心越远的相邻像素值权重也越小。
在实际应用中,在计算高斯函数的离散近似时,在大概3σ距离之外的像素都可以看作不起作用,这些像素的计算也就可以忽略。所以,通常程序只计算(6σ+1)*(6σ+1)就可以保证相关像素影响。

参考材料:
http://www.cnblogs.com/slysky/archive/2011/11/25/2262899.html

2.关键点精确定位
以上极值点的搜索是在离散空间进行搜索的,由下图可以看到,在离散空间找到的极值点不一定是真正意义上的极值点。可以通过对尺度空间DoG函数进行曲线拟合寻找极值点来减小这种误差。
在这里插入图片描述
利用DoG函数在尺度空间的Taylor展开式:
在这里插入图片描述
则极值点为:
在这里插入图片描述
3,方向赋值
为了实现图像的旋转不变性,需要根据检测到的关键点的局部图像结构为特征点方向赋值。
(1)梯度直方图
方向直方图的核心是统计以关键点为原点,一定区域内的图像像素点对关键点方向生成所作的贡献。
在上一步,精确定位关键点后,可以得到该特征点的尺度值σ,根据这一尺度值,得到最接近这一尺度值的高斯图像:
在这里插入图片描述
使用有限差分,计算以关键点为中心,以3×1.5σ为半径的区域内图像梯度的幅角和幅值,公式如下:
在这里插入图片描述
梯度方向直方图的横轴是梯度方向角,纵轴是剃度方向角对应的梯度幅值累加值。梯度方向直方图将0°~360°的范围分为36个柱,每10°为一个柱。

在这里插入图片描述

在计算直方图时,每个加入直方图的采样点都使用圆形高斯函数函数进行了加权处理,也就是进行高斯平滑。这主要是因为SIFT算法只考虑了尺度和旋转不变形,没有考虑仿射不变性。通过高斯平滑,可以使关键点附近的梯度幅值有较大权重,从而部分弥补没考虑仿射不变形产生的特征点不稳定。

这里的直方图统计,我在阅读了labelme中实现的源码之后发现具体做法是,把每个梯度向量分解到这8个方向,然后将这8个方向每个方向分到的幅值加在这个方向对应的直方图柱上。

(2)关键点方向
直方图峰值代表该关键点邻域内图像梯度的主方向,当存在另一个相当于主峰值 80%能量的峰值时,则认为这个方向是该关键点的辅方向。所以一个关键点可能检测得到多个方向,这可以增强匹配的鲁棒性。Lowe的论文指出大概有15%关键点具有多方向,但这些点对匹配的稳定性至为关键。

具有多个方向的关键点可以复制成多份,然后将方向值分别赋给复制后的关键点。

至此,我们得到了关键点的位置、尺度、方向信息(x,y,σ,θ)。h(x,y,θ)是一个三维矩阵,但通常经过矩阵压缩后用一个向量表示。

4,关键点描述子的生成
关键点描述子不但包括关键点,还包括关键点周围对其有贡献的像素点。这样可使关键点有更多的不变特性,提高目标匹配效率。在描述子采样区域时,需要考虑旋转后进行双线性插值,防止因旋转图像出现白点。同时,为了保证旋转不变性,要以特征点为中心,在附近领域内旋转θ角,然后计算采样区域的梯度直方图,形成n维SIFT特征矢量(如128-SIFT)。最后,为了去除光照变化的影响,需要对特征矢量进行归一化处理。

SIFT特征提取的优点

SIFT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性;
独特性(Distinctiveness)好,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配;
多量性,即使少数的几个物体也可以产生大量的SIFT特征向量;
高速性,经优化的SIFT匹配算法甚至可以达到实时的要求;
可扩展性,可以很方便的与其他形式的特征向量进行联合;
需要较少的经验主义知识,易于开发。

SIFT特征提取的缺点

实时性不高,因为要不断地要进行下采样和插值等操作;
有时特征点较少(比如模糊图像);
对边缘光滑的目标无法准确提取特征(比如边缘平滑的图像,检测出的特征点过少,对圆更是无能为力)。

三.SURF特征

SURF(计算量小,运算速度快,提取的特征点几乎与SIFT相同)
SIFT特征描述算子在生成特征矢量时使用的是高斯图像,而SURF特征描述算子在生成特征矢量时使用的则是积分图像。这样做的目的就是要充分利用在特征点检测时形成的中间结果(积分图像),避免在特征矢量生成时对图像进行重复运算。

参考文章:
SIFT:https://www.jianshu.com/p/d94e558ebe26
SIFT:https://blog.csdn.net/happyer88/article/details/45817305
SIFT:https://www.cnblogs.com/pacino12134/p/11368558.html
HOG:https://blog.csdn.net/a133521741/article/details/79237776

2017-06-04 16:58:11 coming_is_winter 阅读数 10173

图像处理之特征提取(二)之LBP特征简单梳理


  LBPLocal Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子,具有多分辨率、灰度尺度不变、旋转不变等特性。主要用于特征提取中的纹理提取。
  纹理是个什么概念呢?具体定义为:泛指物体面上的花纹或线条,是物体上呈现的线形纹路。在图像处理中一般理解也就是灰度变化引起的某些特征反应。具体深一步了解:ChenLee_1 ,http://blog.csdn.net/carson2005/article/details/44676281,纹理特征简介
  总体来讲LBP特征提取及算法比较好理解,对于其整体性认识与理解请移步:
       zouxy09,http://blog.csdn.net/zouxy09/article/details/7929531,目标检测的图像特征提取之(二)LBP特征
  老子今晚不加班,http://blog.csdn.net/hqh45/article/details/24501097,LBP特征理解
  其中涉及原理步骤算法讲解的很清楚,这里不再赘述,这里把其中几点重点介绍一下:

  一、灰度不变性

  
图1
以原始的LBP3*3的局部区域为例,最后编码形成的01111100八位码体现的只是邻域对于中心像素差值的相对量,像素值本身的大小体现出来,所以这里你可以想象一下,把一幅灰度图的所有像素对应加上一个常数C,最后得出的图像LBP特征码是一样的,常数C在局部像素差值中已经消掉了。这里联系一下HOG特征,最后的梯度值是不是也是灰度不变的?可以思考一下。

二、支持多分辨率  

  LBP算子在每个像素点都可以得到一个LBP“编码”,那么,对一幅图像(记录的是每个像素点的灰度值)提取其原始的LBP算子之后,得到的原始LBP特征依然是“一幅图片”(记录的是每个像素点的LBP值)。

图2

  在圆形LBP中只要不断改变P和R的大小(即图像处理中常用的所谓“窗口大小”的概念),即可以让LBP具有多分辨率识别的特性。这句话看起来没有什么问题,但是仔细想却抓不住其中的具体原理,变换P,R就可以提取在多分辨率中适用的LBP特征?这里的前提是某个特征存在于连续的一个局部空间内,举个例子,某个特征存在于R∈(x,y)的区间,变换R可以提取不同分辨率下的同一特征,假设某个特征只存在于R=x的一个圆上,你变换个R就肯定提取不到对应的特征了,不知表述清楚没?但这是特殊情况,一般特征存在于不可能是单个像素宽度或长度级别。(这一块还是有待进一步学习)。最后的实验结论是具有多分辨率特性是成立的,处理单张图片,对应RP取(2,8)(3,16)(4,24)三组数据,结果图3所示,可以看到纹理的细腻程度不同。一个自我理解无具体依据的推断:LBP中PR效果类似于SIFT中σ,最后造成图像影响就是模糊的效果,达到多分辨率提取特征的目的。这里说是多分辨率而不是尺度不变,因为最后检测时根据简单几组PR提取的对应LBP特征还是只适用于不同PR对应的几组固定的具体大小图像,而没有达到对于所有大小图像适用的尺度不变特性。


图3

三、等价模式

  有一类模式在图像中出现的频率及其高,这类模式就是等价模式,它们都有一个特性,就是黑白跳变数量都小于等于2。另外我们也可以推出,在P邻域中,等价模式的个数U为:U=P*(P-1)+2。
   上面这句话意思主要是由于PR的增加,LBP码的长度对应增加,对应的码的数量呈指数增长,2^P次个,不利于计算,找一种方法将编码数量降低一点。
  重点U=P*(P-1)+2,这个东东是怎么来的?具体公式啥的没找到,感觉应该存在比较简单的推导方法,这里的方法比较笨。  

  编码由01组成,这里单独拿出0来计算,怎样保证0/1之间的跳变满足≤2呢?一种情况所有的0都在编码中聚在一起(设为情况1),如100011,110001这种,另一种是0分开两拨,但只能存在于编码的最左端与最右端(设为情况2),如011100,001110这种,其余的(010110,001011)跳变次数都大于2了。设定P为偶数。为了表述方便表后半部分取P=4示例。


图4

  等价模式这里的跳变次数为≤2,,变成3,4等可不可以呢(?)?最后实验证明(这是个统计量?还是公式计算量?):尽管等价模式(≤2)只占了全部模式的一小部分,但表明这一小部分等价模式能够刻画90%以上的纹理特征。这里其实可以简单想象一下,在一个LBP局域中跳变1,2次是正常的,假设跳变次数太多,也就是0/1之间转换的太快,局域内就成了黑白相间的噪声了,体现不出来纹理。


参考文献:

部分上已给出。

迈克老狼2012,http://www.cnblogs.com/mikewolf2002/p/3438698.html,,  (里面包含LBP特征提取opencv源码)    OpenCV学习(39) OpenCV中的LBP图像








2019-04-26 10:37:42 W_hisky 阅读数 345

提取点特征的算子称为兴趣算子或有利算子(interest operator),即运用某种算法从影像中提取我们所感兴趣的,即有利于某种目的的点。现在已提出了一系列算法各异,且具有不同特色的兴趣算子,比较知名的有Moravec点特征提取算子等,该算子是由Moravec于1977年提出,它是一种利用灰度方差提取点特征的算子。


算法原理

Moravec点特征提取算子的基本原理步骤如下。

  • 计算各像元的兴趣值IV(interest value)。即计算各像元四个方向相邻像素灰度差的平方和,取其中的最小值作为该像素的兴趣值。
图1 Moravec算子

如图1所示,中心像素为(c,r),则该窗口四个方向相邻像素灰度差的平方和为:

V1=i=kk1(gc+i,r  g c+i+1,r)2  V2=i=kk1(gc+i,r+i  g c+i+1,r+i+1)2V3=i=kk1(gc,r+i  g c,r+i+1)2  V4=i=kk1(gc+i,ri  g c+i+1,ri1)2}\left.\begin{array}{r}\begin{array}{c}V1=\sum_{i=-k}^{k-1}\left(g_{c+i,r}-\;g\,_{c+i+1,r}\right)^2\;\\V2=\sum_{i=-k}^{k-1}\left(g_{c+i,r+i}-\;g\,_{c+i+1,r+i+1}\right)^2\\V3=\sum_{i=-k}^{k-1}\left(g_{c,r+i}-\;g\,_{c,r+i+1}\right)^2\;\end{array}\\\begin{array}{c}V4=\sum_{i=-k}^{k-1}\left(g_{c+i,r-i}-\;g\,_{c+i+1,r-i-1}\right)^2\end{array}\end{array}\right\}

其中,k=int(w2)k=int\left(\frac w2\right)

取其中的最小者作为该像素点(c,r)的兴趣值,即:

IV=min(V1,V2,V3,V4)IV=min\left(V1,V2,V3,V4\right)

  • 给定一阈值,将兴趣值大于该阈值的点作为候选点。

  • 选取候选点中的极值点作为特征点。即在一定大小的窗口内,将候选点中兴趣值不是最大的去掉,仅留下一个兴趣值最大者,这一操作也称为非极大值抑制。


代码实现

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

# 读取图像
img=np.array(Image.open('.\pic.bmp'))
rows,cols=img.shape   # 获取图像长宽
# 显示原图像
plt.figure("原图")     
plt.imshow(img,cmap='gray')     
plt.axis('off')     

# 计算各像元的兴趣值
m_hx= [[0 for i in range(cols)] for i in range(rows)]
bMatrix=[[0 for i in range(cols)] for i in range(rows)]
z=False
for i in range(5, rows-5, 1):
    for j in range(5, cols-5, 1): 
         a=((int(img[i-2,j-2])-int(img[i-1,j-1]))**2+(int(img[i,j])-int(img[i-1,j-1]))**2+(int(img[i,j])-int(img[i+1,j+1]))**2+(int(img[i+2,j+2])-int(img[i+1,j+1]))**2)
         b=((int(img[i-2,j])-int(img[i-1,j]))**2+(int(img[i-1,j])-int(img[i,j]))**2+(int(img[i,j])-int(img[i+1,j]))**2+(int(img[i+2,j])-int(img[i+1,j]))**2)
         c=((int(img[i-2,j+2])-int(img[i-1,j+1]))**2+(int(img[i,j])-int(img[i-1,j+1]))**2+(int(img[i,j])-int(img[i+1,j-1]))**2+(int(img[i+2,j-2])-int(img[i+1,j-1]))**2)
         d=((int(img[i,j-2])-int(img[i,j-1]))**2+(int(img[i,j])-int(img[i,j-1]))**2+(int(img[i,j])-int(img[i,j+1]))**2+(int(img[i,j+2])-int(img[i,j+1]))**2)
         m_xq=min(a, b, c, d)   # 取其中的最小者作为该像素点的兴趣值
         # 设置阈值,选取候选点
         if m_xq>2000:
             m_hx[i][j]=m_xq
 
# 非极大值抑制        
for i in range(5, rows-5,1 ):
    for j in range(5, cols-5,1 ): 
        max=0
        for m in range(i-2, i+2, 1):
            for n in range(j-2, j+2, 1): 
                if m_hx[m][n]>max:
                    max=m_hx[m][n]
                    m1=m
                    n1=n
                    z=True
        if z==True:
            bMatrix[m1][n1]= 1
 
# 将提取出的特征点用白色十字在原图中表示出来
for i in range(rows-2):
    for j in range(cols-2): 
        if bMatrix[i][j]==1:
            img[i+1][j]=255
            img[i][j]=255
            img[i-1][j]=255
            img[i][j+1]=255
            img[i][j-1]=255
            img[i][j+2]=255
            img[i][j-2]=255
            img[i+2][j]=255
            img[i-2][j]=255

plt.figure("特征")     
plt.imshow(img,cmap='gray')   
plt.axis('off')       
plt.show()

结果图

图2 原图

图2 原图

图3 Moravec点特征提取图

图3 Moravec点特征提取图

参考文献

[1] 张祖勋, 张剑清. 数字摄影测量学[M]. 武汉大学出版社, 1997.

2016-06-17 16:39:04 boon_228 阅读数 9751

1HOG特征:

       方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功。需要提醒的是,HOG+SVM进行行人检测的方法是法国研究人员Dalal2005CVPR上提出的,而如今虽然有很多行人检测算法不断提出,但基本都是以HOG+SVM的思路为主。

1)主要思想:

       在一副图像中,局部目标的表象和形状(appearance and shape)能够被梯度或边缘的方向密度分布很好地描述。(本质:梯度的统计信息,而梯度主要存在于边缘的地方)。

2)具体的实现方法是:

       首先将图像分成小的连通区域,我们把它叫细胞单元。然后采集细胞单元中各像素点的梯度的或边缘的方向直方图。最后把这些直方图组合起来就可以构成特征描述器。

3)提高性能:

       把这些局部直方图在图像的更大的范围内(我们把它叫区间或block)进行对比度归一化(contrast-normalized),所采用的方法是:先计算各直方图在这个区间(block)中的密度,然后根据这个密度对区间中的各个细胞单元做归一化。通过这个归一化后,能对光照变化和阴影获得更好的效果。

4)优点:

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


2HOG特征提取算法的实现过程:

大概过程:

HOG特征提取方法就是将一个image(你要检测的目标或者扫描窗口):

1)灰度化(将图像看做一个x,y,z(灰度)的三维图像);

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

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

4)将图像划分成小cells(例如6*6像素/cell);

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

6)将每几个cell组成一个block(例如3*3cell/block),一个block内所有cell的特征descriptor串联起来便得到该blockHOG特征descriptor

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

 

 

具体每一步的详细过程如下:

1)标准化gamma空间和颜色空间

     为了减少光照因素的影响,首先需要将整个图像进行规范化(归一化)。在图像的纹理强度中,局部的表层曝光贡献的比重较大,所以,这种压缩处理能够有效地降低图像局部的阴影和光照变化。因为颜色信息作用不大,通常先转化为灰度图;

     Gamma压缩公式:

     比如可以取Gamma=1/2

2)计算图像梯度

        计算图像横坐标和纵坐标方向的梯度,并据此计算每个像素位置的梯度方向值;求导操作不仅能够捕获轮廓,人影和一些纹理信息,还能进一步弱化光照的影响。

图像中像素点(x,y)的梯度为:

       最常用的方法是:首先用[-1,0,1]梯度算子对原图像做卷积运算,得到x方向(水平方向,以向右为正方向)的梯度分量gradscalx,然后用[1,0,-1]T梯度算子对原图像做卷积运算,得到y方向(竖直方向,以向上为正方向)的梯度分量gradscaly。然后再用以上公式计算该像素点的梯度大小和方向。

3)为每个细胞单元构建梯度方向直方图

        第三步的目的是为局部图像区域提供一个编码,同时能够保持对图像中人体对象的姿势和外观的弱敏感性。

我们将图像分成若干个“单元格cell”,例如每个cell6*6个像素。假设我们采用9bin的直方图来统计这6*6个像素的梯度信息。也就是将cell的梯度方向360度分成9个方向块,如图所示:例如:如果这个像素的梯度方向是20-40度,直方图第2bin的计数就加一,这样,对cell内每个像素用梯度方向在直方图中进行加权投影(映射到固定的角度范围),就可以得到这个cell的梯度方向直方图了,就是该cell对应的9维特征向量(因为有9bin)。

        像素梯度方向用到了,那么梯度大小呢?梯度大小就是作为投影的权值的。例如说:这个像素的梯度方向是20-40度,然后它的梯度大小是2(假设啊),那么直方图第2bin的计数就不是加一了,而是加二(假设啊)。

         细胞单元可以是矩形的(rectangular),也可以是星形的(radial)。

4)把细胞单元组合成大的块(block),块内归一化梯度直方图

       由于局部光照的变化以及前景-背景对比度的变化,使得梯度强度的变化范围非常大。这就需要对梯度强度做归一化。归一化能够进一步地对光照、阴影和边缘进行压缩。

        作者采取的办法是:把各个细胞单元组合成大的、空间上连通的区间(blocks)。这样,一个block内所有cell的特征向量串联起来便得到该blockHOG特征。这些区间是互有重叠的,这就意味着:每一个单元格的特征会以不同的结果多次出现在最后的特征向量中。我们将归一化之后的块描述符(向量)就称之为HOG描述符。

        区间有两个主要的几何形状——矩形区间(R-HOG)和环形区间(C-HOG)。R-HOG区间大体上是一些方形的格子,它可以有三个参数来表征:每个区间中细胞单元的数目、每个细胞单元中像素点的数目、每个细胞的直方图通道数目。

       例如:行人检测的最佳参数设置是:3×3细胞/区间、6×6像素/细胞、9个直方图通道。则一块的特征数为:3*3*9;

(5)收集HOG特征

      最后一步就是将检测窗口中所有重叠的块进行HOG特征的收集,并将它们结合成最终的特征向量供分类使用。  

(6)那么一个图像的HOG特征维数是多少呢?

    顺便做个总结:Dalal提出的Hog特征提取的过程:把样本图像分割为若干个像素的单元(cell),把梯度方向平均划分为9个区间(bin),在每个单元里面对所有像素的梯度方向在各个方向区间进行直方图统计,得到一个9维的特征向量,每相邻的4个单元构成一个块(block),把一个块内的特征向量联起来得到36维的特征向量,用块对样本图像进行扫描,扫描步长为一个单元。最后将所有块的特征串联起来,就得到了人体的特征。例如,对于64*128的图像而言,每16*16的像素组成一个cell,每2*2个cell组成一个块,因为每个cell有9个特征,所以每个块内有4*9=36个特征,以8个像素为步长,那么,水平方向将有7个扫描窗口,垂直方向将有15个扫描窗口。也就是说,64*128的图片,总共有36*7*15=3780个特征。


3. opencv中HOG使用

      

cv::HOGDescriptor类的构造函数的各参数的定义:

[cpp] view plain copy
  1. CV_WRAP HOGDescriptor() :   
  2.      winSize(64,128),                             // detect window   
  3.      blockSize(16,16),                            // block 大小   
  4.      blockStride(8,8),                            // overlap block的滑动步长   
  5.      cellSize(8,8),                               // cell 大小    
  6.      nbins(9),                                    // 直方图的bin个数   
  7.      derivAperture(1),                            // 微分算子核   
  8.      winSigma(-1),                                // 在window上进行高斯加权   
  9.      histogramNormType(HOGDescriptor::L2Hys),     // 直方图归一化类型   
  10.      L2HysThreshold(0.2),                         // L2-norm followed by clipping (limiting the maximum values of v to 0.2) and renormalising  
  11.      gammaCorrection(true),                       // Gamma校正,去除光照影响  
  12.      nlevels(HOGDescriptor::DEFAULT_NLEVELS)      // 分层数  

 利用OpenCV提取HOG特征主要有两组参数需要设定,一个是HOG检测滑动窗口内部的参数,另一个是计算HOG特征时滑动窗口的步长

       1)、HOG检测滑动窗口内部的参数

         包括:检测window的大小,window内block的大小,block滑动的步长,以及cell的大小。

其中滑动窗口所包含的区域即我们需要提前HOG特征的区域。

        HOGDescriptor* hog = newHOGDescriptor(cvSize(64, 48), cvSize(8, 6), cvSize(4, 3), cvSize(4, 3), 9);

        cvSize(64,48)表示特征提取滑动窗口的大小,cvSize(8, 6)表示块(block)大小,cvSize(4,3)表示block滑动的步长(block步长设置较小,则相邻的block会有cell的交叠,从而增加特征鲁棒性),cvSize(4, 3)表示胞元(cell)大小,9表示每个胞单元中梯度直方图的数量。

     2)、提取HOG特征时,参数描述如下:

      计算特征向量hog->compute(trainImg,descriptors, Size(64, 48), Size(0, 0))

      此处,trainImg代表输入的图片(此处尺寸为640×480),descriptors表示保存特征结果的Vector,Size(64,48)表示windows的步进,第四个为padding,用于填充图片以适应大小。

当padding以默认状态Size(0,0)出现,滑动窗口window来计算图片时,结果不一定为整数。

        注意,我们发现这里hog->compute()函数无法指定计算以trainImg图像中某个坐标点为中心的滑动窗口的特征值,为了达到这个目标,我们需要将原图提取的滑动窗口图像放入trainImg中,trainImg的大小和滑动窗口的大小相同,然后设定滑动窗口移动的步长为1(其实此时滑动窗口已经不能移动了,所以设置为多少都行)。这样整个trainImg只能提取一个窗口的HOG特征,这个窗口的大小和trainImg的大小相同。


2019-06-19 21:01:41 Aoman_Hao 阅读数 742

LOG,HOG,DOG微分算子在近圆的斑点检测方面效果很好

HOG特征

https://blog.csdn.net/coming_is_winter/article/details/72850511
https://blog.csdn.net/zouxy09/article/details/7929348/

总结:Dalal提出的Hog特征提取的过程:把样本图像分割为若干个像素的单元(cell),把梯度方向平均划分为9个区间(bin),在每个单元里面对所有像素的梯度方向在各个方向区间进行直方图统计,得到一个9维的特征向量,每相邻的4个单元构成一个块(block),把一个块内的特征向量联起来得到36维的特征向量,用块对样本图像进行扫描,扫描步长为一个单元。最后将所有块的特征串联起来,就得到了人体的特征。

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

特征总数: 一个cell有9个特征(9个梯度方向),每个特征cell块里有 num*9个特征,步长像素规格:(列像素数-步长)/步长*(行像素数-步长)/步长,
总特征数:(列像素数-步长)/步长*(行像素数-步长)/步长*num*9

LOG特征

图像与某一个二维函数进行卷积运算实际就是求取图像与这一函数的相似性。同理,图像与高斯拉普拉斯函数的卷积实际就是求取图像与高斯拉普拉斯函数的相似性。当图像中的斑点尺寸与高斯拉普拉斯函数的形状趋近一致时,图像的拉普拉斯响应达到最大。

Laplace可以用来检测图像中的局部极值点,但是对噪声敏感,所以在我们对图像进行Laplace卷积之前,我们用一个高斯低通滤波对图像进行卷积,目标是去除图像中的噪声点

先对图像f(x,y)用方差为σ的高斯核进行高斯滤波,去除图像中的噪点。

L(x,y;σ)=f(x,y)∗G(x,y;σ)
G(x,y;σ)高斯核
然后对图像的拉普拉斯图像则为:

∇^2=(∂^2L/∂^x2)+(∂^2L/∂y^2)
而实际上有下面等式:

∇^2[G(x,y)∗f(x,y)]=∇^2[G(x,y)]∗f(x,y)

我们可以先求高斯核的拉普拉斯算子,再对图像进行卷积

使用LoG虽然能较好的检测到图像中的特征点,但是其运算量过大,通常可使用DoG(差分高斯,Difference of Gaussina)来近似计算LoG

Haar特征

Haar特征分为三类:边缘特征、线性特征、中心特征和对角线特征,组合成特征模板。特征模板内有白色和黑色两种矩形,并定义该模板的特征值为

白色矩形像素和减去黑色矩形像素和

Haar-like特征

https://blog.csdn.net/zouxy09/article/details/7929570

积分图就是只遍历一次图像就可以求出图像中所有区域像素和的快速算法,大大的提高了图像特征值计算的效率。

       积分图主要的思想是将图像从起点开始到各个点所形成的矩形区域像素之和作为一个数组的元素保存在内存中,当要计算某个区域的像素和时可以直接索引数组的元素,不用重新计算这个区域的像素和,从而加快了计算(这有个相应的称呼,叫做动态规划算法)。积分图能够在多种尺度下,使用相同的时间(常数时间)来计算不同的特征,因此大大提高了检测速度。

       我们来看看它是怎么做到的。

       积分图是一种能够描述全局信息的矩阵表示方法。积分图的构造方式是位置(i,j)处的值ii(i,j)是原图像(i,j)左上角方向所有像素的和:

归一化图像

i¯(x,y)=(i(x,y)−μ)/cσ
公式中i¯(x,y)表示归一化之后的图像,而i(x,y)表示原始的图像,其中μ表示图像的均值,而σ表示图像的标准差
σ2=(1/N)∑x2−μ2   2是平方

SIFT特征

SIFT的全称是Scale Invariant Feature Transform,尺度不变特征变换(物体怎么转,人都能识别)。SIFT特征对旋转、尺度缩放、亮度变化等保持不变性,是一种非常稳定的局部特征。

有4个主要步骤

1、尺度空间的极值检测 搜索所有尺度空间上的图像,通过高斯微分函数来识别潜在的对尺度和选择不变的兴趣点。

$$$L(x,y,σ)=G(x,y,σ)∗I(x,y)$

为了有效的在尺度空间检测到稳定的关键点,提出了高斯差分尺度空间(DOG scale-space)。利用不同尺度的高斯差分核与图像卷积生成。构造高斯差分尺度空间(DOG scale-space): 
$$D(x,y,σ)=(G(x,y,kσ)−G(x,y,σ))∗I(x,y)=L(x,y,kσ)−L(x,y,σ)$$

σ 是尺度坐标。σ大小决定图像的平滑程度,大尺度对应图像的概貌特征,小尺度对应图像的细节特征。大的σ值对应粗糙尺度(低分辨率),反之,对应精细尺度(高分辨率)。

对于一幅图像I,建立其在不同尺度(scale)的图像,后面每个采样都是原图的1/4倍。

每个点都要与邻域的点,上下相邻尺度的点做比较(9+8+9)26个点作比较(以确保在尺度空间和二维图像空间都检测到极值点)。一个点如果在DOG尺度空间本层以及上下两层的26个领域中是最大或最小值时,就认为该点是图像在该尺度下的一个特征点

2、特征点定位 在每个候选的位置上,通过一个拟合精细模型来确定位置尺度,关键点的选取依据他们的稳定程度。

拟和三维二次函数以精确确定关键点的位置和尺度,同时去除低对比度的关键点和不稳定的边缘响应点(因为DoG算子会产生较强的边缘响应),以增强匹配稳定性、提高抗噪声能力

用Harris Corner检测
参考文章

3、特征方向赋值 基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向,后续的所有操作都是对于关键点的方向、尺度和位置进行变换,从而提供这些特征的不变性。

每个特征点计算一个方向,依照这个方向做进一步的计算, *利用关键点邻域像素的梯度方向分布特性为每个关键点指定方向参数,使算子具备旋转不变性。

m(x,y)=(L(x+1,y)L(x1,y))2+(L(x,y+1)L(x,y1))2m(x,y)=(L(x+1,y)−L(x−1,y))2+(L(x,y+1)−L(x,y−1))2
θ(x,y)=atan2(L(x,y+1)L(x,y1)L(x+1,y)L(x1,y)√θ(x,y)=atan2(L(x,y+1)−L(x,y−1)L(x+1,y)−L(x−1,y)
每个关键点有三个信息:位置、所处尺度、方向。由此可以确定一个SIFT特征区域。
直方图
4、特征点描述 在每个特征点周围的邻域内,在选定的尺度上测量图像的局部梯度,这些梯度被变换成一种表示,这种表示允许比较大的局部形状的变形和光照变换。

高斯函数是唯一可行的尺度空间核

尺度空间

多分辨率图像金字塔:

1、对原始图像进行平滑
2、对处理后的图像进行降采样(通常是水平、垂直方向的1/2)降采样后得到一系列不断尺寸缩小的图像。显然,一个传统的金字塔中,每一层的图像是其上一层图像长、高的各一半。多分辨率的图像金字塔虽然生成简单,但其本质是降采样,图像的局部特征则难以保持,也就是无法保持特征的尺度不变性。

高斯尺度空间:

图像的模糊程度来模拟人在距离物体由远到近时物体在视网膜上成像过程,距离物体越近其尺寸越大图像也越模糊,这就是高斯尺度空间,使用不同的参数模糊图像(分辨率不变)

图像和高斯函数进行卷积运算,图像模糊,使用不同的“高斯核”可得到不同模糊程度的图像

L(x,y,σ)=G(x,y,σ)∗I(x,y)

其中G(x,y,σ)是高斯核函数
G(x,y,σ)=(1/2Πσ^2)e^((x^2+y^2)/(2σ^2))

构建尺度空间的目的是为了检测出在不同的尺度下都存在的特征点,而检测特征点较好的算子是Δ^2G(高斯拉普拉斯,LoG)

DoG特征

使用LoG虽然能较好的检测到图像中的特征点,但是其运算量过大,通常可使用DoG(差分高斯,Difference of Gaussina)来近似计算LoG。

DOG可以看作为LOG的一个近似,但是它比LOG的效率更高。
设k为相邻两个高斯尺度空间的比例因子,则DoG的定义:

D(x,y,σ)=[G(x,y,kσ)−G(x,y,σ)]∗I(x,y)=L(x,y,kσ)−L(x,y,σ)

L(x,y,σ) 是图像的高斯尺度空间
将相邻的两个高斯空间的图像相减就得到了DoG的响应图像

Harris角点特征提取

Harris角点检测是一种基于图像灰度的一阶导数矩阵检测方法。检测器的主要思想是局部自相似性/自相关性,即在某个局部窗口内图像块与在各个方向微小移动后的窗口内图像块的相似性。

1、角点可以是两个边缘的角点;
2、角点是邻域内具有两个主方向的特征点;

人眼对角点的识别通常是在一个局部的小区域或小窗口完成的。如果在各个方向上移动这个特征的小窗口,窗口内区域的灰度发生了较大的变化,那么就认为在窗口内遇到了角点。如果这个特定的窗口在图像各个方向上移动时,窗口内图像的灰度没有发生变化,那么窗口内就不存在角点;如果窗口在某一个方向移动时,窗口内图像的灰度发生了较大的变化,而在另一些方向上没有发生变化,那么,窗口内的图像可能就是一条直线的线段。

xyz=(1+ex)2xyw x^{y^z}=(1+{\rm e}^x)^{-2xy^w}

sqrt()sqrt()

结论:1、增大α的值,将减小角点响应值R,降低角点检测的灵性,减少被检测角点的数量;减小α值,将增大角点响应值R,增加角点检测的灵敏性,增加被检测角点的数量。
2、Harris角点检测算子对亮度和对比度的变化不敏感
3、Harris角点检测算子具有旋转不变性
4、Harris角点检测算子不具有尺度不变性

图像特征提取

阅读数 87877

没有更多推荐了,返回首页