Computer vision skimage.feature.greycomatrix仅产生对角线值
我试图在趋势减少的数字高程模型上生成glcm。我当前的问题是skimage.feature.greycomatrix(image)的输出只包含矩阵的对角项中的值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 = 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主要是对角线