如果我理解得很好,Python中Matlab的im2uint8
对应的是scikit-image
中的img_as_ubyte
然而,以下给出了不同的结果
Python 3.7:
--------
import skimage
from skimage.util import img_as_ubyte
img_as_ubyte([0.3]) # returns 76
print(skimage.__version__) # prints 0.16.2
Matlab (2017b):
--------
im2uint8([0.3]) % returns 77
如果它很重要,这是在Windows 10 下
有什么想法吗?
我不确定Matlab在做什么,但scikit图像乘以255(uint8的最大值(,然后使用NumPy的默认舍入进行舍入,即"四舍五入,平分秋色";。以下是一些实验,应该可以澄清正在发生的事情:
In [10]: from skimage import util
In [11]: 0.3 * 255
Out[11]: 76.5
In [12]: np.round(76.5)
Out[12]: 76.0
In [13]: 77.5 / 255
Out[13]: 0.30392156862745096
In [14]: 0.30392156862745096 * 255
Out[14]: 77.5
In [15]: np.round(0.30392156862745096 * 255)
Out[15]: 78.0
In [16]: util.img_as_ubyte([0.30392156862745096])
Out[16]: array([78], dtype=uint8)