1 回答

TA貢獻1846條經(jīng)驗 獲得超7個贊
讓我們慢慢瀏覽代碼。首先我們導入必要的模塊,加載圖像類型np.int32并增加圖像所有像素的像素強度1:
import numpy as np
from skimage import data
from skimage.feature import greycomatrix
img = data.astronaut().astype(np.int32) + 1
然后我們定義圖像的形狀和強度級別的數(shù)量:
rows, cols, _ = img.shape
levels = 256
現(xiàn)在我們裁剪圖像的藍色通道,這樣我們只保留左半部分:
crop_img = img[:, :cols//2, 2]
圖像的藍色通道的右半邊被蒙版如下:
mask_img = img[:, :, 2].copy()
mask_img[:, cols//2:] = 0
為了這個例子,包裝 GLCM 計算很方便:
def glcm_wrapper(arr):
glcm = greycomatrix(arr, levels=levels+1, distances=[1], angles=[0])
return np.squeeze(glcm)[1:, 1:]
我們準備檢查通過兩種方法獲得的 GLCM 是否相同:
glcm_crop = glcm_wrapper(crop_img)
glcm_mask = glcm_wrapper(mask_img)
print(np.array_equal(glcm_crop, glcm_mask))
如果您運行上面的所有代碼片段,您將獲得True.
重要的是要注意,如果將參數(shù)傳遞normed=True給greycomatrix,生成的 GLCM 是不同的。如果要對矩陣進行歸一化,則必須在刪除第一行和第一列后對 GLCM 進行歸一化。試試這個說服自己:
glcm_crop = glcm_crop/glcm_crop.sum()
glcm_mask = glcm_mask/glcm_mask.sum()
print(np.allclose(glcm_crop, glcm_mask))
添加回答
舉報