0

我开发了一个对象识别应用程序,使用 SURF 算法的 Chris Evans OpenSURF 实现。我正在做一些实验,我刚刚意识到,如果我通过 IDE 启动应用程序或直接双击 .exe 文件启动应用程序,算法表现不佳。我检查了 .exe 文件是我通过 IDE 启动的代码的二进制编译。从 IDE 或从 .EXE 启动应用程序时,浮点精度似乎有些不同,因为 SURF 算法是确定性的,相同的输入总是必须返回相同的输出。一些例子。第一列和第二列是从图像中提取的点数。第三列是第一列和第二列之间的差异。

EXE VS 差异

17340 17366 -26 图片001

4639 4631 8 图片002

3196 3189 7 图片003

10442 10441 1 图片004

1485 1477 8 图片005

5539 ​​5555 -16 图片006

18102 18073 29 图片007

如果算法和代码完全相同,任何人都可以告诉我为什么输出不同?

谢谢

4

1 回答 1

2

这是因为当我们编译代码的时候,我们不得不对优化模式进行编译。

优化模式编译是在加快或缩短代码的方式。在 Visual Studio 中,当您转到项目选项时,您会在C/C++ 选项中看到优化设置,您可以根据代码本身通过以下选项设置代码最大代码优化。

1.优化:最大速度 2.启用内在功能:是 3.喜欢大小或速度:喜欢快速代码

并且在 COde Generation 选项中有更多优化选项

浮点模型:快速

注意: 1.这些选项是为了加快处理速度但有时代码不稳定。

  1. 测试时总是构建发布版本。
  2. 单独运行程序 exe(而不是像 Visual Studio 这样的 IDE),因为如果你从 Visual Studio 运行它,Visual Studio 的调试器会附加到它上面,这会减慢运行时间。
  3. 始终使用 dll 的发布版本。
于 2012-11-07T20:12:50.790 回答