局部二值模式Local binary patterns
概述局部二值模式(英文:Local binary patterns,缩写:LBP)是机器视觉领域中用于分类的一种特征,于1994年被提出。局部二值模式在纹理分类问题上是一个非常强大的特征;如果局部二值模式特征与方向梯度直方图结合,则可以在一些集合上十分有效的提升检测效果。局部二值模式是一个简单但非常有效的纹理运算符。它将各个像素与其附近的像素进行比较,并把结果保存为二进制数。由于其辨别力强大和计算简单,局部二值模式纹理算子已经在不同的场景下得到应用。LBP最重要的属性是对诸如光照变化等造成的灰度变化的鲁棒性。它的另外一个重要特性是它的计算简单,这使得它可以对图像进行实时分析。
概念
在最简简化的情况下,局部二值模式特征向量可以通过如下方式计算:
[*]将检测窗口切分为区块(cells,例如,每个区块16x16像素)。
[*]对区块中的每个像素,与它的八个邻域像素进行比较(左上、左中、左下、右上等)。可以按照顺时针或者逆时针的顺序进行比较。
[*]对于中心像素大于某个邻域的,设置为1;否则,设置为0。这就获得了一个8位的二进制数(通常情况下会转换为十进制数字),作为该位置的特征。
[*]对每一个区块计算直方图。
[*]此时,可以选择将直方图归一化;
[*]串联所有区块的直方图,这就得到了当前检测窗口的特征向量。
现在,特征向量可以通过诸如支持向量机等机器学习算法来产生一个分类器。 http://visionbbs.com/data/uploads/allimg/130510/2-130510221257.jpg
三个计算不同领域模型的LBP特征的例子
发展
原始的局部二值模式提出后,研究人员不断对其提出了各种改进和优化。
圆形局部二值模式
基本的局部二值模式算子的最大缺陷在于它只覆盖了一个固定半径范围内的小区域,这显然不能满足不同尺寸和频率纹理的需要。为了适应不同尺度的纹理特征,并达到灰度和旋转不变性的要求,Ojala等对局部二值模式算子进行了改进,将3×3邻域扩展到任意邻域,并用圆形邻域代替了正方形邻域,改进后的局部二值模式算子允许在半径为 R 的圆形邻域内有任意多个像素点。从而得到了诸如半径为R的圆形区域内含有P个采样点的局部二值模式算子。
旋转不变的局部二值模式
从局部二值模式的定义可以看出,局部二值模式算子是灰度不变的,但却不是旋转不变的。图像的旋转就会得到不同的局部二值模式值。Maenpaa等人又将局部二值模式算子进行了扩展,提出了具有旋转不变性的局部二值模式算子,即不断旋转圆形邻域得到一系列初始定义的局部二值模式值,取其最小值作为该邻域的局部二值模式值。
实现
一个包含了局部二值模式实现的开源计算机视觉库:Python mahotas
应用
目前,局部二值模式已经应用在指纹识别、光学字符识别、人脸识别及车牌识别等领域。
人脸识别
显而易见的是,上述提取的局部二值模式算子在每个像素点都可以得到一个局部二值模式“编码”,那么,对一幅图像(记录的是每个像素点的灰度值)提取其原始的LBP算子之后,得到的原始LBP特征依然是“一幅图片”(记录的是每个像素点的局部二值模式值)。
局部二值模式的应用中,如纹理分类及人脸分析等,一般都不将局部二值模式图谱作为特征向量用于分类识别,而是采用局部二值模式特征谱的统计直方图作为特征向量用于分类识别。
因为,从上面的分析我们可以看出,这个“特征”跟位置信息是紧密相关的。直接对两幅图片提取这种“特征”,并进行判别分析的话,会因为“位置没有对准”而产生很大的误差。后来,研究人员发现,可以将一幅图片划分为若干的子区域,对每个子区域内的每个像素点都提取局部二值模式特征,然后,在每个子区域内建立局部二值模式特征的统计直方图。如此一来,每个子区域,就可以用一个统计直方图来进行描述;整个图片就由若干个统计直方图组成。
页:
[1]