【问题标题】:How to pass the HH subband of an image to greycomatrix function?如何将图像的 HH 子带传递给 graycomatrix 函数?
【发布时间】:2019-08-02 00:59:08
【问题描述】:

我正在使用 scikit-images 的函数 greycomatrix,我想将在 haar 滤波后从小波变换获得的分量之一作为输入。

import pywt
import cv2
from skimage.feature import greycomatrix

original = cv2.imread('img.jpg', cv2.IMREAD_GRAYSCALE)
coeffs2 = pywt.dwt2(original, 'haar')
LL, (LH, HL, HH) = coeffs2
cv2.imshow('image', HH)
gCoMat = greycomatrix(HH, [2], [0], 256, symmetric=True, normed=True)

如果我将HH 传递给greycomatrix,我会收到此错误:

ValueError:greycomatrix 不支持浮动图像。将图像转换为无符号整数类型。

我尝试使用此代码转换图像:

from skimage import util

im = util.img_as_ubyte(HH)
im /= 32
gCoMat = greycomatrix(im, [2], [0], 256, symmetric=True, normed=True)

但是我收到了这个错误:

raise ValueError("float 类型的图像必须介于 -1 和 1 之间。") ValueError:float 类型的图像必须介于 -1 和 1 之间。

【问题讨论】:

    标签: python opencv feature-extraction scikit-image glcm


    【解决方案1】:

    在将图像转换为 8 位无符号整数之前,您需要将强度重新缩放到 [0, 1] 范围内:

    from skimage import util, exposure, data
    import pywt
    from skimage.feature import greycomatrix
    
    original = data.camera()
    LL, (LH, HL, HH) = pywt.dwt2(original, 'haar')
    HH_scaled = exposure.rescale_intensity(HH, out_range=(0, 1))
    
    bin_width = 32
    im = util.img_as_ubyte(HH_scaled)
    im_binned = im//bin_width
    
    gCoMat = greycomatrix(im_binned, distances=[2], angles=[0], 
                          levels=256//bin_width, symmetric=True, normed=True)
    

    请注意,如果传递给graycomatrix 的图像被分箱,则levels 参数不应为256,您必须将该值除以相同的因子(代码中的32)。同样重要的是要指出,强度分级必须通过整数除法(//)进行,否则im_binneddtype 将是float。最后需要注意的是,您必须将as_gray=True 传递给函数io.imread,否则在尝试计算灰度共生矩阵时会出现以下错误:

    ValueError:参数image必须是二维数组

    【讨论】:

    • 但是会产生这个错误:ValueError: The parameter image must be a 2-dimensional array.
    • 如果您能建议我进行编辑,那将非常有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多