局部二值模式(LBP)理论学习与算法实现

来源:互联网 发布:淘宝评价怎么看五星 编辑:程序博客网 时间:2024/05/21 16:24

一、概念

局部二值模式, Local binary patterns, LBP, 一种用于纹理分类的特征。如果局部二值模式特征与方向梯度直方图结合,则可以在一些集合上十分有效的提升检测效果。它将各个像素与其附近的像素进行比较,并把结果保存为二进制数。由于其辨别力强大和计算简单,局部二值模式纹理算子已经在不同的场景下得到应用。LBP最重要的属性是对诸如光照变化等造成的灰度变化的鲁棒性。它的另外一个重要特性是它的计算简单,这使得它可以对图像进行实时分析。

二、分类

1、原始的局部二值模式
这里写图片描述
这里写图片描述

在最简简化的情况下,局部二值模式特征向量可以通过如下方式计算:
* 将检测窗口切分为区块(cells,例如,每个区块3x3像素)。
* 对区块中的每个像素,与它的八个邻域像素进行比较(左上、左中、左下、右上等)。可以按照顺时针或者逆时针的顺序进行比较。
* 对于中心像素大于某个邻域的,设置为1;否则,设置为0。这个过程类似图像处理中的二值化。这就获得了一个8位的二进制数(通常情况下会转换为十进制数字),作为该位置的特征。
* 对每一个区块计算直方图。
* 此时,可以选择将直方图归一化;
* 串联所有区块的直方图,这就得到了当前检测窗口的特征向量。
此特征向量可以通过诸如支持向量机等机器学习算法来产生一个分类器。
这里写图片描述

2、圆形局部二值模式(Extended LBP or Circular LBP)

基本的局部二值模式算子的最大缺陷在于它只覆盖了一个固定半径范围内的小区域,这显然不能满足不同尺寸和频率纹理的需要。为了适应不同尺度的纹理特征,并达到灰度和旋转不变性的要求,Ojala等对局部二值模式算子进行了改进,将3×3邻域扩展到任意邻域,并用圆形邻域代替了正方形邻域,改进后的局部二值模式算子允许在半径为 R 的圆形邻域内有任意多个像素点。从而得到了诸如半径为R的圆形区域内含有P个采样点的局部二值模式算子。
这里写图片描述
3、旋转不变的局部二值模式
从局部二值模式的定义可以看出,局部二值模式算子是灰度不变的,但却不是旋转不变的。图像的旋转就会得到不同的局部二值模式值。Maenpaa等人又将局部二值模式算子进行了扩展,提出了具有旋转不变性的局部二值模式算子,即不断旋转圆形邻域得到一系列初始定义的局部二值模式值,取其最小值作为该邻域的局部二值模式值。
这里写图片描述

这里写图片描述

4、等价模式(Uniform pattern)
这里写图片描述
一个有效的扩展被称为“等价模式”,可用于对特征向量降维,以及实现简单的旋转不变算子。其主要根据是一些模式比另一些模式更加常见。当某个LBP只包含从0到1或从1到0的最多两次跳变时,该LBP被定义为一个等价模式。例如,00010000(2次跳变)是一个等价模式,01010100(6次跳变)不是。在计算LBP的直方图时,对于每一个等价模式都各有一个组(bin),而所有非等价模式都被归类到一个单独的组中。使用等价模式,一个区块的特征长度能从256降到59。The 58 uniform binary patterns correspond to the integers 0, 1, 2, 3, 4, 6, 7, 8, 12, 14, 15, 16, 24, 28, 30, 31, 32, 48, 56, 60, 62, 63, 64, 96, 112, 120, 124, 126, 127, 128, 129, 131, 135, 143, 159, 191, 192, 193, 195, 199, 207, 223, 224, 225, 227, 231, 239, 240, 241, 243, 247, 248, 249, 251, 252, 253, 254 and 255.

对于R=1, P=8的Uniform Pattern LBP, LBP的取值范围[0, 9],LBP直方图的Bins为10个。

为什么等价模式具有旋转不变性?对于跳变次数小于等于2的情况,LBP值不会随着角度的变化而发生变化,这是通过分析58种等价模式得出的结论:) ;对于非等价模式,LBP值是定值P+1,也不会随着角度的变化而发生变化。所以,等价模式具有旋转不变性。

三、应用

局部二值模式已经应用在指纹识别、光学字符识别、人脸识别及车牌识别等领域。

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

在局部二值模式的应用中,如纹理分类及人脸分析等,一般都不将局部二值模式图谱作为特征向量用于分类识别,而是采用局部二值模式特征谱的统计直方图作为特征向量用于分类识别。因为,从上面的分析我们可以看出,这个“特征”跟位置信息是紧密相关的。直接对两幅图片提取这种“特征”,并进行判别分析的话,会因为“位置没有对准”而产生很大的误差。后来,研究人员发现,可以将一幅图片划分为若干的子区域,对每个子区域内的每个像素点都提取局部二值模式特征,然后,在每个子区域内建立局部二值模式特征的统计直方图。如此一来,每个子区域,就可以用一个统计直方图来进行描述;整个图片就由若干个统计直方图组成。

四、算法实现

scikit-image中实现的算法:

lbp = feature.local_binary_pattern(image, self.numPoints,            self.radius, method="uniform")
scikit-image中实现了五种LBP算法,应该都是基于paper《Multiresolution Gray-Scale and Rotation Invariant Texture Classification with Local Binary Patterns》实现的:    * 'default': original local binary pattern which is gray scale but not        rotation invariant.    * 'ror': extension of default implementation which is gray scale and        rotation invariant.    * 'uniform': improved rotation invariance with uniform patterns and        finer quantization of the angular space which is gray scale and        rotation invariant.    * 'nri_uniform': non rotation-invariant uniform patterns variant        which is only gray scale invariant.    * 'var': rotation invariant variance measures of the contrast of local        image texture which is rotation but not gray scale invariant.

为了深入理解paper,决定研究一下它的源代码。花了一下午,最终将我最感兴趣的Uniform Pattern部分移植出来了。
下载地址:
http://download.csdn.net/download/zhongqianli/9954304

PS: CSDN的markdown编辑器写的博客竟然出现文字出界,什么鬼~

五、相关引用

(1) Local binary patterns: https://en.wikipedia.org/wiki/Local_binary_patterns
(2) http://blog.csdn.net/zouxy09/article/details/7929531
(3) scikit-image: http://scikit-image.org/
(4)《Multiresolution Gray-Scale and Rotation Invariant Texture Classification with Local Binary Patterns》

阅读全文
0 0