因为最近有用到灰度共生矩阵来提取图像的纹理特征,所以感觉有必要对这个理论进行讲述一下。灰度共生矩阵也称为联合概率矩阵法,是一种用图像中某一灰度级结构重复出现的概率来描述纹理信息的方法。该方法用条件概率提取纹理的特征,通过统计空间上具有某种位置关系(像素间的方向和距离)的一对像素的灰度值对出现的概率构造矩阵,然后通从该矩阵提取有意义的统计特征来描述纹理。理论不适合讲太多,下面我将按照提取纹理特征的顺序来讲如何提取一幅图片的纹理特征。
首先介绍一个库scikit-image,访问网址在下面,这可是提取灰度共生矩阵以及纹理特征的法宝噢:
https://scikit-image.org/
1.图像灰度级降级
在提取纹理特征之前,十分有必要对图像的灰度级进行降级,灰度共生矩阵的大小也与灰度级大小数量上是相等的,如果所以如果灰度级太大,会导致灰度共生矩阵太大,会导致计算量特别大,导致程序所运行的时间特别长,同时效果也不是说灰度共生矩阵越大,效果就会越好,需要根据实际的情况来选定灰度共生矩阵大小,常用的灰度级数有,3,4到16等。
2.计算灰度共生矩阵
这时就要用到上面介绍的法宝啦,skimage.graymatrix,引用skimage官网中的一个例子进行讲解
>>> image = np.array([[0, 0, 1, 1],
... [0, 0, 1, 1],
... [0, 2, 2, 2],
... [2, 2, 3, 3]], dtype=np.uint8)
>>> g = graycomatrix(image, [1, 2], [0, np.pi/2], levels=4,
... normed=True, symmetric=True)
>>> contrast = graycoprops(g, 'contrast')
>>> contrast
array([[0.58333333, 1. ],
[1.25 , 2.75 ]])
此时上面输入的image是已经经过灰度级降级的图片,此时的灰度级为4
skimage.feature.
graycomatrix
(image, distances, angles, levels=None, symmetric=False, normed=False)image:经过灰度级降级的图像
distances:生成共生矩阵时像素点之间的距离
angles:灰度共生矩阵生成的方向,可以为0°,45°, 90°,135°,可以列表的形式存储多个角度,上面的例子中仅提取了两个方面。
symmetric:统计正向结果,还是正向结果和反向结果均统计
然后用利用skimage.feature.graycoprops提取特征
官网上给出了如下特征:
显示不太全面,可以考虑访问这个网址
Module: feature — skimage v0.19.2 docs (scikit-image.org)
举个栗子:
假如你想提取ASM
只需输入下面的命令语句:
skimage.feature.graycoprops(P, prop='ASM')
P是利用graycomatrix提取的灰度共生矩阵,给prop赋不同的值,便可以提取不同的纹理特征值
skimage现在提供的纹理特征值有:
contrast’, ‘dissimilarity’, ‘homogeneity’, ‘energy’, ‘correlation’, ‘ASM’
这篇文章主要讲述了如何利用skimage库提取纹理特征,相比于自己手写提取纹理特征的程序可方便太多了。有关灰度共生矩阵的具体理论知识,读者可自行去查看数字图像处理这本书。