7

我真的不认为这是一个精度问题,答案应该是 0.226 左右。这是确切的代码:

val = I(i,j)
bucketSize    
pos = val / bucketSize

I只是我从中获取值的矩阵。这是 MATLAB 的输出:

val =

   29

bucketSize =

   128

pos =

   0

我错过了什么?

4

4 回答 4

17

我的猜测是您的矩阵是从图像文件I加载的像素数据,其值通常是无符号 8 位整数。如前所述,将两个整数值转换为双精度值将确保 MATLAB 执行浮点除法而不是整数除法(这将使结果四舍五入)。

将一个值转换为双精度是不够的:

对于一个操作数是整数数据类型数组(64 位整数除外)而另一个是双精度标量的所有二元运算,MATLAB 使用逐元素双精度算术计算运算,然后将结果转换回原始值整数数据类型。

如果您想了解有关 MATLAB 中不同数值数据类型的更多信息,可以查看此文档

于 2010-09-11T03:44:26.633 回答
12

尝试:

double(val)/double(bucketSize)
于 2010-09-11T02:57:15.907 回答
1

我明白了,问题是我的矩阵出于某种原因包含 uint8,而不是双精度数。刚刚将 val=I(i,j) 更改为 val=double( I(i,j) ) 一切都很好。谢谢。

于 2010-09-11T03:02:29.960 回答
0

这些变量可能是整数而不是双精度或长整数。1/2 是否返回 0.5?其他操作是否有效?

于 2010-09-11T02:52:41.280 回答