特征提取之灰度游程(行程)矩阵-GLRLM

本文介绍了灰度游程矩阵(GLRLM)的概念,用于图像纹理特征提取。通过举例说明GLRLM的计算过程,并提供了计算GLRLM及其相关特征的Python代码片段。GLRLM是对图像像素信息的度量,实际应用中需进一步计算得到基于灰度共生矩阵的图像特征。

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

  最近在项目中要进行图像的特征提取工作,为了便于以后查阅和使用,遂写博客以记录。
  说到图像的纹理特征,大家能想到的就是灰度共生矩阵(Gray-Level Co-Occurrence Matrix, GLCM)、灰度游程矩阵(Gray-Level Run-Length Matrix, GLRLM)、局部二值模式(Local Binary Pattern, LBP)和方向梯度直方图(Histogram of Oriented Gradient, HOG)。


  这篇博文主要总结一下灰度游程矩阵,顾名思义,灰度游程矩阵就是灰度值游行的长度所组成的矩阵。我们直接上定义,记灰度共生矩阵为D[i, j, theta],其中i表示原始图像中的像素值,i的所有取值为原始图像的灰度级数,j表示像素值所游走的长度,也就是在图像中有j个连续的i出现,theta表示计算的方向,一般有0度45度90度135度


  下面以一个例子说明:

Img = [[1, 1, 0, 0],
       [1, 1, 0, 0],
       [0, 0, 2, 2],
       [0, 0, 2, 2]]

  我们以theta=0计算GLRLMtheta=0也就是按照水平方向计算,按照上述可以将灰度游程矩阵表示为D[i, j, theta]D.shape=(3, 4, 1),其中3表示灰度阶数[0, 1, 2]4表示最长的数据值,即对角线长为41表示theta的个数,即只有theta=0。按照水平方向计算,统计像素00连续出现4次为00连续出现3次为00连续出现2次为40连续出现1次为0这里需要注意:因为在计算0连续出现2次时已经计算了所有的0,所以再计算0出现一次时就不将刚才计算过的0列入其中),所以像素0结果为[0, 4, 0, 0]。按照以上方法计算像素1结果为[0, 2, 0, 0],所以有:

按照theta=0度计算结果:
P_0 = [[0, 4, 0, 0],
       [0, 2, 0, 0],
       [0, 2, 0, 0]]

按照theta=45度计算结果:
P_45 = [[4, 0, 0, 1],
        [2, 1, 0, 0],
        [2, 1, 0, 0]]

按照theta=90度计算结果:
P_90 = [[0, 4, 0, 0],
        [0, 2, 0, 0],
        [0, 2, 0, 0]]

按照theta=135度计算结果:
P_135 = [[4, 2, 0, 0],
         [2, 1, 0, 0],
         [2, 1, 0, 0]]

此处要注意两点:

  1. 每次计算时从最长的像素串开始统计;
  2. 对于已经统计过的像素串,在计算比其长度小的子串时应该舍弃。

说清楚了计算方法,我们接下来上代码:

def getGrayLevelRumatrix(self, array, theta):
        '''
        计算给定图像的灰度游程矩阵
  

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值