在Java中实现SIFT

问题描述 投票:4回答:3

所以我正在研究一个简单的Java应用程序,它允许用户将图像作为查询输入,并让应用程序将其与图像数据库(基本上只是不同图像的目录)进行比较。我基本上正在研究几种图像相似性测量技术,以找出适合比较汽车图片的技术。

我一直在做一些阅读,除了FFT / SSIM之外,我读过SIFT算法可以产生非常好的结果。但是,作为一个只有一年左右的基本Java经验的人,我真的不确定我是否是一个足够好的程序员才能实现它。天啊,由于它的明显复杂性,我仍然无法理解算法的核心概念。

所以我想问那些经验比我多的人。首先为此目的实施SIFT是否实用?我可以单独使用JDK(没有其他插件,如果可能的话)吗?我该怎么做呢?

提前致谢

java image comparison sift
3个回答
9
投票

斐济图像处理软件包扩展了ImageJ,它有一个wiki网站,上面有关于其SIFT插件的信息:

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

java中的SIFT实现的源代码可以在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


1
投票

你可能想要考虑ImageJ - http://en.wikipedia.org/wiki/ImageJ

有一个SIFT插件。

并在这里检查stackoverflow上的答案 - Using SIFT for Augmented Reality


0
投票

openimaj中的本教程展示了如何从OpenImaj库中使用SIFT的分步过程。

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

但是,如果你需要java实现,正如教程所说,

我们将使用我们用SIFT描述符描述的高斯差分特征检测器。我们找到的特征以一种使它们对尺寸变化,旋转和位置不变的方式进行描述。这些功能非常强大,可用于各种任务。可以在DoGSIFTEngine类中找到OpenIMAJ中SIFT的标准实现:

可以通过以下链接找到“DoGSIFTEngine”的API方法参考。

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

© www.soinside.com 2019 - 2024. All rights reserved.