如何解决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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。