Implementing SIFT in Java

China☆狼群 提交于 2019-12-17 22:25:35

问题


So I'm working on a simple Java app that allows a user to input an image as a query and have the app compare it against a database of images (which is basically no more than a directory of different images). I'm basically investigating several image similarity measurement techniques to find out which ones are appropriate for comparing pictures of cars.

I've been doing some reading and apart from FFT/SSIM, I've read that the SIFT algorithm can yield very good results. However, as someone with only about a year's worth of basic Java experience, I'm honestly not sure if I'm a good enough programmer to be able to implement it. Hell, I'm still having trouble understanding the core concepts of the algorithm due to it's apparent complexity.

So I'd like to ask those with much more experience than me. Is it even practical in the first place to implement SIFT for such purpose? Could I do it with the JDK alone (no other addons, if even possible)? How would I go about doing it?

Thanks in advance


回答1:


The Fiji image processing package, which extends ImageJ, has a wiki website with information on its SIFT plugin:

http://pacific.mpi-cbg.de/wiki/index.php/Feature_Extraction

The source code of the SIFT implementation in java is available in the mpicbg.git repository:

http://pacific.mpi-cbg.de/cgi-bin/gitweb.cgi?p=mpicbg.git

The library that includes the SIFT feature extraction and feature matching is the mpicbg.jar, under Fiji.app/jars/ folder when you download Fiji.

Fiji can be downloaded from here:

http://pacific.mpi-cbg.de/wiki/index.php/Downloads

An example of usage of the SIFT plugin is the registration of consecutive slices in an electron microscopy stack. See this page:

http://pacific.mpi-cbg.de/wiki/index.php/Register_Virtual_Stack_Slices

The source code will teach you how to use the library for SIFT feature extraction and for computing transformation models from sets of matching features:

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




回答2:


You might want to consider ImageJ - http://en.wikipedia.org/wiki/ImageJ

There is a SIFT plugin for it.

And check answers on stackoverflow here - Using SIFT for Augmented Reality




回答3:


This tutorial in openimaj shows a step by step procedure on how to use SIFT from OpenImaj library.

http://openimaj.org/tutorial/sift-and-feature-matching.html

However, If you need to the java implementation, as the tutorial says,

We’ll use the difference-of-Gaussian feature detector which we describe with a SIFT descriptor. The features we find are described in a way which makes them invariant to size changes, rotation and position. These are quite powerful features and are used in a variety of tasks. The standard implementation of SIFT in OpenIMAJ can be found in the DoGSIFTEngine class:

The API method reference for the "DoGSIFTEngine" can be found by going through the following link.

http://openimaj.org/apidocs/org/openimaj/image/feature/local/engine/DoGSIFTEngine.html

Here is the link to the full implementation

http://openimaj.org/apidocs/src-html/org/openimaj/image/feature/local/engine/DoGSIFTEngine.html



来源:https://stackoverflow.com/questions/5234517/implementing-sift-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!