一、简介
LBP(Local Binary Pattern),即局部二进制模式,是一种描述图像特征像素点与各个像素点之间的灰度关系的局部特征的非参数算法,同时也是一张高效的纹理描述算法。对一个像素点以半径r画一个圈,在圈上取K个点(一般为8),这K个点的值(像素值大于中心点为1,否则为0)组成K位二进制数。此即局部二进制模式,实际中使用的是LBP特征谱的直方统计图。在旧版的Opencv里,使用CvHaarClassifierCascade函数,只支持Harr特征。新版使用CascadeClassifier类,还可以支持LBP特征
优点:
1,旋转不变性(局部二进制循环左移或右移其表示不变)
2,一定程度上消除了光照变化的问题
3,纹理特征维度低,计算速度快
缺点:
1,当光照变化不均匀时,各像素间的大小关系被破坏,对应的LBP算子也就发生了变化
2,通过引入旋转不变的定义,使LBP算子更具鲁棒性。但这也使得LBP算子丢失了方向信息(如使局部二进制左移或右移,结果是一样的,但是图像不一样)
二、灰度不变性
该纹理单元的中心灰度值(阈值)为85,其余8个相邻的灰度值分别为:90、74、63、134、91、83、99、103、90。根据这个阈值计算的定理进行计算,通过阈值计算后,根据图中箭头所指的方向可以得到一个局部二进制的模式,即:LBP模式=1101001,且LBP=217,。通过以上LBP算法的计算例子可以看出LBP值仅由中心像素点灰度值和相邻八个像素点的灰度值决定,LBP特征即表示了其中心像素点的特征,其值的计算还需要和周围的像素点计算完成,所以,LBP特征与周围有很大的关系,它包含了图像点,又包含了边缘和局部的特征分布信息。
三、旋转不变性LBP算法
通过上面的介绍,我们不难发现1LBP算法是具有灰度不变性的,在2002年的论文的,除了灰度不变性,作者又为LBP引入了旋转不变性与等价模式,它是怎么实现的呢?
通过上面的介绍我们知道,对于一个选定的P,LBP算法将产生2^P个不同的输出值,比如P=8时,值就有256个,这256个模式中每拿出一个都围绕中心点转动,那么在多次转动的过程中,会产生多种不同的结果,而这些结果中值最小的那个模式就是选择不变的二值模式了。比如:
在上面的图中说明的是,图中的这8种模式,都有相同的旋转不变模式,就是十进制为15的那个值,即00001111。那么对256种模式都做这种旋转,得到最小的数作为这种模式的旋转不变模式,旋转不变模式一共有36种