ImageJ圆法不能正常工作?

时间:2014-06-07 05:25:58

标签: image-processing imagej

我已经测试了大约一个小时,我不明白发生了什么。

在imageJ中,如果我说:

i = 3.5;
print(round(i));

我得到4

但是,如果我说:

      print(65535/(27037-4777)*(26295-4777));
print(round(65535/(27037-4777)*(26295-4777)));

出于某种原因,我得到了:

63350.5
63350

它不应该四舍五入到63351吗?

1 个答案:

答案 0 :(得分:1)

看一下您的评论,通过该计算生成的数字实际上是63350.499999...,因此当您尝试回合时,数字会向下舍入并得到63350。我可以建议的一件事是添加一个在后见之明似乎无害的小常量,但它会解决这样的情况。您希望将其设置得足够小,以便将数字的小数部分推到0.5范围,以便它成功完成,但它不会干扰{{1} 1}}适用于其他小数部分。

Java API有一个名为round的函数,它将计算在您指定的特定浮点数之后的下一个可能的小数组件。但是,由于Math.ulp没有此功能,因此请考虑添加类似ImageJ的小内容。这可能看起来像是一个愚蠢的黑客,但这肯定会避免像你现在经历的那种情况。您添加的此常量也不会影响1e-5round的工作方式。


ImageJ:为您的号码添加一个小常量(如tl;dr)然后再舍入。这不应该影响1e-5整体的工作方式,并且只是将那些悬停在round标记处的小数组件推送到真正超过0.5的数字上

祝你好运!