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

Jim*_*616 5 python filter scikit-image

我正在尝试一个应用于 fits 文件的简单磁盘过滤器:

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()
Run Code Online (Sandbox Code Playgroud)

但这给了我一个“ValueError:float类型的图像必须在-1和1之间。” 这是怎么回事?

Esk*_*app 5

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

一般来说,(这对于其他编程语言也是有效的),图像通常可以用两种方式表示:

  • 强度值在 范围内[0, 255]。在本例中,值的类型为uint8- 无符号整数 8 字节。
  • 强度值在 范围内[0, 1]。在本例中,值的类型为 float。

根据语言和库的不同,像素强度允许的值的类型和范围可能或多或少是宽松的。

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

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