Nano Hash - криптовалюты, майнинг, программирование

Реализация SIFT на Java

Итак, я работаю над простым Java-приложением, которое позволяет пользователю вводить изображение в виде запроса, и приложение сравнивает его с базой данных изображений (которая в основном представляет собой не более чем каталог разных изображений). В основном я исследую несколько методов измерения сходства изображений, чтобы выяснить, какие из них подходят для сравнения изображений автомобилей.

Я кое-что читал, и помимо FFT/SSIM я прочитал, что алгоритм SIFT может дать очень хорошие результаты. Однако, как человек с базовым опытом работы с Java всего около года, я, честно говоря, не уверен, что я достаточно хороший программист, чтобы реализовать его. Черт, у меня все еще проблемы с пониманием основных концепций алгоритма из-за его очевидной сложности.

Поэтому я хотел бы спросить у тех, у кого гораздо больше опыта, чем у меня. Целесообразна ли вообще реализация SIFT для такой цели? Могу ли я сделать это только с помощью JDK (без других надстроек, если это вообще возможно)? Как бы я это сделал?

заранее спасибо

08.03.2011

Ответы:


1

Пакет обработки изображений Fiji, который расширяет 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/ при загрузке Fiji.

Фиджи можно скачать отсюда:

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

02.06.2011
  • этот pacific.mpi-cbg.de/cgi-bin /gitweb.cgi?p=mpicbg.git не работает 20.10.2016

  • 2

    Возможно, вы захотите рассмотреть ImageJ — http://en.wikipedia.org/wiki/ImageJ

    Для этого есть плагин SIFT.

    И проверьте ответы на stackoverflow здесь - Использование SIFT для дополненной реальности

    08.03.2011

    3

    Этот учебник в 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

    09.03.2019
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..