ValueError: Images of type float must be between -1 and 1
ValueError: Images of type float must be between -1 and 1
我正在尝试将简单的磁盘过滤器应用于适合的文件:
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: Images of type float must be between -1 and 1."
怎么回事?
这应该可以帮助您解决问题。我最初为这个 写了这个答案,它是关于相同的消息错误,也用于过滤操作。
通常,(这对其他编程语言也有效),图像通常可以用两种方式表示:
- 强度值在
[0, 255]
范围内。在这种情况下,值的类型为 uint8
- 无符号整数 8 字节。
- 强度值在
[0, 1]
范围内。在这种情况下,值
是 float 类型。
根据语言和库的不同,像素强度允许的值的类型和范围可能或多或少是宽松的。
此处的错误告诉您图像的像素值属于 float
类型,但不在 [-1, 1]
范围内。如果值介于 [0, 255]
(或 [-255, 255]
)之间,则只需将它们全部除以 255
。将值转换为整数也可能有效。
这适用于表示为常规数组(或矩阵,取决于语言)的图像。在您的情况下,使用掩码数组涉及既不是浮点数也不是整数的掩码值。因此,我怀疑如果你继续使用掩码数组,你是否可以使用常规过滤函数。
我正在尝试将简单的磁盘过滤器应用于适合的文件:
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: Images of type float must be between -1 and 1." 怎么回事?
这应该可以帮助您解决问题。我最初为这个
通常,(这对其他编程语言也有效),图像通常可以用两种方式表示:
- 强度值在
[0, 255]
范围内。在这种情况下,值的类型为uint8
- 无符号整数 8 字节。 - 强度值在
[0, 1]
范围内。在这种情况下,值 是 float 类型。
根据语言和库的不同,像素强度允许的值的类型和范围可能或多或少是宽松的。
此处的错误告诉您图像的像素值属于 float
类型,但不在 [-1, 1]
范围内。如果值介于 [0, 255]
(或 [-255, 255]
)之间,则只需将它们全部除以 255
。将值转换为整数也可能有效。
这适用于表示为常规数组(或矩阵,取决于语言)的图像。在您的情况下,使用掩码数组涉及既不是浮点数也不是整数的掩码值。因此,我怀疑如果你继续使用掩码数组,你是否可以使用常规过滤函数。