图像处理(十三)LBP特征提取

LBP 图 与灰度图很像,只是将灰度转为LBP值
那么什么事LBP值
LBP值就是以灰度图中每个像素点的灰度为阈值,周围灰度超过阈值为1,否则为0,然后将1与0排列为2进制数,最后换算成10进制的数字,这个数字就是该点的LBP值。
周围像素点的范围及形状又将LBP值分成不同类别:
首先正方形以33 8位为常见:分别是image[h-1,w-1]image[h-1,w]image[h-1,w+1]
image[h+1,w-1]image[h+1,w]image[h+1,w+1]image[h,w-1]image[h,w+1]
其次圆形:圆形的制作 dh = np.round([radius
np.sin(x2np.pi/count) for x in range(count)])
dw = np.round([radiusnp.cos(x2np.pi/count) for x in range(count)])
for i in range(count):
h += dh[i]
w += dw[i]
最后等价模式,等价模式可以实现降维处理,极大的减少了运算成本,作用原理就是将LBP2的n次方特征向量转换为n
(n-1)的特征向量,转换原理就是原本的2的n次方种数据依据0-1或1-0的跳跃种类,等价模式中跳跃种类只有2次,2次可覆盖90%比例,所谓跳跃我认为就是灰度像素变为LBP像素过程中0与1的变换,因为既然变换就是两个像素间变换,而像素位置不变,只能是类型变换过程中产生的变换,具体怎么应用不知道。
将灰度图转为LBP图后,目的是获取特征向量,将特征向量作为训练集进行训练
python 有现成的LBP特征检测函数 skimage.feature.local_binary_pattern()
这个函数的关键参数:1、灰图片 2、依赖点的数量 3、半径

转为LBP图后很容易就可以转为直方图,提取出特征向量,numpy有现成的函数:
np.histogram()
这个函数的关键参数:1、原图 2、normed是否进行归一化 3、bins为LBP的最大值+1
4、LBP的范围range=(0,bins)
代码如下:

from skimage import feature as skft
import numpy as np
import cv2
from matplotlib import pyplot as plt

path = 'timg.jpg'
image = cv2.imread(path,0)

img = skft.local_binary_pattern(image,8,2)
img = img.astype(np.int32)
max_bins = int(img.max())+1
#直接引入函数返回归一化直方图
#img,x_img= np.histogram(img,normed=True,bins=max_bins,range=(0,max_bins))
#手写直方图
h,w = img.shape
a = np.zeros((1,max_bins))
s = 0
for i in range(h):
	for j in range(w):
		a[:,img[i,j]] += 1
		s += 1
a = np.squeeze(a/s)
print(np.sum(a))

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值