近日接触到旋转不变LBP,刚开始以为有256种模式,但是慢慢发现并没有这么多种模式,比如10000000(128)和00000010(2)他们的旋转不变LBP模式都是一样的,最后都为00000001(1),因此我在这里讨论一下旋转不变LBP一共有多少种模式。
用Python实现一下旋转不变LBP的种类,代码思路如下
1、把0-255这256个数字依次移位计算最小值
2、建立一个数组用来存放数字,如果这个数字不在数组中,就加入数组,如果在数组中,就pass掉。同时创建一个计数器,用来计算一共有多少种模式。
程序如下:
import numpy as np
def circular_shift_left (a):
bit = '{:08b}'.format(a)
c = []
for i in range(8):
bin_value = bit[i:] + bit[:i]
int_value = int(bin_value,2)
c.append(int_value)
return np.min(c)
if __name__=='__main__':
count = 0 #计数
mode= [] # 模式
for i in range(256):
a = circular_shift_left(i)
if a in mode:
pass
else:
mode.append(a)
count+=1 #
print(mode,count)
运行结果为:
[0, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 37, 39, 43, 45, 47, 51, 53, 55, 59, 61, 63, 85, 87, 91, 95, 111, 119, 127, 255] 36
可以发现,结果并不是256维的,而是36维的,也就是说旋转不变LBP一共有36种模式。