ValueError:float类型的图像必须介于-1和1之间

时间:2017-08-15 02:54:17

标签: python filter scikit-image

我正在尝试将简单的磁盘过滤器应用于拟合文件:

from skimage.morphology import disk
from skimage.filters.rank import median
import numpy as np
import matplotlib.pyplot as plt
from astropy.io import fits

#    Open data files for image and mask
hdulist = fits.open('xbulge-w1.fits')
w1data = hdulist[0].data

hdulistmask = fits.open('xbulge-mask.fits')
maskdata = hdulistmask[0].data
mask = 1 - maskdata

w1_masked = np.ma.array(w1data, mask = mask)
selem = disk(5)
filt = median(w1_masked,
                            selem=disk(5),
                            out=None,
                            mask=mask)

plt.imshow(filt)
plt.show()

但这给了我一个" ValueError:float类型的图像必须介于-1和1之间。" 发生了什么事?

1 个答案:

答案 0 :(得分:2)

这可以帮助您解决问题。我最初为此question编写了这个答案,该答案与同一个消息错误有关,也适用于过滤操作。

通常,(这对其他编程语言有效),图像通常可以用两种方式表示:

  • ,强度值范围为[0, 255]。在这种情况下,值的类型为uint8 - 无符号整数8字节。
  • ,强度值范围为[0, 1]。在这种情况下的值 属于float类型。

取决于语言和库,像素所允许的值的类型和范围'强度可以或多或少地允许。

此处的错误告诉您像素'您的图片的值属于float类型,但它们不在[-1, 1]范围内。如果值介于[0, 255](或[-255, 255])之间,则只需将它们全部除以255。将值转换为整数也可能有效。

这适用于表示为常规数组(或矩阵,取决于语言)的图像。在您的情况下,使用掩码数组涉及既不是浮点数也不是整数的掩码值。因此,如果继续使用屏蔽数组,我怀疑你可以使用常规过滤功能。