我将在window_size=3
的float数组上应用均值过滤器。我找到了这个库:
from skimage.filters.rank import mean
import numpy as np
x=np.array([[1,8,10],
[5,2,9],
[7,2,9],
[4,7,10],
[6,14,10]])
print(x)
print(mean(x, square(3)))
[[ 1 8 10]
[ 5 2 9]
[ 7 2 9]
[ 4 7 10]
[ 6 14 10]]
[[ 4 5 7]
[ 4 5 6]
[ 4 6 6]
[ 6 7 8]
[ 7 8 10]]
但是这个函数不能在float数组上运行:
from skimage.filters.rank import mean
import numpy as np
x=np.array([[1,8,10],
[5,2,9],
[7,2,9],
[4,7,10],
[6,14,10]])
print(x)
print(mean(x.astype(float), square(3)))
File "/home/pd/RSEnv/lib/python3.5/site-packages/skimage/util/dtype.py", line 236, in convert
raise ValueError("Images of type float must be between -1 and 1.")
ValueError: Images of type float must be between -1 and 1.
如何解决这个问题?
答案 0 :(得分:3)
一般情况下(这对其他编程语言有效),图像通常可以用两种方式表示:
[0, 255]
。在这种情况下,值的类型为uint8
- 无符号整数8字节。[0, 1]
。在这种情况下,值的类型为float
。根据语言和库的不同,像素强度所允许的值的类型和范围可以或多或少地允许。
此处的错误告诉您图像的像素值(您的array
属于float
类型,但它们不在[-1, 1]
范围内。由于值在在[0, 255]
之间,您只需要将它们全部除以255
。将值转换为整数也可以。
Here是scikit-image的用户指南,用于解释支持的图像数据类型。
本页的两句话: