zoukankan      html  css  js  c++  java
  • 【计算机视觉】纹理特征之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.

    AppendixLBP特征提取流程图

    本文的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.

    AppendixLBP特征提取流程图

  • 相关阅读:
    Palindrome Partitioning
    triangle
    Populating Next Right Pointers in Each Node(I and II)
    分苹果(网易)
    Flatten Binary Tree to Linked List
    Construct Binary Tree from Inorder and Postorder Traversal(根据中序遍历和后序遍历构建二叉树)
    iOS系统navigationBar背景色,文字颜色处理
    登录,注销
    ios 文字上下滚动效果Demo
    经常崩溃就是数组字典引起的
  • 原文地址:https://www.cnblogs.com/huty/p/8517459.html
Copyright © 2011-2022 走看看