灰度共生矩阵-python

本篇博客参考灰度共生矩阵(GLCM)附Python代码 ,对其进行了完善与修改。

灰度共生矩阵(Gray Level Co-occurrence Matrix,GLCM)统计了灰度图中像素间的灰度值分布规律以区分不同的纹理。灰度共生矩阵中每个元素的值可以定义为(x, y)点与(x + dx, y + dy)点的值对为(i, j)的概率。统计整幅图像中每一种灰度值组合出现的概率矩阵 P 即为灰度共生矩阵。
一张图像的灰度值范围一般为0-255,为减少计算量,在计算矩阵前,需要对灰度值进行缩放,一般为0-15.由于灰度共生矩阵的维度较大,一般不直接作为区分纹理的特征,而是基于它构建的一些统计量作为纹理分类特征。例如Haralick曾提出了14种基于灰度共生矩阵计算出来的统计量:能量、熵、对比度、均匀性、相关性、方差、和平均、和方差、和熵、差方差、差平均、差熵、相关信息测度以及最大相关系数。

import cv2
import numpy as np
np.set_printoptions(suppress=True)
def glcm(arr, d_x, d_y, gray_level=16):
    '''计算并返回归一化后的灰度共生矩阵'''
    max_gray = arr.max() + 1
    #若灰度级数大于gray_level,则将图像的灰度级缩小至gray_level,减小灰度共生矩阵的大小
    arr = arr * gray_level / max_gray
    ret = np.zeros([gray_level, gray_level])
    for j in range(height - d_y):
        for i in range(width - d_x):
             rows = arr[j][i]
             cols = arr[j + d_y][i + d_x]
             ret[rows][cols] += 1.0
    return ret / float(arr.shape[0] * arr.shape[1]) # 归一化

if __name__=='__main__':
    fp = '/home/mamq//images/3.jpg'
    img = cv2.imread(fp)
    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    glcm_0 = glcm(img_gray, 1,0) # 水平方向
    #glcm_1 = glcm(img_gray, 0,1) # 45度方向
    #glcm_2 = glcm(img_gray, 1,1) # 垂直方向
    #glcm_3 = glcm(img_gray, -1,1) # 135度方向

猜你喜欢

转载自blog.csdn.net/qq_23926575/article/details/80599199