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

问题描述 投票:0回答:1

我正在尝试在减少趋势的数字高程模型上生成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 

Output of greycomatrix()

我将如何使glcm在对角矩阵之外计算值(即,仅是值本身的频率,而我的方法有根本上的错误吗?

computer-vision feature-extraction scikit-image glcm
1个回答
0
投票
import numpy as np from skimage import data import matplotlib.pyplot as plt from skimage.feature import greycomatrix x = data.brick() y = data.gravel() mx = greycomatrix(x, distances=[1], levels=256, angles=[0], normed=True) my = greycomatrix(y, distances=[1], levels=256, angles=[0], normed=True) fig, ax = plt.subplots(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(my[:, :, 0, 0])

demo

尽管我没有看到您的光栅图像,但我猜想强度在quantize返回的图像上变化非常平滑,因此GLCM大部分是对角线的。 
© www.soinside.com 2019 - 2024. All rights reserved.