我正在使用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)
但我得到了这个错误:
提高ValueError(“float类型的图像必须介于-1和1之间。”)ValueError:float类型的图像必须介于-1和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
)。同样重要的是要指出强度分级必须通过整数除法(//
)进行,否则dtype
的im_binned
将是float
。作为最后的警告,你必须将as_gray=True
传递给函数io.imread
,否则在尝试计算灰度级共生矩阵时会出现以下错误:
ValueError:参数
image
必须是二维数组