纹理特征提取方法:LBP, 灰度共生矩阵

纹理特征提取方法:LBP, 灰度共生矩阵

在前面的博文《图像纹理特征总体简述》中,笔者总结了图像纹理特征及其分类。在这里笔者对其中两种算法介绍并总结。

参考网址: 《纹理特征提取》 《【纹理特征】LBP 》 《灰度共生矩阵(GLCM)理解》 《灰度共生矩阵的理解》 《图像的纹理特征之灰度共生矩阵 》

参考论文: 《基于灰度共生矩阵提取纹理特征图像的研究》——冯建辉 《灰度共生矩阵纹理特征提取的Matlab实现》——焦蓬蓬

一. LBP

1. 算法简介

LBP方法(Local binary patterns, 局部二值模式)是一种用来描述图像局部纹理特征的算子;它的作用是进行特征提取,提取图像的局部纹理特征。 LBP是一个计算机视觉中用于图像特征分类的一个方法,用于纹理特征提取。后来LBP方法与HOG特征分类器与其他机器学习算法联合使用。

2. 算法原理

LBP算法的核心思想,是以某个像素点为中心,与其邻域像素点共同计算。关于邻域像素点的选择方法,其实并不唯一:

  • 原始的LBP算子定义的是在3*3的窗口内,以窗口中心像素为阈值,将相邻的8个像素点灰度值与其进行比较;
  • 后来的LBP算法也将相邻8个像素点的位置改成了环形邻域内8个点(也可能是环形邻域多个点),进行顺时针或逆时针的比较。

这里选择环形邻域的方法进行说明: 窗口中心的像素点作为中心,该像素点的像素值作为阈值。然后将周围8个像素点的灰度值与该阈值进行比较,若周围某像素值大于中心像素值,则该像素点位置被标记为1;反之,该像素点标记为0。 如此这样,该窗口的8个点可以产生8位的无符号数,这样就得到了该窗口的LBP值,该值反应了该窗口的纹理信息。如下图所示:

图中,中心像素点的像素值作为阈值,其值v = 3;周围邻域8个像素值中,有3个比阈值小的像素点置0,5个比阈值大的像素点置1。

LBP算法的计算公式如下:

3. 算法流程

LBP纹理特征向量,一般以图像分块LBP直方图表示。具体步骤如下:

  • 图像划分若干为N × N的图像子块(如16 × 16),计算每个子块中每个像素的LBP值;
  • 对每个子块进行直方图统计,得到N × N图像子块的直方图;
  • 对所有图像子块的直方图进行归一化处理;
  • 连接所有子块的归一化直方图,便得到了整幅图像的纹理特征。

得到了整幅图像的LBP纹理特征后,便可以利用SVM或者其他机器学习算法进行分类了。

4. 算法源码

这两天笔者将会对源码进行测试封装,以后会上传到我的GitHub网站上。

二. 灰度共生矩阵(GLCM)

1. 算法简介

灰度共生矩阵法(GLCM, Gray-level co-occurrence matrix),就是通过计算灰度图像得到它的共生矩阵,然后透过计算该共生矩阵得到矩阵的部分特征值,来分别代表图像的某些纹理特征(纹理的定义仍是难点)。灰度共生矩阵能反映图像灰度关于方向、相邻间隔、变化幅度等综合信息,它是分析图像的局部模式和它们排列规则的基础。 对于灰度共生矩阵的理解,需要明确几个概念:方向,偏移量和灰度共生矩阵的阶数。

  • 方向:一般计算过程会分别选在几个不同的方向来进行,常规的是水平方向0°,垂直90°,以及45°和135°;
  • 步距d:中心像元(在下面的例程中进行说明);
  • 灰度共生矩阵的阶数:与灰度图像灰度值的阶数相同,即当灰度图像灰度值阶数为N时,灰度共生矩阵为N × N的矩阵;

2. 算法实现步骤

(1) 提取灰度图像

计算纹理特征第一步,就是将多通道的图像(一般指RGB图像)转换为灰度图像,分别提取出多个通道的灰度图像。 纹理特征是一种结构特征,使用不同通道图像得到的纹理特征都是一样的,所以可以任意选择其一。

(2) 灰度级量化

一般在一幅图像中的灰度级有256级,从0–255。但在计算灰度共生矩阵时我们并不需要256个灰度级,且计算量实在太大,所以一般分为8个灰度级或16个灰度级。 而且当分成8个灰度级时,如果直接将像素点的灰度值除以32取整,会引起影像清晰度降低,所以进行灰度级压缩时,首先我们会将图片进行直方图均衡化处理,增加灰度值的动态范围,这样就增加了影像的整体对比效果。 注:笔者后文中的例子中,为了简要说明,所以灰度等级简单设置为4。

(3) 计算特征值的参数选择

计算特征值前,先选择计算过程中的一些参数:

  • 滑动窗口尺寸:一般选择5×5或7×7的滑动窗口进行计算特征值;
    • 注:后文笔者选择了6×6的窗口矩阵,只是随意进行举例说明,一般还是选维度为5或7的滑动窗口矩阵;
  • 步距d:一般选择d = 1,即中心像素直接与其相邻像素点做比较运算;
  • 方向选择:计算灰度共生矩阵的方向一般为0°,45°,90°,135°四个方向;求出四个方向矩阵的特征值后,可以通过计算四个特征值的平均值作为最终特征值共生矩阵;
    • 注:如果选择其他方向,则在每个方向上都会得到相当繁多的纹理特征,不利于使用的效率。

(4) 纹理特征值的计算与纹理特征影像生成

下面分部且适当的使用一些例子说明计算过程:

A. 单个窗口的灰度共生矩阵计算

为了达到简单说明计算纹理特征值的目的,笔者此处做简要的假设:灰度被分为4阶,灰度阶从0–3;窗口大小为6 × 6; 窗口A的灰度矩阵A如下:

窗口B的灰度矩阵B如下:

此处以左上角元素为坐标原点,原点记为(1, 1);以此为基础举例,第四行第二列的点记为(4, 2);

情景1:d = 1,求0°方向矩阵A的共生矩阵: 则按照0°方向(即水平方向从左向右,从右向左两个方向),统计矩阵值(1, 2),则如下图所示:

此时满足矩阵值(1, 2)统计条件的值,共有8个,所以该窗口对应的GLCM统计矩阵的(1, 2)位置元素的值即为8。若统计矩阵值(3, 0),则如下图所示:

此时满足矩阵值(3, 0)统计条件的值,共有7个,所以该窗口对应的GLCM统计矩阵的(1, 2)位置元素的值即为7。又由于此例设定的灰度级只有4级,所以灰度共生矩阵GLCM是一个4×4的矩阵。 最后的GLCM 4 × 4统计矩阵结果如下:

情景2:d = 1,求45°方向矩阵A的共生矩阵: 按照情景1,同理可得此时的统计矩阵结果如下:

情景3:d = 1,求0°与45°方向矩阵B的共生矩阵: 与前面同理,可以得到矩阵B的统计及矩阵结果如下:

矩阵A, B的其余90°、135°矩阵与上面同理,所以笔者偷懒略去。

这样,我们就已经计算得到了单个窗口的灰度共生矩阵的各个方向的矩阵,下面就要用刚才算出的矩阵计算灰度共生矩阵特征值。 用P表示灰度共生矩阵的归一化频率矩阵,其中i, j表示按照某方向同时出现于两个像素的某两个级别的灰度值,所以P(i, j)表示满足这种情况的两个像素出现的概率。 以上述情景2中的矩阵为例: 原矩阵为:

归一化后,矩阵形式变为:

B. 单个窗口的灰度共生矩阵特征值的计算

灰度共生矩阵理论的前辈Haralick等人用灰度共生矩阵提出了14中特征值,但由于灰度共生矩阵的计算量很大,所以为了简便,我们一般采用四个最常用的特征来提取图像的纹理特征:能量、对比度、相关度、熵

a. 能量(角二阶距)

能量是灰度共生矩阵各元素的平方和,又被称角二阶距。它是图像纹理灰度变化均一的度量,反映了图像灰度分布均匀程度和纹理粗细程度。

b. 对比度

对比度是灰度共生矩阵主对角线附近的惯性矩,它体现矩阵的值如何分布,反映了图像的清晰度和纹理沟纹的深浅。

c. 相关度
d. 熵

求出该灰度共生矩阵各个方向的特征值后,再对这些特征值进行均值和方差的计算,这样处理就消除了方向分量对纹理特征的影响。

C. 滑动窗口的移动

一个滑动窗口计算结束后,该窗口就可以移动一个像素点,形成另一个小窗口图像,重复进行上一步的计算,生成新窗口图像的共生矩阵和纹理特征值; 以此类推,滑动窗口遍历完所有的图像像素点后,整个图像就形成了一个由纹理特征值构成的一个纹理特征值矩阵。

之后,就可以将这个纹理特征值矩阵转换成纹理特征图像。

3. 算法源码

笔者已经对源码进行测试了封装,并上传到了笔者的GitHub网站上。 GitHub:https://github.com/upcAutoLang/GLCM-OpenCV

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏专知

【干货面经】常见面试之机器学习算法思想简单梳理

【导读】这是早期一篇关于机器学习面试方面的干货总结。到今天也值得一看。请大家看阅。 作者:tornadomeet 出处:http://www.cnblogs....

97680
来自专栏机器之心

资源 | Distill详述「可微图像参数化」:神经网络可视化和风格迁移利器!

图像分类神经网络拥有卓越的图像生成能力。DeepDream [1]、风格迁移 [2] 和特征可视化 [3] 等技术利用这种能力作为探索神经网络内部原理的强大工具...

9420
来自专栏数据派THU

卷积神经网络失陷,CoordConv来填坑(附代码&视频)

本文讲述了卷积神经网络在涉及坐标建模等方面的缺陷,但是提出了CoordConv 作为解决方案。

9120
来自专栏机器学习从入门到成神

机器学习之从极大似然估计到最大熵原理以及EM算法详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

44610
来自专栏数据科学与人工智能

【数学应用】机器学习常用最优化算法小结

本文主要是从通俗直观的角度对机器学习中的无约束优化算法进行对比归纳,详细的公式和算法过程可以看最后附的几个链接,都是干货。 机器学习基本概念 统计机器学...

36360
来自专栏机器之心

卷积神经网络「失陷」,CoordConv来填坑

Uber 利用卷积神经网络解决许多方面的问题,其中就包括坐标变换。从自动驾驶汽车的设计到路标的自动检测、再到地图的绘制,Uber 都需要使用卷积网络完成坐标变换...

14830
来自专栏大数据文摘

超实用总结:AI实践者需要用到的10个深度学习方法

13640
来自专栏机器之心

CVPR 2018 | 华中科技大学提出多向文本检测方法:基于角定位与区域分割

选自arXiv 作者:Pengyuan Lyu等 机器之心编译 参与:Nurhachu Null、李泽南 在计算机视觉的应用场景里,对图像中的文本进行准确识别是...

39860
来自专栏人工智能LeadAI

TensorFlow从1到2 | 第一章 消失的梯度

上一主题 《TensorFlow从0到1》介绍了人工神经网络的基本概念与其TensorFlow实现,主要基于浅层网络架构,即只包含一个隐藏层的全连接(FC,Fu...

37950
来自专栏SIGAI学习与实践平台

理解过拟合

小明是个机器学习爱好者,他很喜欢吃蛋糕。有一天他突然想到:能不能用蛋糕的直径来预测蛋糕的价格。于是他定了各种不同尺寸的蛋糕,然后把尺寸和价格的数据记录起来,接着...

22360

扫码关注云+社区

领取腾讯云代金券