• 也谈LBP


    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]

  • 相关阅读:
    Leetcode 1005. K 次取反后最大化的数组和(终于解决)
    Leetcode 1071. 字符串的最大公因子
    Leetcode 1002. 查找共用字符
    Leetcode 1053. 交换一次的先前排列(牛,做出来了)
    Leetcode 1046. 最后一块石头的重量
    Qt 将QGraphicsView视图界面保存为图片(转)
    dos中的清屏命令
    seurat单细胞数据分析实现 DimHeatmap函数
    R语言中将数据框或者矩阵的数据转换为一行
    R语言中rnorm、runif生成符合正太分布和均匀分布的随机数
  • 原文地址:https://www.cnblogs.com/retrieval/p/3285305.html
Copyright © 2020-2023  润新知