1. 程式人生 > >灰度共生矩陣-python

灰度共生矩陣-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度方向