如何将图像的HH子带传递给greycomatrix函数?

问题描述 投票:1回答: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)

如果我将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之间。

python opencv feature-extraction scikit-image glcm
1个回答
0
投票

在将图像转换为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)。同样重要的是要指出强度分级必须通过整数除法(//)进行,否则dtypeim_binned将是float。作为最后的警告,你必须将as_gray=True传递给函数io.imread,否则在尝试计算灰度级共生矩阵时会出现以下错误:

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

© www.soinside.com 2019 - 2024. All rights reserved.