OpenSURF другой вывод с одним и тем же изображением при запуске из Visual Studio или непосредственно из.EXE

Я разработал приложение для распознавания объектов, используя реализацию алгоритма SURF Криса Эванса OpenSURF. Я делаю некоторые эксперименты, и я только что понял, что алгоритм не работает хорошо, если я запускаю приложение через IDE или напрямую с двойным щелчком в файле.exe. Я проверил, что файл.exe - это двоичный файл, скомпилированный из кода, который я запускаю через IDE. Похоже, что-то другое может быть связано с точностью с плавающей запятой при запуске приложения из IDE или из.EXE, потому что алгоритм SURF является детерминированным и с одним и тем же вводом всегда должен возвращать один и тот же вывод. Некоторые примеры. Первый и второй столбцы - это количество точек, извлеченных из изображений. Третий столбец - это разница между первым и вторым.

EXE VS Diff

17340 17366 -26 Image001

4639 4631 8 Image002

3196 3189 7 Image003

10442 10441 1 Image004

1485 1477 8 Image005

5539 5555 -16 Image006

18102 18073 29 Image007

Кто-нибудь может сказать мне, почему выходной результат отличается, если алгоритм и код в точности совпадают?

Спасибо

1 ответ

Решение

Это связано с тем, что когда мы компилируем код, нам приходится компилировать режим оптимизации.

Компиляция в режиме оптимизации позволяет ускорить или сократить код. В Visual Studio, когда вы переходите к опции проекта, вы видите настройку оптимизации в опции C/C++, где вы устанавливаете максимальную оптимизацию кода, следуя опции в зависимости от самого кода.

1. Оптимизация: максимальная скорость 2. Включаемая встроенная функция: Да 3. Размер фаворита или скорость: Быстрый код фаворита

и есть больше возможностей оптимизации в опции генерации кодов

Модель с плавающей точкой: быстро

Примечание: 1.Эти варианты для ускорения обработки, но некоторое время нестабильный код.

  1. Всегда собирайте релизную версию при тестировании времени.
  2. Запустите отдельную программу exe(не из IDE, такой как Visual Studio), потому что, если вы запускаете ее из Visual Studio, к ней присоединяется отладчик Visual Studio, что замедляет время выполнения.
  3. Всегда используйте выпускную версию DLL.
Другие вопросы по тегам