LBP算子

来源:互联网 发布:手机视频通话软件 编辑:程序博客网 时间:2024/04/30 22:39

LBP是简单地模式识别特征提取方法,原理简单易懂,程序网上也有,只要稍微改改,就能在自己的库上面运行。

LBP有几个升级的变种,如CLBP,分块LBP等,是一个图像纹理识别入门级的算法,简单做下总结与归纳。

1.LBP基本原理:

LBP,局部二值模式,按照字面上的意思,就是能够提取出图像的局部特征,这个特征又是二进制的。如下图:


在黑白图像中,取3*3的窗口,得到每个像素灰度值,周围8个像素减去中间像素,取符号,得到最后的0,1值,最后从左上角顺时针拉直,得到8位的二进制数(01111100),再转化为十进制数(124),那么124就是这个中心像素对应的LBP特征值。

同样的方法,遍历整幅图像,如果图像是60*60像素的,则最后可以得到除边界外的59*59=3481个(0-255)的十进制数(因为只取周围8个像素,八位的二进制数范围是0-255)。接着,用统计直方图统计这3481个十进制特征值,得到256维的特征向量。


如上图就是某幅图的统计直方图,大概45的位置为70,表明3481个像素点中,LBP特征为45的像素有70个。

这样,无论是多大的图像,最后都变为256维的LBP特征向量。

我们基于这些向量,可以做进一步的分类,具体的分类器不定。

2.旋转不变的LBP


如上图,同样的纹理,开始得出的LBP值为225,旋转一下就变为7个完全不同的值,为了让图像旋转后,LBP值不变,提出了旋转不变的LBP.其实也就是把3*3的局部范围旋转7次,得到8个不同值,取其中最小的作为唯一的LBP。如上图,最后得到的LBP值是15.

3.均匀LBP

256维的LBP特征向量中也有过多的冗余信息,我们再次降维。

当某个LBP所对应的循环二进制数从0到1或从1到0最多有两次跳变时,该LBP所对应的二进制就称为一个等价模式类。如00000000(0次跳变),00000111(只含一次从0到1的跳变),10001111(先由1跳到0,再由0跳到1,共两次跳变),我们只要统计其跳变的次数就行。

4.分块LBP

上面的三种方法都是基于局部的LBP算子,反映的仅仅是局部纹理特征,识别效果不是很好。为了引入全局的分布特征,引入分块的概念。

所谓的分块,其实就是很简单地把图像切成小块,每个小块分别LBP后叠加在一起得到最后的LBP。如下图:


图像被切成2*2=4副小图,如果用基本的LBP,生成4个256维的向量,直接加在一起,得到4*256=1024维的最终向量。由于这里的维度过高,可以考虑用均匀LPB降维,或为了旋转不变,再加入旋转不变量。

5.CLBP

CLBP是LBP的升级版,CLBP计算三个变量S_LBP,M_LBP,C_LBP,其中的S_LBP=基本的LBP;M_LBP把中心像素中替换为全局的像素均值;C_LBP为各个像素与全局均值的差矩阵。

我们可以直接把S_LBP特征向量和M_LBP特征向量加在一起,或者用其他方法,这里不深入论述。

关于CLBP的效果,研究证明S_LBP包含了图像的大部分特征,即基础的LBP已经是效果较好,M_LBP包含的较少。所以最后的效果是S_LBP+M_LBP>S_LBP>M_LBP.

总结:上面简单介绍了LBP,旋转不变LBP,均匀LBP,分块,CLBP等。个人觉得LBP的算法没有直观或者理论的依据,并不是很好的特征提取方法,提取的特征冗余信息太多,如果不降维,计算量也太大,不能算是很好的特征提取方法。

这里有上述所有LBP的matlab程序打包下载:http://download.csdn.net/detail/ice110956/5750525