1

我正在使用 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)

如果我传递HHgreycomatrix我会收到此错误:

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 之间。

4

1 回答 1

1

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

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在您的代码中)。同样重要的是要指出,强度分级必须通过整数除法 ( //) 来执行,否则dtypeofim_binned将是float。最后需要注意的是,您必须传递as_gray=True给函数io.imread,否则在尝试计算灰度共生矩阵时会出现以下错误:

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

于 2019-03-12T11:09:15.393 回答