Реализация SIFT в Java
Поэтому я работаю над простым приложением Java, которое позволяет пользователю вводить изображение в качестве запроса и сравнивать его с базой данных изображений (которая в основном представляет собой не более чем каталог различных изображений). Я в основном исследую несколько методов измерения сходства изображений, чтобы выяснить, какие из них подходят для сравнения изображений автомобилей.
Я немного читал, и кроме FFT/SSIM, я читал, что алгоритм SIFT может дать очень хорошие результаты. Тем не менее, как человек, обладающий базовым опытом работы с Java всего лишь около года, я, честно говоря, не уверен, что я достаточно хороший программист, чтобы иметь возможность его реализовать. Черт, у меня все еще проблемы с пониманием основных понятий алгоритма из-за его очевидной сложности.
Поэтому я хотел бы спросить тех, у кого гораздо больше опыта, чем у меня. Является ли вообще практичным применение SIFT для таких целей? Могу ли я сделать это с одним JDK (без других аддонов, если вообще возможно)? Как мне это сделать?
заранее спасибо
2 ответа
У пакета обработки изображений Фиджи, который расширяет ImageJ, есть вики-сайт с информацией о его плагине SIFT:
http://pacific.mpi-cbg.de/wiki/index.php/Feature_Extraction
Исходный код реализации SIFT в java доступен в репозитории mpicbg.git:
http://pacific.mpi-cbg.de/cgi-bin/gitweb.cgi?p=mpicbg.git
Библиотека, которая включает извлечение и сопоставление функций SIFT, - это файл mpicbg.jar, расположенный в папке Fiji.app/jars/ при загрузке Фиджи.
Фиджи можно скачать здесь:
http://pacific.mpi-cbg.de/wiki/index.php/Downloads
Примером использования плагина SIFT является регистрация последовательных срезов в стеке электронной микроскопии. Смотрите эту страницу:
http://pacific.mpi-cbg.de/wiki/index.php/Register_Virtual_Stack_Slices
Исходный код научит вас, как использовать библиотеку для извлечения функций SIFT и для вычисления моделей преобразования из наборов совпадающих функций:
Вы можете рассмотреть ImageJ - http://en.wikipedia.org/wiki/ImageJ
Для этого есть плагин SIFT.
И проверьте ответы на stackru здесь - Использование SIFT для дополненной реальности
В этом руководстве по openimaj показана пошаговая процедура использования SIFT из библиотеки OpenImaj.
http://openimaj.org/tutorial/sift-and-feature-matching.html
Однако, если вам нужна реализация Java, как говорится в руководстве,
Мы будем использовать детектор разности гауссовых признаков, который мы описываем с помощью дескриптора SIFT. Функции, которые мы находим, описаны так, что они не зависят от изменений размера, поворота и положения. Это довольно мощные функции и используются в различных задачах. Стандартную реализацию SIFT в OpenIMAJ можно найти в классе DoGSIFTEngine:
Ссылка на метод API для "DoGSIFTEngine" может быть найдена, пройдя по следующей ссылке.
http://openimaj.org/apidocs/org/openimaj/image/feature/local/engine/DoGSIFTEngine.html
Вот ссылка на полную реализацию
http://openimaj.org/apidocs/src-html/org/openimaj/image/feature/local/engine/DoGSIFTEngine.html