您的位置:首页 > 产品设计 > UI/UE

LIRE源代码分析 1:基本接口DocumentBuilder和ImageSearcher

2016-10-17 14:59 190 查看
Lucene是一个开源的强大的索引工具,但是它仅限于文本索引。基于内容的图像检索(content- based image retrieval,CBIR)要求我们利用图像的一些基本特征(如颜色纹理形状以及sift,surf等等)搜索相似的图片,LIRE(Lucene Image Retrieval)是一款基于lucene的图像特征索引工具,它能帮助我们方便的对图像特征建立索引和搜索,从而实现搜索相似的图像。



LIRE开发相关的资源准备:

LIRE官网: http://www.semanticmetadata.net/lire/
包和源码: http://code.google.com/p/lire/
基本使用示例: http://www.semanticmetadata.net/wiki/doku.php?id=start
API: http://www.itec.uni-klu.ac.at/lire/nightly/api/index.html 由于需要做一款Android端的图片检索系统,在此对LIRE的整体结构和基本接口的源码进行研究。这里我们需要加入LIRE的源码,参考:http://jingyan.baidu.com/article/454316ab596470f7a7c03aab.html 新建一个java工程将lire.jar、其他jar包以及jire.jar的源文件导入工程。

我使用的IDE是MyEclipse 10



从项目的目录结构可以看出所有的包的前缀都是“net.semanticmetadata.lire”,net.semanticmetadata.lire这个目录下主要是接口的定义可以分为2类,

DocumentBuilder:用于生成索引

ImageSearcher:用于检索

其实lire的基本接口主要完成两项工作,生成索引和进行检索。生成索引就是根据图片提取特征向量,然后存储特征向量到索引的过程。检索就是根据输入图片的特征向量到索引中查找相似图片的过程。

先来看看DocumentBuilder的相关类定义

DocumentBuilder:接口,定义了基本的方法。

AbstractDocumentBuilder:抽象类,实现了DocumentBuilder接口。

DocumentBuilderFactory:用于创建DocumentBuilder的工厂类。

DocumentBuilder相关的类的继承关系如下图所示。可见,各种算法类都继承了AbstractDocumentBuilder,而AbstractDocumentBuilder实现了DocumentBuilder。



再来看看与ImageSearcher相关的类的定义:

ImageSearcher:接口,定义了基本的方法。

AbstractImageSearcher:抽象类,实现了ImageSearcher接口。

ImageSearcherFactory:用于创建ImageSearcher的工厂类。

ImageSearcher相关的类的继承关系如下图所示。可见,各种算法类都继承了AbstractImageSearcher,而AbstractImageSearcher实现了ImageSearcher接口。



此外还有一个结构体:

ImageSearchHits:用于存储搜索的结果。
“lire.imageanalysis”里面存储的是lire支持的方法的实现类。每个类以其实现的方法命名。



这些方法的算法有的位于“lire.imageanalysis”的子包中。

比如CEDD算法的实现类位于“lire.imageanalysis.cedd”中;

ColorLayout算法的实现类位于“lire.imageanalysis.mpeg7”中。
“lire.impl”里面存储的是lire支持的方法的DocumentBuilder和ImageSearcher。命名规则是***DocumentBuilder或者***ImageSearcher(***代表方法名称)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐