最近在项目中要进行图像的特征提取工作,为了便于以后查阅和使用,遂写博客以记录。
说到图像的纹理特征,大家能想到的就是灰度共生矩阵(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
计算GLRLM,theta=0
也就是按照水平方向计算,按照上述可以将灰度游程矩阵表示为D[i, j, theta]
,D.shape=(3, 4, 1)
,其中3
表示灰度阶数[0, 1, 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, 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]]
此处要注意两点:
- 每次计算时从最长的像素串开始统计;
- 对于已经统计过的像素串,在计算比其