所以我正在研究一个简单的Java应用程序,它允许用户将图像作为查询输入,并让应用程序将其与图像数据库(基本上只是不同图像的目录)进行比较。我基本上正在研究几种图像相似性测量技术,以找出适合比较汽车图片的技术。
我一直在做一些阅读,除了FFT / SSIM之外,我读过SIFT算法可以产生非常好的结果。但是,作为一个只有一年左右的基本Java经验的人,我真的不确定我是否是一个足够好的程序员才能实现它。天啊,由于它的明显复杂性,我仍然无法理解算法的核心概念。
所以我想问那些经验比我多的人。首先为此目的实施SIFT是否实用?我可以单独使用JDK(没有其他插件,如果可能的话)吗?我该怎么做呢?
提前致谢
斐济图像处理软件包扩展了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特征提取以及从多组匹配特征计算转换模型:
你可能想要考虑ImageJ - http://en.wikipedia.org/wiki/ImageJ
有一个SIFT插件。
并在这里检查stackoverflow上的答案 - Using SIFT for Augmented Reality
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