LBP(local banary patter)是一种非常经典的用来描述图像局部纹理特征的算子。

1,基本LBP

LBP方法自1994年提出,此后就作为一个有效的纹理特征,不断的被人使用和改进。LBP非常简单,也非常有效。

左边的图是从一个图片上拿下来的3*3矩阵,矩阵上的值就是像素值,现在我们要计算的中间那个点的LBP。除了它此外的8个点依次与中间点比较,比它(也就是15)大的记成1,比它小的记成0,然后我们就得到右面的图片。然后我们选定一个起始点-这个图片选的是左上角第一个点,然后按照顺时针方向得到一个二进制串10011010,转换为十进制则为154。到此,我们得到了中间点的LBP值--154。对整个图片的所有点都这样处理,也就是以它为中心与附近的8个点相比较,这样就得到整个图所有点的LBP值。那么得到这么个与源图像大小相等的LBP值矩阵有什么用呢?通常我们统计它的直方图,得到一个直方图矩阵向量,然后每一个图片对应一个直方图向量,这个直方图向量就是此图片的一个特征。我们由两个图像的直方图向量从而得到它们的相似度,从而来分类。

2, LBP均匀模式LBP (uniform LBP)

均匀模式就是一个二进制序列从0到1或是从1到0的变过不超过2次(这个二进制序列首尾相连)。比如:10100000的变化次数为3次所以不是一个uniform pattern。所有的8位二进制数中共有58个uniform pattern.为什么要提出这么个uniform LBP呢,因为研究者发现他们计算出来的大部分值都在这58种之中,所以他们把值分为59类,58个uniform pattern为一类,其它的所有值为第59类。这样直方图从原来的256维变成59维。

3,旋转不变模式LBP

旋转不变模式LBP能够在图片发生一定的倾斜时也能得到相同的结果。它的定义可以看下图:

我们看到中心点的邻居不再是它上下左右的8个点(补充一句,不一定非要是3*3的邻域,这个自己定,但是邻域大了意味着直方图向量维度的增加),而是以它为圆心的一个圈,规定了这个圆的半径和点的个数,就可以求出各个点的坐标,但是点的坐标不一定是整数,如果是整数那么这个点的像素值就是对应点的值,如果不是整数,就用差值的方式得到。

其他基于LBP的算法

1,MBP

将整个邻域内的所有点的中值作为阈值进行比较,中值不是平局值哦,是所有的值按照从小到大排列,最中间的那个。话说这个MBP可以用matlab的一个函数实现:medfilt2

2,

利用邻域内所有点的平局值作为阈值。

3,

第三种不是在阈值上做改动,而是将大图片切分成小图片,然后再小图片上用LBP方法,然后把小些小图片的直方图矩阵连接起来,成为大图的特征。为什么这么做呢?因为很明显的LBP 直方图会丢失局部信息,比如得到一个值为100那么不管你这个值是从哪里得到的--比如人脸,不管是眼睛处得到这个值还是鼻子处得到,应该不管,都放到lable=100这里。

-----------------------------------------------------------------------------------------------------

在这里列出那58个uniform patterns.

00000000,0
00000001,1
00000010,2
00000011,3
00000100,4
00000110,6
00000111,7
00001000,8
00001100,12
00001110,14
00001111,15
00010000,16
00011000,24
00011100,28
00011110,30
00011111,31
00100000,32
00110000,48
00111000,56
00111100,60
00111110,62
00111111,63
01000000,64
01100000,96
01110000,112
01111000,120
01111100,124
01111110,126
01111111,127
10000000,128
10000001,129
10000011,131
10000111,135
10001111,143
10011111,159
10111111,191
11000000,192
11000001,193
11000011,195
11000111,199
11001111,207
11011111,223
11100000,224
11100001,225
11100011,227
11100111,231
11101111,239
11110000,240
11110001,241
11110011,243
11110111,247
11111000,248
11111001,249
11111011,251
11111100,252
11111101,253
11111110,254
11111111,255

十进制数位:

[0, 1, 2, 3, 4, 6, 7, 8, 12, 14, 15, 16, 24, 28, 30, 31, 32, 48, 56, 60, 62, 63, 64, 96, 112, 120, 124, 126, 127, 128, 129, 131, 135, 143, 159, 191, 192, 193, 195, 199, 207, 223, 224, 225, 227, 231, 239, 240, 241, 243, 247, 248, 249, 251, 252, 253, 254, 255]

也谈LBP的更多相关文章

  1. LBP特征 学习笔记

    这几天一直在做人脸识别的项目,有用到LBP特征,但是毫无头绪,师姐这几天也比较忙,没有时间来指导我,随自己找相应的介绍LBP的博文来看,现在总算有了一个大体的思路了,就写下来吧 注:参考博文: 目标检 ...

  2. DeepFace--Facebook的人脸识别(转)

    DeepFace基本框架 人脸识别的基本流程是: detect -> aligh -> represent -> classify 人脸对齐流程 分为如下几步: a. 人脸检测,使用 ...

  3. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  4. 从I/O复用谈epoll为什么高效

    上一篇文章中,谈了一些网络编程的基本概念.在现实使用中,用的最多的就是I/O复用了,无非就是select,poll,epoll 很多人提到网络就说epoll,认为epoll效率是最高的.单纯的这么认为 ...

  5. 浅谈我对DDD领域驱动设计的理解

    从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决. 比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能够在线上也能销售自己的产品 ...

  6. 谈一下关于CQRS架构如何实现高性能

    CQRS架构简介 前不久,看到博客园一位园友写了一篇文章,其中的观点是,要想高性能,需要尽量:避开网络开销(IO),避开海量数据,避开资源争夺.对于这3点,我觉得很有道理.所以也想谈一下,CQRS架构 ...

  7. 浅谈 LayoutInflater

    浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...

  8. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  9. 浅谈SQL注入风险 - 一个Login拿下Server

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

随机推荐

  1. Return 和 Break 的区别

    前段日子发布的负面情绪太多了,哦哦,其实我需要的是努力,努力提高自己的真实能力.经历了好多的鄙视否定,我已经没有最初那么敏感,心态平和了许多.我没有借口说基础不好了,一年了,要努力的话,那么我应该不会 ...

  2. Android AVD创建及设置中各参数详解

    设置AVD时有些参数比较模糊,特地找了篇文章,大家参考下! 本文根据如下的模拟器安装做一些解释: Name:自定义虚拟的名称,不能有空格或者其他非法字符,否则不能创建,即Creat AVD不能高亮点击 ...

  3. 访问修饰符private

    private(C# 参考) private 关键字是一个成员访问修饰符. 私有访问是允许的最低访问级别. 私有成员只有在声明它们的类和结构体中才是可访问的,如下例所示: class Employee ...

  4. [OpenGL ES 03]3D变换:模型,视图,投影与Viewport

    [OpenGL ES 03]3D变换:模型,视图,投影与Viewport 罗朝辉 (http://blog.csdn.net/kesalin) 本文遵循“署名-非商业用途-保持一致”创作公用协议 系列 ...

  5. JMS的常用方法

    import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; impor ...

  6. Educational Codeforces Round 15 Cellular Network

    Cellular Network 题意: 给n个城市,m个加油站,要让m个加油站都覆盖n个城市,求最小的加油范围r是多少. 题解: 枚举每个城市,二分查找最近的加油站,每次更新答案即可,注意二分的时候 ...

  7. HTML番外整理

    经过一周的个人项目与一周的团体项目,我学到了一些有用的内容,特分享如下: 一.视频 1.对在线视频的添加 在各大网站打开一个视频,在下方的分享找到HTML代码,然后复制HTML代码到自己的代码中. 2 ...

  8. linux命令(7)killall

    killall命令: Linux系统中的killall命令用于杀死指定名字的进程(kill processes by name).我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀 ...

  9. JavaScript事件基础知识总结【思维导图】

    另外附上来自Nicholas C.Zakas<JavaScript高级程序设计 第3版>中的跨浏览器兼容EventUtil对象. var EventUtil = { //注册事件 addH ...

  10. laravel 删除一条migration后要执行composer命令

    Laravel 删除一条migration 字数29 阅读30 评论0 喜欢0 如果迁移已经执行,先回滚php artisan migrate:rollback 然后删除迁移文件,运行composer ...