Computer vision skimage.feature.greycomatrix仅产生对角线值

Computer vision skimage.feature.greycomatrix仅产生对角线值,computer-vision,feature-extraction,scikit-image,glcm,Computer Vision,Feature Extraction,Scikit Image,Glcm,我试图在趋势减少的数字高程模型上生成glcm。我当前的问题是skimage.feature.greycomatrix(image)的输出只包含矩阵的对角项中的值 glcm = greycomatrix(image,distances=[1],levels=100,angles=[0] ,symmetric=True,normed=True) 使用以下代码对图像进行量化: import numpy as np from skimage.feature import greycomatrix de

我试图在趋势减少的数字高程模型上生成glcm。我当前的问题是skimage.feature.greycomatrix(image)的输出只包含矩阵的对角项中的值

glcm = greycomatrix(image,distances=[1],levels=100,angles=[0] ,symmetric=True,normed=True)
使用以下代码对图像进行量化:

import numpy as np
from skimage.feature import greycomatrix
def quantize(raster):
    print("\n Quantizing \n")
    raster += (np.abs(np.min(raster)) + 1)
    mean = np.nanmean(raster.raster[raster.raster > 0])
    std = np.nanstd(raster.raster[raster.raster > 0])

    raster[raster == None] = 0 # set all None values to 0
    raster[np.isnan(raster)] = 0
    raster[raster > (mean + 1.5*std)] = 0
    raster[raster < (mean - 1.5*std)] = 0 # High pass filter
    raster[raster > 0] = raster[raster > 0] - (np.min(raster[raster > 0]) - 1)
    raster[raster>101] = 0
    raster = np.rint(raster)
    flat = np.ndarray.flatten(raster[raster > 0])
    range = np.max(flat) - np.min(flat)
    print("\n\nRaster Range: {}\n\n".format(range))
    raster = raster.astype(np.uint8)
    raster[raster > 101] = 0 
将numpy导入为np
从skimage.feature导入灰色矩阵
def量化(光栅):
打印(“\n量化\n”)
光栅+=(np.abs(np.min(光栅))+1)
平均值=np.nanmean(raster.raster[raster.raster>0])
std=np.nanstd(光栅.光栅[光栅.光栅>0])
光栅[光栅==无]=0#将所有无值设置为0
光栅[np.isnan(光栅)]=0
光栅[光栅>(平均值+1.5*std)]=0
光栅[光栅<(平均值-1.5*std)]=0#高通滤波器
光栅[光栅>0]=光栅[光栅>0]-(np.min(光栅[光栅>0])-1)
光栅[光栅>101]=0
光栅=np.rint(光栅)
展平=np.ndarray.flant(光栅[光栅>0])
范围=np.最大值(平坦)-np.最小值(平坦)
打印(“\n\n主范围:{}\n\n.”格式(范围))
光栅=光栅.astype(np.uint8)
光栅[光栅>101]=0


我如何让glcm计算对角线矩阵之外的值(即,仅计算值本身的频率),我的方法是否存在根本性的错误?

如果图像中的像素强度相关,则两个类似级别很可能同时出现,因此,相应GLCM的非零元素将集中在主对角线周围。相反,如果像素强度不相关,GLCM的非零元素将分布在整个矩阵中。以下示例说明了这一点:

将numpy导入为np
从浏览导入数据
将matplotlib.pyplot作为plt导入
从skimage.feature导入灰色矩阵
x=data.brick()
y=data.grasser()
mx=greycomatrix(x,距离=[1],级别=256,角度=0,标准化=True)
my=灰色矩阵(y,距离=[1],级别=256,角度=[0],标准化=真)
图,ax=plt.子批次(2,2,figsize=(12,8))
ax[0,0].imshow(x,cmap='gray')
ax[0,1].imshow(mx[:,:,0,0])
ax[1,0].imshow(y,cmap='gray')
ax[1,1].imshow(我的[:,:,0,0])

尽管我还没有看到您的光栅图像,但我猜强度在
量化返回的图像中变化非常平稳,因此GLCM主要是对角线