转载:LBP的初步理解
转自http://blog.csdn.net/ty101/article/details/8905394
本文的PDF版本,以及涉及到的所有文献和代码可以到下列地址下载:
1、PDF版本以及文献:http://download.csdn.net/detail/ty101/5349816
2、原作者的MATLAB代码:http://download.csdn.net/detail/ty101/5349894
LBP一种用来描述图像纹理特征的算子,该算子由芬兰奥卢大学的T.Ojala等人在1996年提出[1],在2002年时,Timo Ojala等人在PAMI上又发表了一篇关于LBP的文章[2],该文章非常清楚的阐述了多分辨率、灰度尺度不变和旋转不变、等价模式的改进的LBP特征。LBP的核心思想就是:以中心像素的灰度值作为阈值,与他的领域相比较得到相对应的二进制码来表示局部纹理特征。呃,这句话实在有些拗口-_-#还是举例吧,下面我们从最简单的入手,一步一步讲解整个LBP特征(整个LBP特征提取流程请看文章最后的appendix)。
l 初级的LBP计算方法(先撇开多分辨率、灰度尺度不变、旋转不变^_^)
假设我们有一个3*3的窗口,窗口内的值代表每个像素的灰度值,如下所示:
可以看到中心像素点的灰度值为6,我们将这个中心像素点的灰度值与它周围8领域的像素值大小做比较,也就是说我们将7、9、8、7、1、2、5、6这8个数字分别与6做比较,大于6,我们则把右边相应的方格置为1,小于6则置为0。之后我们就得右边的窗口,我们按逆时针方向把这些1和0连起来就得到了所谓的LBP模式:11110001(注意是二进制的),然后将这个数转换为10进制,也就是241。
Tips:扩展后的LBP中的窗口形状
上面所说的版本是Timo Ojala在1996年提出的,在2002年的时候Timo Ojala在PAMI上的文章对上述算法进行了拓展。拓展后的算法可以设置邻域和半径的属性,用P来表示邻域像素点个数,用R来表示半径,上面我们描述的初级版本就是P=8,R=1.0的版本(不考虑插值,后面会详细描述)。下图描述了P,R取不同值时的情形:
注意初级版本[1]的领域是没有表现出插值的思想的(也就是方形邻域),而2002年的PAMI文章[2]是圆形邻域,是涉及到插值的(可以看出,只有对角线的像素需要插值)。其实将方形窗口换成圆形窗口也有利于后面的旋转不变性的实现,后面会详细描述。
Tips:关于LBP的亮度变化鲁棒性以及灰度尺度不变
灰度尺度不变其实很好理解,我们依旧用图1为例子,我们将亮度放大10倍:
可以看到,灰度尺度的变换并没有对最后的局部二值模式产生影响,同样的道理,即使该窗口的9个像素的灰度值出现了亮度的非线性变换,只要中心像素的灰度值与8邻域内像素的灰度值的大小关系不变,那么最终产生的LBP特征就不会改变。但是请注意:要是亮度变换后,中心像素灰度值与周围像素的灰度值大小关系与变换前不一样,那么LBP特征就会随之改变了。例如,图1中的窗口,亮度进行了一次非线性的变化,结果为:
可以看出,右边的局部二值模式已经和图1中的局部二值模式不一样了。
为LBP算子加入旋转不变性
在2000年Pietikinen等人在文章[3]中描述了如何扩展LBP特征,使之具备旋转不变性。下面我们以一个P=8,R=1.0的圆形窗口作为例子,讲解LBP算子的旋转不变性。令中心点的灰度值为gc,8邻域内的8个像素灰度值分别为gi={g0,g1,…,g7},当图像发生旋转时,圆形邻域内的灰度值gi是在以gc为中心R为半径的圆周上运动的。例如我们有一个这样的窗口:
那么把图像逆时针旋转每次45度,枚举出所有可能的取值,得到如下结果:
我们可以发现,只要我们取上述枚举出来的值的最小值,就可以消除旋转带来的影响。例如我们得到一个二进制的LBP值10000011(也就是原图逆时针旋转45度),然后不断对这个二进制进行向右循环移位(加上它本身,总共有8种取值可能),之后取最小结果就是该窗口的LBP值。
Tips:旋转不变的LBP特征也起到了一定的特征将维作用
当p=8,R=1.0的时候,最终会有2^p=2^8=256种取值可能,而旋转不变的LBP特征只会存在36种旋转不变的二值模式:
l 利用等价模式来提高旋转不变性
加入了旋转不变性后是不是就万事大吉了呢?其实不是,后来T.Ojala发现效果并不是很好,因为当我们把P和R值取很大时,也就意味着得到的局部二值模式二进制的位数会非常大(P和 R取值越大,邻域内的像素就越多,T.Ojala在论文[2]中已经给出,P的取值为24),这样一来,最后产生的直方图就非常稀疏,不利于分类。而如果p和r取值太小的话,就会使角度的分割精度降低,从而使得后面的分类性能降低。为了解决这些问题,T.Ojala等人在文献[2]中提出了一种叫“等价模式”的方法来降低LBP特征的维数。T.Ojala等人发现,有一类模式在图像中出现的频率及其高,这类模式就是等价模式,它们都有一个特性,就是黑白跳变数量都小于等于2(在图 7中的第一行即为等价模式,其他都为非等价模式)。另外我们也可以推出,在P邻域中,等价模式的个数U为:U=P*(P-1)+2,其他模式都称为非等价模式。等价模式的LBP值就等于二值编码中1的个数,非等价模式的LBP值为P+1,用公式来表示就是:
其中U(LBPp,R)<=2 就表示0,1跳变次数小于等于2。尽管等价模式只占了全部模式的一小部分,但是T.Ojala表明这一小部分等价模式能够刻画90%以上的纹理特征。
l 关于LBP支持多分辨率的分析
我们在图2中可以看出,只要不断改变P和R的大小(即图像处理中常用的所谓“窗口大小”的概念),即可以让LBP具有多分辨率识别的特性,还有一种常见的方法是不改变P和R的大小,而是将图像按某一因子缩放,T.Ojala在会议论文[4]中提出,根据他们实验得出使用前一种方法(及改变窗口大小而非scale图片)会得到更好的效果。当如在[4]在,T.Ojala等人还提出将图像的灰度直方图和LBP特征结合来增强分类的效果,具体的内容可以参考Texture Classification byMulti-Predicate Local Binary Pattern Operators这篇文章^_^。
下面是一些关于LBP“原汁原味”的文章,多看看原作者的文章才是王道,呵呵。
参考文献:
[1]T.Ojala, M.Pietikinen et al. A Comparative Study of Texture Measures with Classification based on Feature Distribution. Pattern Recognition. 1996. Vol.29.pp.51-59.
[2]T.Ojala, M.Pietikinen. Multiresolution Gray-Scale and Rotation InvariantTexture Classification with Local Binary Patterns. Pattern analysis and MachineIntelligence. Vol.24.7.pp.971-986
[3]M.Pietikinen, T.Ojala, and Z.Xu. Rotation-Invariant Texture ClassificationUsing Feature Distributions. Pattern Recognition. 2000. Vol.33.pp.43-52.
[4] T.Maenpaa , M. Pietikinen, and T. Ojala, “Texture Classification byMulti-Predicate Local Binary Pattern Operators,” Proc. 15th Int'l Conf.Pattern Recognition, vol. 3, pp. 951-954, 2000.
Appendix:LBP特征提取流程图
本文的PDF版本,以及涉及到的所有文献和代码可以到下列地址下载:
1、PDF版本以及文献:http://download.csdn.net/detail/ty101/5349816
2、原作者的MATLAB代码:http://download.csdn.net/detail/ty101/5349894
LBP一种用来描述图像纹理特征的算子,该算子由芬兰奥卢大学的T.Ojala等人在1996年提出[1],在2002年时,Timo Ojala等人在PAMI上又发表了一篇关于LBP的文章[2],该文章非常清楚的阐述了多分辨率、灰度尺度不变和旋转不变、等价模式的改进的LBP特征。LBP的核心思想就是:以中心像素的灰度值作为阈值,与他的领域相比较得到相对应的二进制码来表示局部纹理特征。呃,这句话实在有些拗口-_-#还是举例吧,下面我们从最简单的入手,一步一步讲解整个LBP特征(整个LBP特征提取流程请看文章最后的appendix)。
l 初级的LBP计算方法(先撇开多分辨率、灰度尺度不变、旋转不变^_^)
假设我们有一个3*3的窗口,窗口内的值代表每个像素的灰度值,如下所示:
可以看到中心像素点的灰度值为6,我们将这个中心像素点的灰度值与它周围8领域的像素值大小做比较,也就是说我们将7、9、8、7、1、2、5、6这8个数字分别与6做比较,大于6,我们则把右边相应的方格置为1,小于6则置为0。之后我们就得右边的窗口,我们按逆时针方向把这些1和0连起来就得到了所谓的LBP模式:11110001(注意是二进制的),然后将这个数转换为10进制,也就是241。
Tips:扩展后的LBP中的窗口形状
上面所说的版本是Timo Ojala在1996年提出的,在2002年的时候Timo Ojala在PAMI上的文章对上述算法进行了拓展。拓展后的算法可以设置邻域和半径的属性,用P来表示邻域像素点个数,用R来表示半径,上面我们描述的初级版本就是P=8,R=1.0的版本(不考虑插值,后面会详细描述)。下图描述了P,R取不同值时的情形:
注意初级版本[1]的领域是没有表现出插值的思想的(也就是方形邻域),而2002年的PAMI文章[2]是圆形邻域,是涉及到插值的(可以看出,只有对角线的像素需要插值)。其实将方形窗口换成圆形窗口也有利于后面的旋转不变性的实现,后面会详细描述。
Tips:关于LBP的亮度变化鲁棒性以及灰度尺度不变
灰度尺度不变其实很好理解,我们依旧用图1为例子,我们将亮度放大10倍:
可以看到,灰度尺度的变换并没有对最后的局部二值模式产生影响,同样的道理,即使该窗口的9个像素的灰度值出现了亮度的非线性变换,只要中心像素的灰度值与8邻域内像素的灰度值的大小关系不变,那么最终产生的LBP特征就不会改变。但是请注意:要是亮度变换后,中心像素灰度值与周围像素的灰度值大小关系与变换前不一样,那么LBP特征就会随之改变了。例如,图1中的窗口,亮度进行了一次非线性的变化,结果为:
可以看出,右边的局部二值模式已经和图1中的局部二值模式不一样了。
为LBP算子加入旋转不变性
在2000年Pietikinen等人在文章[3]中描述了如何扩展LBP特征,使之具备旋转不变性。下面我们以一个P=8,R=1.0的圆形窗口作为例子,讲解LBP算子的旋转不变性。令中心点的灰度值为gc,8邻域内的8个像素灰度值分别为gi={g0,g1,…,g7},当图像发生旋转时,圆形邻域内的灰度值gi是在以gc为中心R为半径的圆周上运动的。例如我们有一个这样的窗口:
那么把图像逆时针旋转每次45度,枚举出所有可能的取值,得到如下结果:
我们可以发现,只要我们取上述枚举出来的值的最小值,就可以消除旋转带来的影响。例如我们得到一个二进制的LBP值10000011(也就是原图逆时针旋转45度),然后不断对这个二进制进行向右循环移位(加上它本身,总共有8种取值可能),之后取最小结果就是该窗口的LBP值。
Tips:旋转不变的LBP特征也起到了一定的特征将维作用
当p=8,R=1.0的时候,最终会有2^p=2^8=256种取值可能,而旋转不变的LBP特征只会存在36种旋转不变的二值模式:
l 利用等价模式来提高旋转不变性
加入了旋转不变性后是不是就万事大吉了呢?其实不是,后来T.Ojala发现效果并不是很好,因为当我们把P和R值取很大时,也就意味着得到的局部二值模式二进制的位数会非常大(P和 R取值越大,邻域内的像素就越多,T.Ojala在论文[2]中已经给出,P的取值为24),这样一来,最后产生的直方图就非常稀疏,不利于分类。而如果p和r取值太小的话,就会使角度的分割精度降低,从而使得后面的分类性能降低。为了解决这些问题,T.Ojala等人在文献[2]中提出了一种叫“等价模式”的方法来降低LBP特征的维数。T.Ojala等人发现,有一类模式在图像中出现的频率及其高,这类模式就是等价模式,它们都有一个特性,就是黑白跳变数量都小于等于2(在图 7中的第一行即为等价模式,其他都为非等价模式)。另外我们也可以推出,在P邻域中,等价模式的个数U为:U=P*(P-1)+2,其他模式都称为非等价模式。等价模式的LBP值就等于二值编码中1的个数,非等价模式的LBP值为P+1,用公式来表示就是:
其中U(LBPp,R)<=2 就表示0,1跳变次数小于等于2。尽管等价模式只占了全部模式的一小部分,但是T.Ojala表明这一小部分等价模式能够刻画90%以上的纹理特征。
l 关于LBP支持多分辨率的分析
我们在图2中可以看出,只要不断改变P和R的大小(即图像处理中常用的所谓“窗口大小”的概念),即可以让LBP具有多分辨率识别的特性,还有一种常见的方法是不改变P和R的大小,而是将图像按某一因子缩放,T.Ojala在会议论文[4]中提出,根据他们实验得出使用前一种方法(及改变窗口大小而非scale图片)会得到更好的效果。当如在[4]在,T.Ojala等人还提出将图像的灰度直方图和LBP特征结合来增强分类的效果,具体的内容可以参考Texture Classification byMulti-Predicate Local Binary Pattern Operators这篇文章^_^。
下面是一些关于LBP“原汁原味”的文章,多看看原作者的文章才是王道,呵呵。
参考文献:
[1]T.Ojala, M.Pietikinen et al. A Comparative Study of Texture Measures with Classification based on Feature Distribution. Pattern Recognition. 1996. Vol.29.pp.51-59.
[2]T.Ojala, M.Pietikinen. Multiresolution Gray-Scale and Rotation InvariantTexture Classification with Local Binary Patterns. Pattern analysis and MachineIntelligence. Vol.24.7.pp.971-986
[3]M.Pietikinen, T.Ojala, and Z.Xu. Rotation-Invariant Texture ClassificationUsing Feature Distributions. Pattern Recognition. 2000. Vol.33.pp.43-52.
[4] T.Maenpaa , M. Pietikinen, and T. Ojala, “Texture Classification byMulti-Predicate Local Binary Pattern Operators,” Proc. 15th Int'l Conf.Pattern Recognition, vol. 3, pp. 951-954, 2000.
Appendix:LBP特征提取流程图
- 顶
- 0
- 踩
转载:LBP的初步理解的更多相关文章
- (转载)从Java角度理解Angular之入门篇:npm, yarn, Angular CLI
本系列从Java程序员的角度,带大家理解前端Angular框架. 本文是入门篇.笔者认为亲自动手写代码做实验,是最有效最扎实的学习途径,而搭建开发环境是学习一门新技术最需要先学会的技能,是入门的前提. ...
- javascript 原型及原型链的初步理解
最近折腾了好久,终于是把js里面的原型和原型链做了个初步的理解: 在这里,我打个比喻: 我(child),我妈constructor(构造函数)生了我:别人问我老妈跟谁生的我,于是此时我妈会指向我爸爸 ...
- Spring学习笔记--环境搭建和初步理解IOC
Spring框架是一个轻量级的框架,不依赖容器就能够运行,像重量级的框架EJB框架就必须运行在JBoss等支持EJB的容器中,核心思想是IOC,AOP,Spring能够协同Struts,hiberna ...
- Graph Cuts初步理解
一些知识点的初步理解_8(Graph Cuts,ing...) Graph cuts是一种十分有用和流行的能量优化算法,在计算机视觉领域普遍应用于前背景分割(Image segmentation).立 ...
- 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感
关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...
- springBoot(1)---springboot初步理解
springboot初步理解 在没有用SpringBoot之前,我们用spring和springMVC框架,但是你要做很多比如: (1)配置web.xml,加载spring和spring mvc 2) ...
- Mysql加锁过程详解(7)-初步理解MySQL的gap锁
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
- 关于THINKPHP5模型关联的初步理解
初步理解的意思是,使用最常用的关联模型,然后可以正常运行 还是打个比方 文章表 和文章分类表 一个文章分类可以有多个文章 所以 文章分类模型和文章建立 hasMany的关联 而文章和文章分类表则 ...
- spfa+差分约束系统(C - House Man HDU - 3440 )+对差分约束系统的初步理解
题目链接:https://cn.vjudge.net/contest/276233#problem/C 题目大意:有n层楼,给你每个楼的高度,和这个人单次的最大跳跃距离m,两个楼之间的距离最小是1,但 ...
随机推荐
- Windows XP PRO SP3 - Full ROP calc shellcode
/* Shellcode: Windows XP PRO SP3 - Full ROP calc shellcode Author: b33f (http://www.fuzzysec ...
- CentOS linux 下eclipse+cdt编译报undefined reffrece to *
- 如何让DIV在窗口水平和垂直居中
本实例以新文档开始 2 先放置一个div,并且设置class名为aa,赋予它css属性: width:0;height:0;position:fixed;left:50%;rigth:50%;top: ...
- ros与下位机通信常用的c++ boost串口应用
一.首先移植c++ boost 库: 1. 先去 Boost官网 下载最新的Boost版本, 我下载的是boost_1_6_0版本, 解压. 2. 进入解压后目录: cd boost_1_6_0, 执 ...
- [开发笔记]-页面切图、CSS前端设计、JS
这两天在学习页面的切图,样式设计,把学习过程中注意的地方记录下来. 一. input输入框点击时去掉外边框 一般在IE,firefox下,设置 border:0 none; 即可.但在chrome下, ...
- Java并发编程(三)后台线程(Daemon Thread)
后台线程,守护线程(Daemon Thread) 所谓的后台线程,就是指这种线程并不属于程序中不可或缺的部分,因此当所有的非后台线程结束时,程序也就终止了,同时会杀死进程中的所有后台线程.通过setD ...
- JavaScript 数组方法和属性
一. 数组对象的操作方法 1. 数组的创建 2.prototype属性 返回对象原型的引用,prototype属性时object共有的. objectName.prototype,其中objectNa ...
- HTTP状态代码
1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码. 100 (继续) 请求者应当继续提出请求. 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101 (切换协议) 请求 ...
- linux命令每日一练习-ls
ls列出目录下所有文件 ls -l列出具体信息. drwxr-xr-x 9 root root 4096 2011-11-01 tomcat6.0.32 第一个d表示是目录,如果是-表示普 ...
- color 的一些处理
1.UIImage转换成UIcolor cell.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@" ...