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

问题描述

如果我很好理解,Python中Matlab的const getLargestSumOfFiveConsecutiveElements = (arr) => { let currSum = getSum(arr,4); let largestSum = currSum; for (let i = 1; i <= arr.length - 5; i++) { currSum -= arr[i - 1]; // subtract element to the left of curr window currSum += arr[i + 4]; // add last element in curr window largestSum = Math.max(largestSum,currSum); } return largestSum; }; const getSum = (arr,start,end) => { let sum = 0; for (let i = start; i <= end; i++) { sum += arr[i]; } return sum; }; 的对应对象是im2uint8中的img_as_ubyte

但是以下给出了不同的结果

scikit-image

如果有问题,请在Windows 10下使用

请问有什么想法吗?

解决方法

我不确定Matlab在做什么,但是scikit-image乘以255(uint8的最大值),然后使用NumPy's default rounding(即"round to nearest,ties to even")四舍五入。这里有一些实验可以澄清正在发生的事情:

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)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...