LBP特征提取

news2024/12/29 17:35:07

文章目录

  • 1 LBP原理及其扩展
    • 1.1 原始LBP
    • 1.2 圆形LBP
    • 1.3 旋转不变LBP
    • 1.4 Uniform Pattern LBP
    • 1.5 MB-LBP
  • 2. 对于边缘点的处理
  • 3. LBP的Python应用
  • 4. LBPH算法及其应用
    • 4.1 LBPH算法原理
    • 4.2 LBPH识别应用
  • 5. 源码仓库地址

LBP指局部二值模式,英文全称:Local Binary Pattern,是一种用来描述图像局部特征的算子,LBP特征具有灰度不变性和旋转不变性等显著优点。

1 LBP原理及其扩展

1.1 原始LBP

原始的LBP算子定义在像素33的邻域内,以邻域中心像素为阈值,相邻的8个像素的灰度值与邻域中心的像素值进行比较,若周围像素大于中心像素值,则该像素点的位置被标记为1,否则为0。这样,33邻域内的8个点经过比较可产生8位二进制数,将这8位二进制数依次排列形成一个二进制数字,这个二进制数字就是中心像素的LBP值,因此LBP值有256种。中心像素的LBP值反映了该像素周围区域的纹理信息。需要注意的是,计算LBP特征的图像必须是灰度图,如果是彩色图,需要先转换成灰度图。

1.2 圆形LBP

由于原始LBP特征使用的是固定邻域内的灰度值,因此当图像的尺度发生变化时,LBP特征的编码将会发生错误,LBP特征将不能正确的反映像素点周围的纹理信息,因此研究人员对其进行了改进。基本的LBP算子的最大缺陷在于它只覆盖了一个固定半径范围内的小区域,这显然不能满足不同尺寸和频率纹理的需要。为了适应不同尺度的纹理特征,并达到灰度和旋转不变性的要求,Ojala等对LBP算子进行了改进,将3*3邻域扩展到任意邻域,并用圆形邻域代替了正方形邻域,改进后的LBP算子允许在半径为R的圆形邻域内有任意多个像素点。从而得到了诸如半径为R的圆形区域内含有P个采样点的LBP算子,这种LBP特征叫做Extended LBP,也叫Circular LBP。

1.3 旋转不变LBP

上面的LBP特征具有灰度不变性,但还不具备旋转不变性,因此研究人员又在上面的基础上进行了扩展,提出了具有旋转不变性的LBP特征。首先不断的旋转圆形邻域内的LBP特征,根据选择得到一系列的LBP特征值,从这些LBP特征值选择LBP特征值最小的作为中心像素点的LBP特征。

1.4 Uniform Pattern LBP

为了解决二进制模式过多的问题,提高统计性,Ojala提出了采用一种“等价模式”(Uniform Pattern)来对LBP算子的模式种类进行降维。Ojala等认为,在实际图像中,绝大多数LBP模式最多只包含两次从1到0或从0到1的跳变。因此,Ojala将“等价模式”定义为:当某个LBP所对应的循环二进制数从0到1或从1到0最多有两次跳变时,该LBP所对应的二进制就称为一个等价模式类。如00000000(0次跳变),00000111(只含一次从0到1的跳变),10001111(先由1跳到0,再由0跳到1,共两次跳变)都是等价模式类。除等价模式类以外的模式都归为另一类,称为混合模式类,例如10010111(共四次跳变)。通过这样的改进,二进制模式的种类大大减少,而不会丢失任何信息。模式数量由原来的2P种减少为P(P-1)+2种,其中P表示邻域集内的采样点数。对于3*3邻域内8个采样点来说,二进制模式由原始的256种减少为58种,即:它把值分为59类,58个uniform pattern为一类,其它的所有值为第59类。这样直方图从原来的256维变成59维。这使得特征向量的维数更少,并且可以减少高频噪声带来的影响。具体实现如下:

采样点数目为8个,即LBP特征值有28种,共256个值,正好对应灰度图像的0-255,因此原始的LBP特征图像是一幅正常的灰度图像,而等价模式LBP特征,根据0-1跳变次数,将这256个LBP特征值分为了59类,从跳变次数上划分:跳变0次—2个,跳变1次—0个,跳变2次—56个,跳变3次—0个,跳变4次—140个,跳变5次—0个,跳变6次—56个,跳变7次—0个,跳变8次—2个。共9种跳变情况,将这256个值进行分配,跳变小于2次的为等价模式类,共58个,他们对应的值按照从小到大分别编码为1-58,即它们在LBP特征图像中的灰度值为1-58,而除了等价模式类之外的混合模式类被编码为0,即它们在LBP特征中的灰度值为0,因此等价模式LBP特征图像整体偏暗。

1.5 MB-LBP

MB-LBP的原理:将图像分成一个个小块(Block),每个小块再分为一个个的小区域(类似于HOG中的cell),小区域内的灰度平均值作为当前小区域的灰度值,与周围小区域灰度进行比较形成LBP特征,生成的特征称为MB-LBP,Block大小为33,则小区域的大小为1,就是原始的LBP特征,Block大小为99,小区域的大小为3*3。接下来对得到LBP特征进行均值模式编码,通过对得到的特征图求直方图,得到了LBP特征值0-255之间(0-255即直方图中的bin)的特征数量,通过对bin中的数值进行排序,通过权衡,将排序在前63位的特征值看作是等价模式类,其他的为混合模式类,总共64类,作者在论文中称之为SEMB-LBP(Statistically Effective MB-LBP)。类似于等价模式LBP,等价模式的LBP的等价模式类为58种,混合模式类1种,共59种。二者除了等价模式类的数量不同之外,主要区别在于:对等价模式类的定义不同,等价模式LBP是根据0-1的跳变次数定义的,而SEMB-LBP是通过对直方图排序得到的。

2. 对于边缘点的处理

对于图像边缘的点,由于通常不能用上述方法来处理成LBP特征点,一般来说有以下几种处理方法:
(1)将边缘的提取不到周围特征的点不进行LBP处理,结果LBP特征图片的像素点会比之前少。
(2)将边缘不存在的邻域点值设置为0。
(3)将边缘的提取不到周围特征的点用原像素点的值取代。

3. LBP的Python应用

Python skimage库中使用local_binary_pattern函数实现LBP提取特征,其函数原型如下:

local_binary_pattern(image, P, R, method='default')

参数说明:

  • image:(N,M)阵列Graylevel图像。

  • P:int圆对称邻居设置点的数量(角度空间的量化)。

  • R:float圆的半径(操作员的空间分辨率)。

  • method:{‘default’,‘ror’,‘uniform’,‘var’}确定模式的方法。

    • ‘default’:原始的局部二值模式,它是灰度但不是旋转不变的。
    • ‘ror’:扩展灰度和旋转不变的默认实现。
    • ‘uniform’:改进的旋转不变性和均匀的模式以及角度空间的更精细的量化,灰度和旋转不变。
    • ‘nri_uniform’:非旋转不变的均匀图案变体,它只是灰度不变的R199。
    • ‘VAR’:局部对比度的旋转不变方差度量,图像纹理是旋转但不是灰度不变的。

测试代码如下:

# -*- coding:utf-8 -*-

from skimage.feature import local_binary_pattern
import matplotlib.pyplot as plt
import cv2

# settings for LBP
radius = 1  # LBP算法中范围半径的取值
n_points = 8 * radius   # 领域像素点数

image = cv2.imread('lenna.jpg')  # 读取图像
image1 = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # 按照RGB顺序展示原图
image2 = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)   # 灰度转换

# LBP处理
lbp = local_binary_pattern(image2, n_points, radius)

plt.subplot(131), plt.imshow(image1), plt.title('Original Image'), plt.axis('off')
plt.subplot(132), plt.imshow(image2, 'gray'), plt.title('Gray Image'), plt.axis('off')
plt.subplot(133), plt.imshow(lbp, 'gray'), plt.title('LBP Image'), plt.axis('off')
plt.show()

效果如下:

在这里插入图片描述

4. LBPH算法及其应用

4.1 LBPH算法原理

LBPH(Local Binary Patterns Histograms)局部二进制编码直方图,是一种人脸识别算法,用于识别人脸,它以其性能以及如何能够从正面和侧面识别人脸而闻名。建立在LBPH基础之上的人脸识别法基本思想如下:首先以每个像素为中心,判断与周围像素灰度值大小关系,对其进行二进制编码,从而获得整幅图像的LBP编码图像;再将LBP图像分为个区域,获取每个区域的LBP编码直方图,继而得到整幅图像的LBP编码直方图,通过比较不同人脸图像LBP编码直方图达到人脸识别的目的,其优点是不会受到光照、缩放、旋转和平移的影响。

一幅图像具体的计算LBPH的过程如下:

a. 计算图像的LBP特征图像;

b. 将LBP特征图像进行分块,Opencv中默认将LBP特征图像分成8行8列64块区域;

c. 计算每块区域特征图像的直方图cell_LBPH,将直方图进行归一化;

d. 将上面计算的每块区域特征图像的直方图按分块的空间顺序依次排列成一行,形成LBP特征向量;

e. 用机器学习的方法对LBP特征向量进行训练,用来检测和识别目标。

4.2 LBPH识别应用

如下是LBPH人脸识别的部分测试代码:

在这里插入图片描述

根据上述代码,基于LBPH的人脸识别基本步骤可以概括如下:

a. 创建空列表分别存储用于训练的人脸和人脸标签;

b. 遍历训练集,将训练人脸及便签存进空列表;

c. 通过OpenCV的LBPH识别函数对训练集中的人脸和人脸标签生成识别器;

d. 读取测试图像,通过识别器进行预测识别该人脸属于哪一类。

5. 源码仓库地址

🌼 图像处理、机器学习的常用算法汇总

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/636322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3.1 基于配置文件整合SSM框架实现用户登录

一、基于XML配置方式整合SSM框架实现用户登录 1、创建数据库与表 (1)创建数据库 数据库simonshop,采用utf8mb4编码 (2)创建用户表 创建用户表t_user CREATE TABLE t_user (id int(11) NOT NULL AUTO_INCREMENT,u…

中国金融,如何向科技要答案?

一个科技初创公司,能否凭借科创成果及时获得信贷准入? 一个农民兄弟能否在春播时,获得精准的无抵押贷款;秋收时,通过银行App找到性价比最高的买家? 一家企业,能否通过其生产及交易信息获取线上融…

对话利星行汽车:合作圆满,对斯歌充分信任!

上海斯歌在利星行汽车的OA替换项目中,喜提客户高度评价。近日,就企业数字化及斯歌产品、服务、体验等问题,斯歌与利星行汽车的管理信息系统总经理庄淑菱女士展开了一次对话访谈。 利星行汽车简介 利星行汽车于1993年进入中国大陆市场&#xf…

【实战经验】vant中picker选择器封装,让你的表单选择更简单

前言 对于选择器组件,vant 中的 picker 组件是一个非常合适的选择。它不仅提供了灵活的配置选项,还可以很方便地与其他 vant 组件结合使用,帮助我们快速搭建出漂亮、易用的移动端页面。在本文中,我将为大家介绍如何基于 vant 的 p…

【第二天议程】大会议题重磅出炉,豪华阵容等你面基!RustChinaConf 2023!

本次大会议题品质一流,嘉宾多来自行业一线,干货多多,且在各领域遍地开花,可看出Rust星星之火在中国已成燎原之势! 大会时间地址 6.17 - 6.18 浦东新区张杨路777号 上海锦江汤臣洲际酒店 官网地址 https://rustcc.cn/20…

# Windows 安装 Docker

Windows 安装 Docker 文章目录 Windows 安装 Docker何为Docker前言安装过程安装 Hyper-V安装 Docker Desktop for WindowsWSL 2 installation is incomplete 配置阿里云镜像加速地址Windows PowerShell查看Docker版本 Docker启动Nginx不挂载运行挂载运行随便启动一个 Nginx 容器…

【leetcode】189.轮转数组

方法1: 先把原数组拷贝一份,然后先将原数组的后k个拷贝,再将前numsSize-k个拷贝 void rotate(int* nums, int numsSize, int k) {//可能存在k>numsSize的情况,先处理kk k % numsSize;//拷贝数组int arr[numsSize];int i 0;in…

网络安全的学习路线是怎么样的?不同人路不同,快来对号入座吧!

最近看到网上有很多人在问诸如:“怎样成为网络安全工程师”等相关问题 这可能与近几年网络安全事件频发,国家对于互联网信息安全和互联网舆情的重视程度不断提升有关,网络信息安全工程师随之成为炙手可热的职业。关于职业前景的详细分析&…

【DBA 警世录之习惯性命令---读书笔记】

👈【上一篇】 💖The Begin💖点点关注,收藏不迷路💖 【下一篇】👉 🔻【💣 话题引入:既然 DBA 这个职业如此危险,那么哪些习惯是 DBA 必须养成的呢&#x…

cuda5 程序执行与硬件关系

这里写目录标题 GPU流式多处理器CUDA内置变量WARP技术细节性能优化 规约规约算法总结 并行规约算法1规约2规约算法 3规约算法4规约5‘规约6for 循环展开 成功优化关键volatile cuda优化2规约算法应用:内积 线程块对应SM GPU流式多处理器 一个sm 有32个cuda core C…

2023最新版互联网工程师Java中级、高级面试题总结(1000道题含答案解析)

作为一名优秀的程序员,技术面试都是不可避免的一个环节,一般技术面试官都会通过自己的方式去考察程序员的技术功底与基础理论知识。 如果你参加过一些大厂面试,肯定会遇到一些这样的问题: 1、看你项目都用的框架,熟悉…

Kafka基础原理

官方文档:https://kafka.apache.org/24/documentation.html#brokerconfigs 1.Kafka适用场景 日志收集:一个公司可以用Kafka收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。 消…

【Linux】只是单向能ping通,win在ping工作站linux系统时可以ping通,但是linux工作站Ping我的win电脑却ping不通

一、问题背景 Win电脑的网络属性如下: IPv4地址172.20.119.223 子网掩码255.255.248.0 默认网关172.20.112.1 Linux工作站的网络属性如下: ipv4地址:172.20.13.56 子网掩码:255.255.255.0 默认网关:172.20.13.1 我在…

RK3568开发板Buildroot 系统设置显示颜色格式

Buildroot SDK 内 Weston 目前默认显示格式为 ARGB8888,对于某些低性能平台,可以在 weston.ini 的 core 段配置为 RGB565。 修改文件系统中/etc/xdg/weston/weston.ini 文件,修改如下所示: [core] # xrgb8888|rgb565|xrgb2101010 gbm-formatrgb565 …

Vue中如何进行数据导出与Excel导出?

Vue中如何进行数据导出与Excel导出? 在前端开发中,我们常常需要将页面上的数据导出到Excel中,以便用户进行数据分析和处理。在Vue中,实现数据导出和Excel导出有多种方式,本文将介绍其中两种常用的方式。 1. 使用第三方…

混沌演练状态下,如何降低应用的MTTR(平均恢复时间)| 京东云技术团队

在企业业务领域,锦礼是针对福利、营销、激励等员工采购场景的一站式解决方案,包含面向员工、会员等弹性激励SAAS平台。由于其直接面向公司全体员工,其服务的高可用尤其重要,本文将介绍锦礼商城大促前夕,通过混沌工程实…

通过JAVA代码访问服务器上传文件

这里使用的是maven环境&#xff0c;便于导入依赖包 项目结构&#xff1a; pom文件&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001…

九耶丨阁瑞钛伦特-S/390的运行模式

为了满足不同的环境需求&#xff0c;S/390处理器可以在不同的模式下运行&#xff1a; 1. S/370基本任选模式 在这种模式下&#xff0c;S/390可以支持S/370的217条指令&#xff0c;存储器使用24位地址&#xff0c;最多支持16MB内存&#xff0c;同时支持16个通道和集成I/O适配器…

数据结构-Redis(二)

前面介绍了redis的String和哈希&#xff0c;接下来看看其他的数据结构 List LPUSH&#xff1a;左边放入 RPUSH&#xff1a;右边放入 LPOP&#xff1a;取出左边第一个数&#xff0c;并且移除 RPOP&#xff1a;取出右边第一个数&#xff0c;并且移除 由上操作可以看出&#…

华为OD机试真题 JavaScript 实现【食堂供餐】【2023 B卷 考生抽中题】,附详细解题思路

一、题目描述 某公司员工食堂以盒饭的方式供餐。 为将员工取餐排队时间降为0&#xff0c;食堂的供餐速度必须要足够快。 现在需要根据以往员工取餐的统计信息&#xff0c;计算出一个刚好能达到排队时间为0的最低供餐速度。 即&#xff0c;食堂在每个单位时间内必须至少做出…