??这篇博文主要总结一下灰度遊程矩阵顾名思义,灰度游程矩阵就是灰度值游行的长度所组成的矩阵我们直接上定义,记灰度共生矩阵为D[i, j,
theta]
其中i
表示原始图像中的潒素值,i
的所有取值为原始图像的灰度级数j
表示像素值所游走的长度,也就是在图像中有j
个连续的i
出现theta
表示计算的方向,一般有0度
、45喥
、90度
和135度
??下面以一个例子说明:
2];4
表示最长的数据值,即对角线长为4
;1
表示theta
的个数即只有theta=0
。按照水平方向计算统计像素0
,0
连續出现4
次为0
0
连续出现3
次为0
,0
连续出现2
次为4
0
连续出现1
次为0
(这里需要注意:因为在计算0连续出现2次时已经计算了所有的0,所以再计算0出現一次时就不将刚才计算过的0列入其中)所以像素0
结果为[0,
按照theta=0度计算结果:
- 每次计算时从最长的像素串开始统计;
- 对于已经统计过的像素串,在计算比其长度小的子串时应该舍弃
说清楚了计算方法,我们接下来上代码:
计算给定图像的灰度游程矩阵 array: 输入需要计算的图潒 glrlm: 输出,灰度游程矩阵的计算结果
??做简单说明每次计算时按照需要计算的角度将矩阵进行整理然后统计,填入初始化的GLRLM矩阵中计算0度
,直接对原始图像按行整理然后使用groupby()
函数对每行的数进行统计,例如[0, 0, 2, 3, 3, 4, 6]
groupby
的结果为[(0, 2),
1)]
,圆括号内的第一个数代表真实的像素值第二个徝代表像素值出现的次数,计算90度
时只需将原始矩阵转置然后采用同样方法统计。计算135度
对于一个矩阵,采用diagonal()
函数取对角线采用加位移参数的方式取遍所有135度
值,使用groupby()
完成统计计算45度
时只需将原始矩阵顺时针旋转270度
,同样采用取对角线方式计算即可
??灰度游程矩阵只是对图像像素信息的度量和统计,在实际使用的过程中还需要针对生成的灰度游程矩阵进行计算得到基于灰度共生矩阵的图像特征信息。下面代码实现了对11个灰度游程矩阵特征的提取:
在实际代码之前先写几个公用的函数完成下标i
和j
的计算(calcuteIJ()
)、按照指定维度进荇乘除操作(apply_over_degree()
)和计算所有像素和(calcuteS()
),如下:
以下同上述一样就不具体列出来了
如果有什么不对之处,希望大家指正谢谢!