LBP(local banary patter)是一种非常经典的用来描述图像局部纹理特征的算子。
1,基本LBP
LBP方法自1994年提出,此后就作为一个有效的纹理特征,不断的被人使用和改进。LBP非常简单,也非常有效。
左边的图是从一个图片上拿下来的3*3矩阵,矩阵上的值就是像素值,现在我们要计算的中间那个点的LBP。除了它此外的8个点依次与中间点比较,比它(也就是15)大的记成1,比它小的记成0,然后我们就得到右面的图片。然后我们选定一个起始点-这个图片选的是左上角第一个点,然后按照顺时针方向得到一个二进制串10011010,转换为十进制则为154。到此,我们得到了中间点的LBP值--154。对整个图片的所有点都这样处理,也就是以它为中心与附近的8个点相比较,这样就得到整个图所有点的LBP值。那么得到这么个与源图像大小相等的LBP值矩阵有什么用呢?通常我们统计它的直方图,得到一个直方图矩阵向量,然后每一个图片对应一个直方图向量,这个直方图向量就是此图片的一个特征。我们由两个图像的直方图向量从而得到它们的相似度,从而来分类。
2, LBP均匀模式LBP (uniform LBP)
均匀模式就是一个二进制序列从0到1或是从1到0的变过不超过2次(这个二进制序列首尾相连)。比如:10100000的变化次数为3次所以不是一个uniform pattern。所有的8位二进制数中共有58个uniform pattern.为什么要提出这么个uniform LBP呢,因为研究者发现他们计算出来的大部分值都在这58种之中,所以他们把值分为59类,58个uniform pattern为一类,其它的所有值为第59类。这样直方图从原来的256维变成59维。
3,旋转不变模式LBP
旋转不变模式LBP能够在图片发生一定的倾斜时也能得到相同的结果。它的定义可以看下图:
我们看到中心点的邻居不再是它上下左右的8个点(补充一句,不一定非要是3*3的邻域,这个自己定,但是邻域大了意味着直方图向量维度的增加),而是以它为圆心的一个圈,规定了这个圆的半径和点的个数,就可以求出各个点的坐标,但是点的坐标不一定是整数,如果是整数那么这个点的像素值就是对应点的值,如果不是整数,就用差值的方式得到。
其他基于LBP的算法
1,MBP
将整个邻域内的所有点的中值作为阈值进行比较,中值不是平局值哦,是所有的值按照从小到大排列,最中间的那个。话说这个MBP可以用matlab的一个函数实现:medfilt2
2,
利用邻域内所有点的平局值作为阈值。
3,
第三种不是在阈值上做改动,而是将大图片切分成小图片,然后再小图片上用LBP方法,然后把小些小图片的直方图矩阵连接起来,成为大图的特征。为什么这么做呢?因为很明显的LBP 直方图会丢失局部信息,比如得到一个值为100那么不管你这个值是从哪里得到的--比如人脸,不管是眼睛处得到这个值还是鼻子处得到,应该不管,都放到lable=100这里。
-----------------------------------------------------------------------------------------------------
在这里列出那58个uniform patterns.
00000000,0
00000001,1
00000010,2
00000011,3
00000100,4
00000110,6
00000111,7
00001000,8
00001100,12
00001110,14
00001111,15
00010000,16
00011000,24
00011100,28
00011110,30
00011111,31
00100000,32
00110000,48
00111000,56
00111100,60
00111110,62
00111111,63
01000000,64
01100000,96
01110000,112
01111000,120
01111100,124
01111110,126
01111111,127
10000000,128
10000001,129
10000011,131
10000111,135
10001111,143
10011111,159
10111111,191
11000000,192
11000001,193
11000011,195
11000111,199
11001111,207
11011111,223
11100000,224
11100001,225
11100011,227
11100111,231
11101111,239
11110000,240
11110001,241
11110011,243
11110111,247
11111000,248
11111001,249
11111011,251
11111100,252
11111101,253
11111110,254
11111111,255
十进制数位:
[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, 255]