Python的"img_as_ubyte"和Matlab的'im2uint8'之间的区别



如果我理解得很好,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)

相关内容

  • 没有找到相关文章

最新更新