图像特征提取1—LBP特征

来源:互联网 发布:国家经济数据泄密 编辑:程序博客网 时间:2024/05/29 10:35

  最近研究了一下LBP,就先从最基本的LBP说起。LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子;它具有旋转不变性和灰度不变性等显著的优点。它是首先由T. Ojala, M.Pietikäinen, 和 D. Harwood 在1994年提出,用于纹理特征提取。目前LBP有很多应用,如人脸识别,表情识别等。其他的局部信息有很多,比如HOG,SIFT等等。
  
1、LBP特征的描述
  LBP就是一种局部信息,它反应了每个像素与周围像素的关系。以定义为在3*3的窗口内的原始LBP算子为例,他描述了窗口中心像素与其相邻的8个像素的灰度值的大小关系。即以窗口中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0。如下图示例:
  1
  如上图所示,中间像素的灰度值为83,按照规则,我们就得到了8位二进制数,顺时针取值,就得到了一个像素的LBP值,即01111100。得到这个8位二进制数后,我们将其转换为十进制数(共256种,如上图中即为124),即得到该窗口中心像素点的LBP值(即为LBP码),并用这个值来反映该区域的纹理信息。就这样对整个图像进行LBP运算,就可以得到这幅图像的LBP特征。因此,LBP操作可以被定义为
      g1
其中g1.1是中心像素,亮度是g1.2;而g1.3则是相邻像素的亮度。s是一个符号函数:
      g2
  这种描述方法使得你可以很好的捕捉到图像中的细节。但基本的 LBP算子的最大缺陷在于它只覆盖了一个固定半径范围内的小区域,这显然不能满足不同尺寸和频率纹理的需要。Ojala等对 LBP 算子进行了改进,将 3×3邻域扩展到任意邻域,并用圆形邻域代替了正方形邻域,改进后的 LBP 算子允许在半径为 R 的圆形邻域内有任意多个像素点。即使用可变半径的圆对近邻像素进行编码,这样可以捕捉到如下的近邻:
     2
对一个给定的点g1.1,他的近邻点g4.2 (x,y),P可以由如下计算:
     g3
     g4
其中,R是圆的半径,而P是样本点的个数。这个操作是对原始LBP算子的扩展,所以有时被称为扩展LBP(又称为圆形LBP)。如果一个在圆上的点不在图像坐标上,我们使用他的内插点。计算机科学有一堆插值方法,而OpenCV使用双线性插值。
2. LBP特征向量进行提取
  提取图像特征的目标无非就是为了进行分类,但是把一幅灰度图像转化为了LBP特征图像,从理论上讲并没有实现降维,也就无法进行分类。 这时就引入了直方图统计,我们将LBP特征进行直方图统计,也就是统计LBP特0~255各占的比例,这样就进行了数据的降维。之后就可以将一个向量输入分类器中进行分类。可是由于只有256维特征,所以分类的效果并不好。这时我们就引入了图像分块处理的方法,也就是说将图像分成若干的图像块,如,在人脸识别中,把脸分为7*7或5*5的区域(cell),并对这49,25个小区域进行LBP处理,将每个小区域的直方图进行串联,就可以得到整个图像的LBP直方图。并对这个直方图进行分类处理,这样可以大大的增强分类的效果。但是分类数据维度也大大增加了,如果是7*7区域,数据维度为 7*7*256=12544维。
  
对LBP特征向量进行提取的步骤,如下所示:

  1. 将检测窗口划分为16×16的小区域(cell);
  2. 对于每个cell中的一个像素,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0。这样,3*3邻域内的8个点经比较可产生8位二进制数,即得到该窗口中心像素点的LBP值;
  3. 然后计算每个cell的直方图,即每个数字(假定是十进制数LBP值)出现的频率;然后对该直方图进行归一化处理。
  4. 最后将得到的每个cell的统计直方图进行连接成为一个特征向量,也就是整幅图的LBP纹理特征向量;
    然后便可利用SVM或者其他机器学习算法进行分类了。

3.LBP均匀模式LBP (uniform LBP)
  可以看出数据的维度还是比较大,这是因为基本地LBP算子可以产生不同的二进制模式,对于半径为R的圆形区域内含有P个采样点的LBP算子将会产生P2种模式。很显然,随着邻域集内采样点数的增加,二进制模式的种类是急剧增加的。
  所以需要进一步进行降维,这里就涉及了另外一个概念:Uniform LBP,即均匀模式LBP。这种降维将原来的256维灰度数据重新分类,统计其位移后的跳变次数,当跳变次数小于2次时就定义为一个Uniform LBP,比如00000000左移一位还是00000000,没有跳变,即跳变次数为0;00001111左移一位为00011110,跳变次数为2;10100000左移一位为01000001跳变次数为3,它不是Uniform LBP。所有的8位二进制数中共有58个uniform pattern.所以我们将分类特征向量由256维降为58维。在实际应用中,其实是59维,因为加一维表示那些不是Uniform LBP的量。那么7*7的人脸区域在进行降维之后,有7*7*59=2891维。由此对LBP特征进行了降维。为什么要提出这么个uniform LBP呢,例如:5×5邻域内20个采样点,有2^20=1,048,576种二进制模式。如此多的二值模式无论对于纹理的提取还是对于纹理的识别、分类及信息的存取都是不利的。同时,过多的模式种类对于纹理的表达是不利的。
  为了解决二进制模式过多的问题,提高统计性,Ojala提出了采用一种“等价模式”(Uniform Pattern)来对LBP算子的模式种类进行降维。Ojala等认为,在实际图像中,绝大多数LBP模式最多只包含两次从1到0或从0到1的跳变。因此,Ojala将“等价模式”定义为:当某个LBP所对应的循环二进制数从0到1或从1到0最多有两次跳变时,该LBP所对应的二进制就称为一个等价模式类。如00000000(0次跳变),00000111(只含一次从0到1的跳变),10001111(先由1跳到0,再由0跳到1,共两次跳变)都是等价模式类。除等价模式类以外的模式都归为另一类,称为混合模式类,例如10010111(共四次跳变)。通过这样的改进,二进制模式的种类大大减少,而不会丢失任何信息。模式数量由原来的2P种减少为 P(P-1)+2种,其中P表示邻域集内的采样点数。对于3×3邻域内8个采样点来说,二进制模式由原始的256种减少为58种,即:它把值分为59类,58个uniform pattern为一类,其它的所有值为第59类。这样直方图从原来的256维变成59维。这使得特征向量的维数更少,并且可以减少高频噪声带来的影响。

4. 旋转不变的LBP : 36个
  由于编码的起始点是一定的,每一种二值编码模式经旋转(循环位移)后会产生不同的编码结果。为了形成旋转不变的编码模式,我们让有同一编码模式经旋转后产生的编码结果编码为同一值,即这些旋转结果中的最小值。而旋转不变模式LBP能够在图片发生一定的倾斜时也能得到相同的结果。它的定义可以看下(注:此图来自于网络):
  3
  从 LBP 的定义可以看出,LBP 算子是灰度不变的,但却不是旋转不变的。图像的旋转就会得到不同的 LBP值。Maenpaa等人又将 LBP算子进行了扩展,提出了具有旋转不变性的 LBP 算子,即不断旋转圆形邻域得到一系列初始定义的 LBP值,取其最小值作为该邻域的 LBP 值。可以表示为:
  g5
  5
  如上图所示(注:此图来自于网络)给出了求取旋转不变的 LBP 的过程示意图,图中算子下方的数字表示该算子对应的 LBP值,图中所示的 8 种 LBP模式,经过旋转不变的处理,最终得到的具有旋转不变性的 LBP值为 15。也就是说,图中的 8种 LBP 模式对应的旋转不变的 LBP模式都是 00001111。
  以下是36个旋转不变的LBP编码模式:
  6
  LBP的Mablab工具箱 在这里可以下载。观察它的实现方法是十分巧妙的,它并没有针对每个像素计算出其LBP值,而是首先将图像进行移动,之后进行对比,取得每一位的LBP值后乘以2的相应次方加上原来的值,即得到其对应LBP值,可以说是一种很巧妙的方法。

0 0