原文链接:https://blog.csdn.net/qq_37059483/article/details/78292869
    最近在研究机器学习相关内容,后面会尽量花时间整理成一个系列的博客,然后朋友让我帮他实现一种基于 SVR 支持向量回归的图像质量评价方法,然而在文章的开头竟然发现
    灰度共生矩阵这个陌生的家伙,于是便有此文。

    灰度共生矩阵的原理 - 图1

    主要参考博客 1:http://blog.csdn.net/jialeheyeshu/article/details/51337225
    主要参考博客 2:http://blog.csdn.net/guanyuqiu/article/details/53117507
    主要参考博客 3:http://www.cnblogs.com/rong86/p/3695621.html
    主要参考博客 4:http://blog.csdn.net/lingtianyulong/article/details/53032034

    1. 灰度共生矩阵生成原理
        灰度共生矩阵 (GLDM) 的统计方法是 20 世纪 70 年代初由 R.Haralick 等人提出的,它是在假定图像中各像素间的空间分布关系包含了图像纹理信息的前提下,提出的具有广泛性的纹理分析方法。

    灰度共生矩阵被定义为从灰度为 i 的像素点出发,离开某个固定位置(相隔距离为 d,方位为)的点上灰度值为的概率,即,所有估计的值可以表示成一个矩阵的形式,以此被称为灰度共生矩阵。对于纹理变化缓慢的图像,其灰度共生矩阵对角线上的数值较大;而对于纹理变化较快的图像,其灰度共生矩阵对角线上的数值较小,对角线两侧的值较大。由于灰度共生矩阵的数据量较大,一般不直接作为区分纹理的特征,而是基于它构建的一些统计量作为纹理分类特征。Haralick 曾提出了 14 种基于灰度共生矩阵计算出来的统计量:即:能量、熵、对比度、均匀性、相关性、方差、和平均、和方差、和熵、差方差、差平均、差熵、相关信息测度以及最大相关系数。

    在网上看了很多灰度共生矩阵生成的例子感觉都没有说明白,要不就直接上结果要不就给一堆看不懂的代码和公式,后来看了 matlab 中的介绍就明白了,其实很简单,仔细把下面的看三遍就理解怎么来的了!(我是第三篇看明白的,当时很紧张,相信你们没问题)
      下图显示了如何求解灰度共生矩阵,以(1,1)点为例,GLCM(1,1)值为 1 说明只有一对灰度为 1 的像素水平相邻。GLCM(1,2)值为 2,是因为有两对灰度为 1 和 2 的像素水平相邻。(MatLab 说明文档)
    灰度共生矩阵的原理 - 图2

    GLCM 表其实就是所有像素可能的组合,比如,GLCM(1,1)就是 I 中像素值为 1 和 1 的组合,GLCM(4,5)就是 I 中像素 4 和像素 5 的组合,GLCM(i,j)的值呢就是 I 中像素为 i, 像素为 j 的有有多少和相邻的成对点。这个相邻有个规则:就是 f(x,y),f(x+a,y+b) 相邻,就是只有 x 相隔 a 的单位,y 相隔 b 个单位,我们认为是相邻的。
    平时我们说相邻:B 点在 A 点右边,其实就是这里的 a=1,b=0, 也就是 f(x,y) 和 f(x+1,y+0) 相邻。
    于是就有了:
    a=1,b=0 时我们就说水平相邻:也就是 0 度的时候
    a=1,b=1 时我们就说对角相邻,也就是 45 度的时候
    a=-1,b=1 时 即 135 度
    其他角度类似。
    在 a=1,b=0 时:GLCM(1,1)=1;其实就是 I 中有几个 1 和 1 相邻(1 个)(按上面的规则)GLCM(1,2)=2,几个 1 和 2 相邻(2 个)。ok!
    后面好多的性质,都是在把这个矩阵计算出来之后再在这个基础上运算的,那些就不难了!

    附加理解 2:
    共生矩阵用两个位置的像素的联合概率密度来定义,它不仅反映亮度的分布特征,也反映具有同样亮度或者接近亮度的像素之间的位置分布特性,是有关图像亮度变化的二阶统计特征。它是定义一组纹理特征的基础。

    由于纹理是由灰度在空间位置上反复出现而形成的,因而在图像空间中像个某距离的两像素之间会存在一定的灰度关系,即图像中灰度的空间相关特性。灰度共生矩阵就是一种通过研究灰度的空间相关特性来描述纹理的常用方法。

    灰度直方图是对图像上单个像素具有某个灰度进行统计的结果,

    而灰度共生矩阵是对图像上保持某距离的两像素分别具有某灰度的状况进行统计得到的。

    取图像 (N×N) 中任意一点 (x,y)及偏离它的另一点 (x+a,y+b),设该点对的灰度值为(g1,g2)。令点(x,y) 在整个画面上移动,则会得到各种 (g1,g2)值,设灰度值的级数为 k,则(g1,g2) 的组合共有 k^2; 种。对于整个画面,统计出每一种(g1,g2)值出现的次数,然后排列成一个方阵,在用(g1,g2) 出现的总次数将它们归一化为出现的概率 P(g1,g2),这样的方阵称为灰度共生矩阵。距离差分值(a,b) 取不同的数值组合,可以得到不同情况下的联合概率矩阵。(a,b)取值要根据纹理周期分布的特性来选择,对于较细的纹理,选取(1,0)、(1,1)、(2,0)等小的差分值。  当 a=1,b=0 时,像素对是水平的,即 0 度扫描;当 a=0,b=1 时,像素对是垂直的,即 90 度扫描;当 a=1,b=1 时,像素对是右对角线的,即 45 度扫描;当 a=-1,b=-1 时,像素对是左对角线,即 135 度扫描。
    这样,两个象素灰度级同时发生的概率,就将 (x,y)的空间坐标转化为 “灰度对” (g1,g2)的描述,形成了灰度共生矩阵。(百度百科)
    一幅图象的灰度共生矩阵能反映出图象灰度关于方向、相邻间隔、变化幅度的综合信息,它是分析图象的局部模式和它们排列规则的基础。

    感觉差不多了吧!

    1. 灰度共生矩阵特征量(字写的不好,请见谅)

    (上述公式的来源要仔细推敲一番,在这里我的目的主要不是这个,所以咩有很详细的写出来,欢迎交流留言)
    https://blog.csdn.net/qq_37059483/article/details/78292869