Реализация 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 и для вычисления моделей преобразования из наборов совпадающих функций:

http://pacific.mpi-cbg.de/cgi-bin/gitweb.cgi?p=fiji.git;a=blob;f=src-plugins/register_virtual_stack_slices/register_virtual_stack/Register_Virtual_Stack_MT.java;hb=HEAD

Вы можете рассмотреть 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

Другие вопросы по тегам