【图像处理】深入解析LBP算法

news2025/2/21 19:25:52

问题

LBP是一种常见的特征描述算法,用来提取局部的纹理特征,其原理其实很简单,下面我们就来看看它是怎么一回事吧。

LBP简介

LBP(Local Binary Patterns,局部二值模式)是一种很简单但很高效的局部纹理特征描述算子,于1994年由T. Ojala, M. Pietikäinen和D. Harwood提出,经过后续的改进,LBP特征具有旋转不变性灰度不变性,在机器视觉领域中得到了广泛的应用,如人脸识别、指纹识别、光学字符识别以及车牌识别等。

LBP算子的优缺点

参考: https://blog.csdn.net/lk3030/article/details/84034963

优点:

  • 一定程度上消除了光照变化的问题
  • 具有旋转不变性
  • 纹理特征维度低,计算速度快

缺点:

  • 当光照变化不均匀时,各像素间的大小关系被破坏,对应的LBP算子也就发生了变化。
  • 通过引入旋转不变的定义,使LBP算子更具鲁棒性。但这也使得LBP算子丢失了方向信息。

LBP特征描述原理

LBP是一种局部特征描述算子,最原始的LBP算子使用大小为3×3的窗口,将窗口中心邻域的8个像素分别与窗口中心像素其进行比较,邻域像素值大于中心像素值的位置标记为1,否则标记为0,从而得到一个8位的二进制值,将该值作为该窗口中心像素的LBP值(通常将8位的二进制值转换成十进制表示,即有256种可能的LBP值)。

如下图所示,可以更直观地理解LBP特征描述的思想(以窗口中心左上角的像素作为LBP值起始位):

img

LBP的原理的确很简单吧?简单归简单,这显然还不能完全满足我们实际应用的需求,比如窗口大小的调整、旋转不变性等等,于是就有了以下一些改进的版本。

圆形LBP算子

原始的LBP算子的一个缺陷在于它只覆盖了一个固定半径范围内的小区域,这显然不能满足不同尺寸和频率纹理的需要。为了适应不同尺度的纹理特征,并达到灰度和旋转不变性的要求,Ojala等对LBP算子做了以下改进:

  1. 将3×3邻域扩展到任意邻域
  2. 用圆形邻域代替了正方形邻域

改进后的LBP算子允许在半径为 R 的圆形邻域内有任意多个像素点,从而得到了诸如半径为R的圆形区域内含有P个采样点的LBP算子。下图给出三种不同半径大小的圆形LBP特征描述算子:

img

旋转不变LBP算子

从LBP的定义可以看出,LBP算子是灰度不变的,但却不是旋转不变的。图像的旋转就会得到不同的LBP值。Maenpaa等人又将LBP算子进行了扩展,提出了具有旋转不变性的局部二值模式算子,即不断旋转圆形邻域得到一系列初始定义的LBP值,取其最小值作为该邻域的LBP值

如下图所示,对于以下8种不同旋转角度的LBP值特征,它们的LBP值均为15(即最小值,其二进制表示为00001111),因此图像的LBP特征就具有了旋转不变性。

img

LBP等价模式

考察LBP算子的定义可知,一个LBP算子可以产生多种二进制模式(p个采样点)如:3x3邻域有p=8个采样点,则可得到28=256**种二进制模式;5x5邻域有p=24个采样点,则可得到**224=16777216种二进制模式,以此类推…。显然,过多的二进制模式无论对于纹理的提取还是纹理的识别、分类及信息存取都是不利的,在实际应用中不仅要求采用的算子尽量简单,同时也要考虑到计算速度、存储量大小等问题。因此需要对原始的LBP模式进行降维

为了解决上述二进制模式过多的问题,提高统计性,Ojala等人提出了采用一种**“等价模式”(Uniform Pattern)来对LBP算子的模式种类进行降维。其主要思想是:对于某些代表了图像的边缘、斑点、角点等信息的LBP模式,其具有较好的特征区分度,我们不做降维,这些LBP模式归为等价模式类**;而对于其他没什么代表性的LBP模式,我们不太关心,统一归为一种类型,叫做剩余模式(混合模式)

img

那么什么样的LBP模式具有较好的区分度,能够称为等价模式呢?Ojala等人认为,在实际图像中,绝大多数LBP模式最多只包含两次从1到0或从0到1的跳变。于是将等价模式定义为:当某个LBP所对应的循环二进制数从0到1或从1到0最多有两次跳变时,该LBP所对应的二进制就称为一个等价模式类

例如如00000000(0次跳变),00000111(只含一次从0到1的跳变),10001111(先由1跳到0,再由0跳到1,共两次跳变)都是等价模式类。除等价模式类以外的模式都归为另一类,称为混合模式类,例如10010111(共四次跳变)

判断一个二进制模式是否为等价模式最简单的办法就是将LBP值与其循环移动一位后的值进行按位相与,计算得到的二进制数中1的个数,若个数小于或等于2,则是等价模式;否则,不是。

通过这种改进,二进制模式的种类大大减少,而不会丢失任何信息,模式种类由原来的 2 n 2^{n} 2n减少为 n ∗ ( n − 1 ) + 2 + 1 n*(n-1)+2+1 n(n1)+2+1种,这使得特征向量的维数更少,并且可以减少高频噪声带来的影响。 其中,n表示邻域集内的采样点数,共有 n ∗ ( n − 1 ) + 2 n*(n-1)+2 n(n1)+2等价模式和1种剩余模式(混合模式)

等价模式种类的计算:由于等价模式中,所以为1的bit必须相邻,并且LBP模式是循环的(也就是收尾相连)。以n=8为例,

当有1个1时,有n种等价模式;(分别是10000000, 01000000, 00100000, … , 00000001)

当有2个1时,有n种等价模式;(注意LBP是循环的,两个相邻的1移动到末尾后还可以再移动一次变成10000001)

当有n-1个1时,有n种等价模式;

另外再加上全0和全1这两种特殊的等价模式,共有(n-1)*n+2种等价模式,再加上其他统一归为一类的混合模式,所以降维后一共有(n-1)*n+3种LBP模式。

LBP算子对均匀光照变化的鲁棒性

使用LBP算子提取特征,对于图像上的每个像素点都可以得到一个LBP值,这些LBP值也组成了一幅“图像”,如下图所示,上面为不同光照强度下的图像,下面为提取LBP特征后LBP值表示的图像,可以看出,LBP特征提取对均匀的光照变化具有很强的鲁棒性,因此这种算法在很多领域都得到了应用。

img

LBP特征检测步骤:

  1. 将检测图像切分为若干个区块(cell,例如每个区块16x16像素)。

  2. 对于每个cell中的一个像素,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0。这样,3*3邻域内的8个点经比较可产生8位二进制数,即得到该窗口中心像素点的LBP值

  3. 然后计算每个cell的直方图,即每个LBP值出现的频率,然后对该直方图进行归一化处理。

  4. 最后将得到的每个cell的统计直方图进行连接成为一个特征向量,也就是整幅图的LBP纹理特征向量。

然后就可以将该特征向量通过诸如SVM等机器学习算法来产生一个分类器进行分类任务了。

补充:

假设一幅图像为128×128大小,可以将图像划分为8×8=64个cell,每个cell包含16×16=256个像素,然后对每个cell中的每个像素计算一个LBP值,即每个cell得到16×16个LBP值,接着对每个cell分别统计直方图并归一化,将所有cell直方图的结果连接起来就组成了整幅图像的特征向量。

参考资料

LBP原理加源码解析 https://blog.csdn.net/xidianzhimeng/article/details/19634573

Local Binary Patterns http://www.scholarpedia.org/article/Local_Binary_Patterns

lbp特征提取(等价模式)

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

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

相关文章

2025年DMS前装搭载或突破750万辆!多方势力搅局「融合集成」

在智能驾驶功能和舱内人机交互体验不断融合演进的过程中,基于摄像头的DMS/OMS功能正在进入新的发展周期。而在欧洲等部分国家及地区,DMS的标配(主要涉及驾驶安全的监控,比如,驾驶员疲劳、注意力分散、安全带使用、吸烟…

java工厂策略模式的开发应用

java工厂策略模式的开发应用前言准备工作具体实现测试仰天大笑出门去,我辈岂是蓬蒿人前言 大概内容: 假设我有五个车间,每一个车间生产不同的车子,想要统一管理,不关心哪个车间生产什么车;只需找一个代理…

Ajax(一)

1.客户端与服务器 1.1 服务器 上网过程中,负责存放和对外提供资源的电脑。 1.2 客户端 上网过程中,负责获取和消费资源的电脑。 2.URL地址 2.1 URL地址的概念 2.2 URL地址的组成部分 3. 分析网页的打开过程 3.1 图解客户端与服务器的通信过程 三个…

NLP学习笔记(一) RNN基本介绍

大家好,我是半虹,这篇文章来讲循环神经网络 (Recurrent Neural Network, RNN) 文章行文思路如下: 首先通过前馈神经网络引出为啥需要循环神经网络然后介绍循环神经网络的核心思想与运作方式最后拓展两个循环神经网络常见且常用的变体 在讲循…

Windows 7恢复分区丢失了怎么恢复?

问题:Windows 7恢复分区丢失 戴尔、惠普和华硕等电脑制造商现会在他们的计算机上创建一个恢复分区。恢复分区允许用户在系统出现问题时将计算机恢复到出厂默认设置。但是,由于丢失了恢复分区,因此某些用户无法将电脑恢复到出厂设置。这是一个…

析构函数可以为纯虚函数吗?纯虚函数可以有函数体吗?纯虚函数需要函数体吗?

先回答标题中中的几个问题: 析构函数可以为纯虚函数吗? yes。纯虚函数可以有函数体吗? yes。纯虚函数需要函数体吗? 一般来讲,如果析构函数是纯虚函数,那么析构函数必须要有函数体,如果是其它函…

Web前端大作业:基于bootstrap响应式页面,家具装修公司网站

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

最新版本APT漏洞利用工具箱

点击"仙网攻城狮”关注我们哦~不当想研发的渗透人不是好运维让我们每天进步一点点简介1.最近发现一个好用的渗透工具箱,基本包含最新热门漏洞exp,分享一下项目地址:https://github.com/White-hua/Apt_t00ls环境:jdk1.8如果双…

【深度学习】PyTorch深度学习实践 - Lecture_11_Advanced_CNN

文章目录一、GoogLe Net1.1 网络结构1.2 Inception Model1.3 11 Convolution1.4 PyTorch-GPU 实现 GoogLe Net二、Residual Net2.1 梯度消失和梯度爆炸2.2 残差模块2.3 PyTorch-GPU 实现 Simple Residual Net2.3.1 整体结构2.3.2 残差块对象2.3.3 残差网络对象2.3.4 完整代码三…

微服务框架 SpringCloud微服务架构 分布式事务 38 动手实践 38.7 案例实现TCC 模式【分析】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 分布式事务 文章目录微服务框架分布式事务38 动手实践38.7 案例实现TCC 模式【分析】38.7.1 实现TCC 模式38.7.2 TCC 的空回滚 和业务悬挂38…

Redis框架(八):大众点评项目 逻辑过期时间处理缓存击穿

大众点评项目 逻辑过期时间处理缓存击穿需求:逻辑过期时间处理缓存击穿业务实现总结SpringCloud章节复习已经过去,新的章节Redis开始了,这个章节中将会回顾Redis实战项目 大众点评 主要依照以下几个原则 基础实战的Demo和Coding上传到我的代…

七分钟教会你如何编写一个合格的测试用例

目录 1、测试用例的基本要素 2、根据测试用例去测试带来的好处 3、测试用例的设计方法 3.1、等价类 3.2、边界值 3.3、错误猜测法 3.4、场景法 3.5、因果图法 3.6、正交排列 4、怎样判断一个测试用例是好的测试用例 1、测试用例的基本要素 测试用例是为了实施测试而向…

基于LEACH和HEED的WSN路由协议研究与改进(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

Google谷歌浏览器Post请求预见strict-origin-when-cross-origin跨域问题的 解决办法

问题概述 关于这个问题,后端接口开发完成,前端功能界面和函数方法体编写完成后,博主在前后端联调的时候遇到的,接口是调用成功了,但是没有返回任何结果, 错误信息:“ Referrer Policy: strict-…

C++中二叉树的非递归遍历方法2-1

1 二叉树简介 树是一种数学上的抽象,在算法的设计与分析中起到一个中心作用。树是有n个节点的有限集合。二叉树是树的一种特殊形式,这种树的每个节点最多有2个子节点。 2 二叉树的遍历方法 二叉树的遍历分为前序遍历、中序遍历、后序遍历和层序遍历四…

【华为上机真题 2022】寻找身高相近的小朋友

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

力扣(LeetCode)147. 对链表进行插入排序(C++)

排序 ①遍历链表,当前遍历的结点记作 ppp 。 ②从前往后遍历链表,找到最后一个值小于 ppp 的结点 curcurcur 。 ③(关键操作) 插入,如图,将 ppp 插入 curcurcur 的后面。 p->next cur->next; cur->next p; p next;…

关于Mac启动人人开源前端项目遇到node-sass下载不了的问题!

今天在网上看到了一个前后端分离用户管理系统,于是心血来潮下载下来看一看,结果发现前端项目中用Mac开发的话坑比较多 1.关于node版本问题 node版本最好不要太高,我对于该项目使用的node版本是v10.16.3 node版本最好使用nvm来管理&#xff0c…

[附源码]Python计算机毕业设计Django的图书互换系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

java基于springboot的在线电影评论投票系统

项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代…