灰度共生矩阵GLCM及其matlab实现

原创 2015年11月18日 10:50:20

Prerequisites

概念

计算方式

对于精度要求高且纹理细密的纹理分布,我们取像素间距为d=1,以下是方向的说明:

我们来看,matlab内置工具箱中的灰度共生矩阵的生成函数graycomatrix(gray-level co-occurrence matrix)对方向的说明:


这里写图片描述

如上图所示,方向是在每一个像素点(pixel of interest)的邻域(当然,边界点除外)中获得的,只不过这里的坐标系变为了:


这里写图片描述

  • δ=(0,±1)为水平方向扫描,也即θ=0orθ=180
  • δ=(±1,0)为垂直扫描(θ=90orθ=90);
  • δ=(1,1),δ=(1,1)45135扫描;
  • δ=(1,1),δ=(1,1)45扫描。

一旦像素间距离d以及像素间空间位置关系δ确定,即可生成灰度共生矩阵。

GLCM所表示的是纹理图像的某些统计特性,所谓统计,通俗地讲就是累计某种情况出现的次数,用这一次数除以总的情况数,即可得其统计意义上的概率。

我们来统计灰度级2与2在-45度和135度方向上(也即δ=(1,1)或者δ=(1,1))出现的次数,如图所示,共出现九次,在两个方向上即是18次。


这里写图片描述


这里写图片描述

matlab

matlab相关工具箱函数

使用灰度共生矩阵(GLCM)描述和提取图像纹理特征,是一个强大且流行的工具,自然matlab工具箱会提供相应的函数——graycomatrix

给出一个图像矩阵,设置一些参数,得到其灰度共生矩阵,这就是函数的基本用法:

[glcm, SI] = graycomatrix(I, ...)

主要的参数有二个,分别是

  1. NumLevels(灰度级数)

最终glcm的size是NumLevels*NumLevels

  1. Offset(方向[0, 1; -1, 1; -1, 0; -1, -1]):

[0, 1]中的1表示的偏移数(offset),当然也可以取2或者更多,如上文所说,对于精度要求高且图像纹理本身即很丰富的图像来说,为了更精细地刻画,我们取偏移量(offset)为1

我们将原始I转换为SI,对SI计算GLCM,SI中元素的值介于[1, NumLevels]之间。

I = [ 
    1 1 5 6 8 8; 
    2 3 5 7 0 2; 
    0 2 3 5 6 7
    ];

[glcm, SI] = graycomatrix(I, 'NumLevels', 9, 'G', [])
% 'Offset'的default值为`[0, 1]`
glcm =

     0     0     2     0     0     0     0     0     0
     0     1     0     0     0     1     0     0     0
     0     0     0     2     0     0     0     0     0
     0     0     0     0     0     2     0     0     0
     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     2     1     0
     0     0     0     0     0     0     0     1     1
     1     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     1

SI =

     2     2     6     7     9     9
     3     4     6     8     1     3
     1     3     4     6     7     8

demo

这里先写一个demo,稍微有点难懂的地方在于灰度共生矩阵的计算方式,然后是一些编程上的循环判断。其他方向的情况还未考虑(在第三和第四层循环的地方可能会略有不同),以及将其封装成一个函数的操作还是留待以后吧:

clear, clc
P = [ 0 1 2 0 1 2 
   1 2 0 1 2 0
   2 0 1 2 0 1
   0 1 2 0 1 2
   1 2 0 1 2 0
   2 0 1 2 0 1];
[r, c] = size(P);
P_u = unique(P);        % 去重,得到所有的灰度级
n = length(P_u);        % 不同灰度级的个数
G = zeros(n, n);        % 初始化灰度共生矩阵为全0矩阵,

%% 四层循环,最外层的两层循环用来为GLCM的各个位置赋值
% 内层的两层循环时遍历原始图像矩阵,累计符合某一对应关系的的情况出现的次数

for p = 1:n,
    for q = 1:n,

        cnt = 0;            % GLCM刻画的是灰度图像像素的统计特性,在matlab中通过次数的统计计算得到
        for i = 1:r,
            for j = 1:c,
                if  (j+1) <= c && ((P(i, j) == p && P(i, j+1) == q) || P(i, j) == q && P(i, j+1) == p),
                    cnt = cnt + 1;
                end
            end
        end
        G(p, q) = cnt;
    end
end
G   

References

[1] <图像特征提取——灰度共生矩阵(GLCM)>

版权声明:本文为博主原创文章,未经博主允许不得转载。

图像特征提取——灰度共生矩阵(GLCM)

灰度共生矩阵(Gray-level Co-occurrence Matrix,GLCM)
  • light_lj
  • light_lj
  • 2014年05月18日 00:20
  • 10259

灰度共生矩阵(GLCM)理解

灰度共生矩阵 灰度共生矩阵法,顾名思义,就是通过计算灰度图像得到它的共生矩阵,然后透过计算这个共生矩阵得到矩阵的部分特征值,来分别代表图像的某些纹理特征(纹理的定义仍是难点)。灰度共生矩...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

【图像算法】图像特征:GLCM

SkySeraph Aug 27th 2011  HQU Email:zgzhaobo@gmail.com    QQ:452728574 Latest Modified Date...

纹理特征分析的灰度共生矩阵(GLCM)

纹理分析是对图像灰度(浓淡)空间分布模式的提取和分析。纹理分析在遥感图像、X射线照片、细胞图像判读和处理方面有广泛的应用。关于纹理,还没有一个统一的数学模型。它起源于表征纺织品表面性质的纹理概念,可以...
  • lskyne
  • lskyne
  • 2013年03月11日 14:22
  • 36219

graycoprops 计算 灰度共生矩阵(GLCM)的特征

matlab 函数名称: graycoprops() 功                   能: 计算灰度共生矩阵(GLCM)的各个特征值+ 句法:     stats = graycopro...

灰度共生矩阵(GLCM)理解

灰度共生矩阵 灰度共生矩阵法,顾名思义,就是通过计算灰度图像得到它的共生矩阵,然后透过计算这个共生矩阵得到矩阵的部分特征值,来分别代表图像的某些纹理特征(纹理的定义仍是难点)。灰度共生矩阵能反映...

graycomatrix 计算(图像)灰度共生矩阵(CLCM)

matlab函数: graycomatrix() 功           能:创建灰度共生矩阵 Gray-level co-occurrence matrix from an image 图像的...

图像的灰度共生矩阵GLCM(matlab 函数帮助)

Gray-level co-occurrence matrix from an image图像的灰度共生矩阵灰度共生矩阵是像素距离和角度的矩阵函数,它通过计算图像中一定距离和一定方向的两点灰度之间的相...

灰度共生矩阵原理+Matlab中实现

共生矩阵用两个位置的象素的联合概率密度来定义,它不仅反映亮度的分布特性,也反映具有同样亮度或接近亮度的象素之间的位置分布特性,是有关图象亮度变化的二阶统计特征。它是定义一组纹理特征的基础。   ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:灰度共生矩阵GLCM及其matlab实现
举报原因:
原因补充:

(最多只允许输入30个字)