LBP 特征

本文最后更新于:2023年1月10日 晚上

LBP(Local Binary Pattern) 局部二值特征是一种纹理描述子,它度量和提取图像的局部纹理信息,对旋转和光照具有不变性。

简介

  • LBP(Local Binary Pattern) 局部二值特征是一种纹理描述子,它度量和提取图像的局部纹理信息,对旋转和光照具有不变性。单纯的LBP记录像素点与像素点的对比信息。

LBP

定义

  • LBP算子定义为在 $3\times3$ 窗口内,以窗口中心像素为阈值,将相邻的八个像素与其进行比较,若周围像素值大于中心像素值,则该点的标记为1,否则为0。

  • 这样, $3\times3$ 邻域内的 8 个点经比较可产生8位二进制数(通常转换为十进制数,即LBP码,共256种),即得到该窗口中心像素点的LBP值,并以此反映该区域的纹理信息。

  • 二进制数的顺序并无硬性要求,只要在同一处理中保持相同顺序即可。

  • LBP算子可以取多个周围像素点和采样半径。

示例

  • 由一个像素与其八邻域像素的关系获取 LBP 值的流程

旋转不变

  • 原始的 LBP 特征对光照具有一定鲁棒性,因为亮度整体变化不至于影响大部分的相对关系
  • 但原始 LBP 特征在旋转时难以保持不变,因为特征也会跟着图像变化,相当于二进制数据循环移位,势必特征会发生变化
  • 那么为了消除旋转这一变量,我们将 LBP 值循环移位,选择一个固定大小排序位置的数值作为特征则会抵抗旋转的影响,为了方便我们选择最小的 LBP 特征:

  • 以上图为例,该像素的旋转不变 LBP 特征值为 15

  • 如果不做旋转不变形的筛选, LBP 可选特征有 256 种模式

  • 做了旋转不变的特征筛选后,模式变为总共 36 种

    其中:

    LBP值含有1的个数 总模式数
    0 1
    1 1
    2 4
    3 7
    4 10
    5 7
    6 4
    7 1
    8 1
    总数 36
  • 统计代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
min_fea = set()

def make_str(value):
res_str = ''
for i in range(8):
r = value % 2
value = value >> 1
res_str = str(r) + res_str
return res_str

def get_num1(min_fea, num):
res_list = list()
for str_1 in min_fea:
if str_1.count('1') == num:
res_list.append(str_1)
return res_list

for number in range(256):
data_list = list()
temp = number
for i in range(8):
data_list.append(temp)
l = temp % 2
temp = (temp >> 1) + 128 * l
min_value = min(data_list)
res_str = make_str(min_value)
min_fea.add(res_str)

total_num = 0
for index in range(9):
sub_num = len(get_num1(min_fea, index))
print('1 count', index, 'num', sub_num)
total_num += sub_num
print('total feature num ', total_num)
pass
  • 输出结果:
1
2
3
4
5
6
7
8
9
10
1 count 0 num 1
1 count 1 num 1
1 count 2 num 4
1 count 3 num 7
1 count 4 num 10
1 count 5 num 7
1 count 6 num 4
1 count 7 num 1
1 count 8 num 1
total feature num 36

参考资料


LBP 特征
https://www.zywvvd.com/notes/study/image-processing/feature-extraction/image-lbp/image-lbp/
作者
Yiwei Zhang
发布于
2023年1月10日
许可协议