一、LIRE 检索框架

在图像检索的实际应用开发中,由于图像包含的信息很多,直接利用原始的图像像素信息进行检索其运算量非常大,但是可以利用一些从图像中抽取出的特征来表征一幅图像的内容,而这些特征是由有限字符构成字符数组,因此可以利用全文检索技术来实现图像的检索。LIRE (Lucene Image REtrieval)就是基于Lucene全文索引工具包开发的开源Java类库。
LIRE框架分为两大部分:索引生成部分(即特征库生成部分)和利用输入图像提取出的特征检索出相同或相似的库图像。创建索引的过程就是先提取图像特征,将这些图像特
征视为文本,利用Lucene全文索引来建立特征的索引,创建索引的过程主要包括建立待索引的图像文件目录,将文件目录中的图像读入,然后利用Document Builder Factory
类获取要创建的索引类型,利用Index Writer Config配置LUCENE版本,最后提取特征并将特征写入索引文件中。在LIRE中,特征是以直方图的形式来表征图像,即LIRE索引文件中保存了直方图特征,同时还保存了图像名称、路径等图像信息。在实现图像检索时先要读取本地创建的索引文件,然后创建图像的特征实例,最后进行搜索匹配。LIRE检索图像的过程如下图所示,对查询图像采用相同的特征提取方法,然后再到特征库中利用相似性度量方法匹配查找最相似的特征,最后可以映射到最相似的图像。

LIRE 中实现的特征方法大多符合 MPEG 标准的方法,在 LIRE 中主要实现的图像特征有:
1)HSV 和 RGB 颜色直方图;
2)MPEG-7 标准相关的颜色特征,可以是可变长颜色、颜色布局;
3)Tamura 相关纹理特征,包括对比度,粗糙度和方向性;
4)Gabor 纹理特征;
5)JPEG 系数直方图;
6)色彩与边缘方向性的描述符;
7)分层梯度方向直方图;
8)尺度不变特征变换;
9)模糊颜色与纹理直方图。
利用 LIRE 可以很方便地创建图像特征索引并利用该索引便捷地搜索相似的图像,同时也可以向 LIRE 中添加新的特征,实现特征的扩展与修改。

二、LIRE源码分析

通过前面的介绍我们知道Lire的基本接口主要完成两项工作,生成索引和进行检索。生成索引就是根据图片提取特征向量,然后存储特征向量到索引的过程。检索就是根据输入图片的特征向量到索引中查找相似图片的过程。

一、DocumentBuilder:用于生成索引

DocumentBuilder对象由DocumentBuilderFactory工厂类创建,DocumentBuilderFactory源码如下

package net.semanticmetadata.lire;import net.semanticmetadata.lire.imageanalysis.*;
import net.semanticmetadata.lire.impl.ChainedDocumentBuilder;
import net.semanticmetadata.lire.impl.CorrelogramDocumentBuilder;
import net.semanticmetadata.lire.impl.GenericDocumentBuilder;
import net.semanticmetadata.lire.impl.GenericFastDocumentBuilder;/*** Use DocumentBuilderFactory to create a DocumentBuilder, which* will create Lucene Documents from images.  <br/>* This file is part of the Caliph and Emir project: http://www.SemanticMetadata.net* <br>Date: 31.01.2006* <br>Time: 23:00:32** @author Mathias Lux, mathias@juggle.at*/
public class DocumentBuilderFactory {/*** Creates a simple version of a DocumentBuilder. In this case the* {@link net.semanticmetadata.lire.imageanalysis.CEDD} is used as a feature** @return a simple and efficient DocumentBuilder.* @see net.semanticmetadata.lire.imageanalysis.CEDD*/public static DocumentBuilder getDefaultDocumentBuilder() {return new GenericFastDocumentBuilder(CEDD.class, DocumentBuilder.FIELD_NAME_CEDD);}/*** Creates a simple version of a DocumentBuilder using the MPEG/-7 visual features features* all available descriptors are used.** @return a fully featured DocumentBuilder.* @see net.semanticmetadata.lire.imageanalysis.ColorLayout* @see net.semanticmetadata.lire.imageanalysis.EdgeHistogram* @see net.semanticmetadata.lire.imageanalysis.ScalableColor* @deprecated Use ChainedDocumentBuilder instead*/public static DocumentBuilder getExtensiveDocumentBuilder() {ChainedDocumentBuilder cb = new ChainedDocumentBuilder();cb.addBuilder(DocumentBuilderFactory.getColorLayoutBuilder());cb.addBuilder(DocumentBuilderFactory.getEdgeHistogramBuilder());cb.addBuilder(DocumentBuilderFactory.getScalableColorBuilder());return cb;}/*** Creates a fast (byte[] based) version of the MPEG-7 ColorLayout document builder.** @return the document builder.*/public static DocumentBuilder getColorLayoutBuilder() {return new GenericFastDocumentBuilder(ColorLayout.class, DocumentBuilder.FIELD_NAME_COLORLAYOUT);}/*** Creates a fast (byte[] based) version of the MPEG-7 EdgeHistogram document builder.** @return the document builder.*/public static DocumentBuilder getEdgeHistogramBuilder() {return new GenericFastDocumentBuilder(EdgeHistogram.class, DocumentBuilder.FIELD_NAME_EDGEHISTOGRAM);}/*** Creates a fast (byte[] based) version of the MPEG-7 ColorLayout document builder.** @return the document builder.*/public static DocumentBuilder getScalableColorBuilder() {return new GenericFastDocumentBuilder(ScalableColor.class, DocumentBuilder.FIELD_NAME_SCALABLECOLOR);}/*** Creates a simple version of a DocumentBuilder using ScalableColor.** @return a fully featured DocumentBuilder.* @see net.semanticmetadata.lire.imageanalysis.ScalableColor* @deprecated Use ColorHistogram and the respective factory methods to get it instead*/public static DocumentBuilder getColorOnlyDocumentBuilder() {return DocumentBuilderFactory.getScalableColorBuilder();}/*** Creates a simple version of a DocumentBuilder using the ColorLayout feature. Don't use this method any more but* use the respective feature bound method instead.** @return a simple and fast DocumentBuilder.* @see net.semanticmetadata.lire.imageanalysis.ColorLayout* @deprecated use MPEG-7 feature ColorLayout or CEDD, which are both really fast.*/public static DocumentBuilder getFastDocumentBuilder() {return DocumentBuilderFactory.getColorLayoutBuilder();}/*** Creates a DocumentBuilder for the AutoColorCorrelation feature. Note that the extraction of this feature* is especially slow! So use it only on small images! Images that do not fit in a 200x200 pixel box are* resized by the document builder to ensure shorter processing time. See* {@link net.semanticmetadata.lire.imageanalysis.AutoColorCorrelogram} for more information on the image feature.* Be sure to use the same options for the ImageSearcher as you used for the DocumentBuilder.** @return the created AutoCorrelation feature DocumentBuilder.*/public static DocumentBuilder getAutoColorCorrelogramDocumentBuilder() {return new GenericDocumentBuilder(AutoColorCorrelogram.class, DocumentBuilder.FIELD_NAME_AUTOCOLORCORRELOGRAM, GenericDocumentBuilder.Mode.Fast);}/*** Creates a DocumentBuilder for the AutoColorCorrelation feature. Note that the extraction of this feature* is especially slow, but this is a more fast, but less accurate settings version!* Images that do not fit in a defined bounding box they are* resized by the document builder to ensure shorter processing time. See* {@link net.semanticmetadata.lire.imageanalysis.AutoColorCorrelogram} for more information on the image feature.* Be sure to use the same options for the ImageSearcher as you used for the DocumentBuilder.** @return the created AutoCorrelation feature DocumentBuilder.* @deprecated Use #getAutoColorCorrelogramDocumentBuilder instead.*/public static DocumentBuilder getFastAutoColorCorrelationDocumentBuilder() {return new CorrelogramDocumentBuilder(AutoColorCorrelogram.Mode.SuperFast);}/*** Creates a DocumentBuilder for the CEDD feature. See* {@link net.semanticmetadata.lire.imageanalysis.CEDD} for more information on the image feature.* Be sure to use the same options for the ImageSearcher as you used for the DocumentBuilder.** @return the created CEDD feature DocumentBuilder.*/public static DocumentBuilder getCEDDDocumentBuilder() {
//        return new CEDDDocumentBuilder();return new GenericFastDocumentBuilder(CEDD.class, DocumentBuilder.FIELD_NAME_CEDD);}/*** Creates a DocumentBuilder for the FCTH feature. See* {@link net.semanticmetadata.lire.imageanalysis.FCTH} for more information on the image feature.* Be sure to use the same options for the ImageSearcher as you used for the DocumentBuilder.** @return the created FCTH feature DocumentBuilder.*/public static DocumentBuilder getFCTHDocumentBuilder() {return new GenericDocumentBuilder(FCTH.class, DocumentBuilder.FIELD_NAME_FCTH, GenericDocumentBuilder.Mode.Fast);}/*** Creates a DocumentBuilder for the JCD feature. See* {@link net.semanticmetadata.lire.imageanalysis.JCD} for more information on the image feature.* Be sure to use the same options for the ImageSearcher as you used for the DocumentBuilder.** @return the created DocumentBuilder*/public static DocumentBuilder getJCDDocumentBuilder() {return new GenericFastDocumentBuilder(JCD.class, DocumentBuilder.FIELD_NAME_JCD);}/*** Creates a DocumentBuilder for the JpegCoefficientHistogram feature. See* {@link net.semanticmetadata.lire.imageanalysis.JpegCoefficientHistogram} for more* information on the image feature.* Be sure to use the same options for the ImageSearcher as you used for the DocumentBuilder.** @return the created DocumentBuilder*/public static DocumentBuilder getJpegCoefficientHistogramDocumentBuilder() {return new GenericDocumentBuilder(JpegCoefficientHistogram.class, DocumentBuilder.FIELD_NAME_JPEGCOEFFS, GenericDocumentBuilder.Mode.Fast);}/*** Creates a DocumentBuilder for simple RGB color histograms. See* {@link net.semanticmetadata.lire.imageanalysis.SimpleColorHistogram} for more* information on the image feature.* Be sure to use the same options for the ImageSearcher as you used for the DocumentBuilder.** @return the created feature DocumentBuilder.*/public static DocumentBuilder getColorHistogramDocumentBuilder() {return new GenericDocumentBuilder(SimpleColorHistogram.class, DocumentBuilder.FIELD_NAME_COLORHISTOGRAM, GenericDocumentBuilder.Mode.Fast);}/*** Creates a DocumentBuilder for three Tamura features. See* {@link net.semanticmetadata.lire.imageanalysis.Tamura} for more* information on the image feature.* Be sure to use the same options for the ImageSearcher as you used for the DocumentBuilder.** @return the created Tamura feature DocumentBuilder.*/public static DocumentBuilder getTamuraDocumentBuilder() {return new GenericFastDocumentBuilder(Tamura.class, DocumentBuilder.FIELD_NAME_TAMURA);}/*** Creates a DocumentBuilder for the Gabor feature. See* {@link net.semanticmetadata.lire.imageanalysis.Gabor} for more* information on the image feature.* Be sure to use the same options for the ImageSearcher as you used for the DocumentBuilder.** @return the created Tamura feature DocumentBuilder.*/public static DocumentBuilder getGaborDocumentBuilder() {return new GenericFastDocumentBuilder(Gabor.class, DocumentBuilder.FIELD_NAME_GABOR);}/*** Creates and returns a DocumentBuilder, which contains all available features. For* AutoColorCorrelogram the getAutoColorCorrelogramDocumentBuilder() is used. Therefore* it is compatible with the respective Searcher.** @return a combination of all available features.*/public static DocumentBuilder getFullDocumentBuilder() {ChainedDocumentBuilder cdb = new ChainedDocumentBuilder();cdb.addBuilder(DocumentBuilderFactory.getExtensiveDocumentBuilder());cdb.addBuilder(DocumentBuilderFactory.getAutoColorCorrelogramDocumentBuilder());cdb.addBuilder(DocumentBuilderFactory.getCEDDDocumentBuilder());cdb.addBuilder(DocumentBuilderFactory.getFCTHDocumentBuilder());cdb.addBuilder(DocumentBuilderFactory.getColorHistogramDocumentBuilder());cdb.addBuilder(DocumentBuilderFactory.getTamuraDocumentBuilder());cdb.addBuilder(DocumentBuilderFactory.getGaborDocumentBuilder());return cdb;}
}

从源码可以看出,不同的方法对应不同的特征提取方式。

(1)getDefaultDocumentBuilder()

CEDD(Color and Edge Directivity Descriptor,CEDD)颜色和边缘的方向性描述符特征的提取

(2)getColorLayoutBuilder()

MPEG-7图像颜色布局描述符特征的提取

(3)getEdgeHistogramBuilder()

MPEG-7图像边缘直方图描述符特征的提取

(4)getScalableColorBuilder()

(5)getAutoColorCorrelogramDocumentBuilder()

MPEG-7颜色相关直方图描述符特征的提取

(6)getCEDDDocumentBuilder()

CEDD(Color and Edge Directivity Descriptor,CEDD)颜色和边缘的方向性描述符特征的提取

(7)getFCTHDocumentBuilder()

FCTH(Fuzzy Color and Texture Histogram)模糊颜色和纹理直方图描述符特征的提取

(8)getJCDDocumentBuilder

JCD是CEDD和FCTH这两种特征的一种组合.

(9)getJpegCoefficientHistogramDocumentBuilder()

(10)getColorHistogramDocumentBuilder()

颜色直方图描述符

(11)getTamuraDocumentBuilder()

Tamura 纹理分析法

(12)getGaborDocumentBuilder()

Gabor滤波器

二、ImageSearcher:用于检索

LIRE源代码分析 3:整体结构相关推荐

  1. LIRe 源代码分析 1:整体结构

    ===================================================== LIRe源代码分析系列文章列表: LIRe 源代码分析 1:整体结构 LIRe 源代码分析 ...

  2. LIRe 源代码分析 7:算法类[以颜色布局为例]

    ===================================================== LIRe源代码分析系列文章列表: LIRe 源代码分析 1:整体结构 LIRe 源代码分析 ...

  3. LIRe 源代码分析 6:检索(ImageSearcher)[以颜色布局为例]

    ===================================================== LIRe源代码分析系列文章列表: LIRe 源代码分析 1:整体结构 LIRe 源代码分析 ...

  4. LIRe 源代码分析 5:提取特征向量[以颜色布局为例]

    ===================================================== LIRe源代码分析系列文章列表: LIRe 源代码分析 1:整体结构 LIRe 源代码分析 ...

  5. LIRe 源代码分析 4:建立索引(DocumentBuilder)[以颜色布局为例]

    ===================================================== LIRe源代码分析系列文章列表: LIRe 源代码分析 1:整体结构 LIRe 源代码分析 ...

  6. LIRe 源代码分析 3:基本接口(ImageSearcher)

    ===================================================== LIRe源代码分析系列文章列表: LIRe 源代码分析 1:整体结构 LIRe 源代码分析 ...

  7. LIRe 源代码分析 2:基本接口(DocumentBuilder)

    ===================================================== LIRe源代码分析系列文章列表: LIRe 源代码分析 1:整体结构 LIRe 源代码分析 ...

  8. Media Player Classic - HC 源代码分析 1:整体结构

    ===================================================== Media Player Classic - HC 源代码分析系列文章列表: Media P ...

  9. MediaInfo源代码分析 1:整体结构

    ===================================================== MediaInfo源代码分析系列文章列表: MediaInfo源代码分析 1:整体结构 Me ...

最新文章

  1. hadoop2.2.0安装,完全分布式安装
  2. python2x 安装 psutil
  3. MySQL中使用外键约束的注意事项
  4. mysql的service name_安装MYSQL出错:a windows service with the name MYSQL already...service解决...
  5. UE4中Bebavior Tree中Delay及其后面代码失效的原因
  6. label用js,jquery取值赋值,以及怎么在后台取值
  7. 设置eclipse中xml的默认编辑器、行数、xsd和dtd
  8. js操作url的常用函数
  9. 《设计模式系列》---备忘录模式
  10. 垂直型与水平型电子商务网站的理解
  11. 三星android版本4.2.2,三星 Galaxy Note (i9220) 安卓4.2.2 稳定 流畅版
  12. linux ps命令是什么,linux中的ps命令的详细解释
  13. 1×pbs缓冲液配方_PBS缓冲液配方.doc
  14. 测试人的后半生:跑滴滴还是送外卖?
  15. SLAM导航机器人零基础实战系列:(五)树莓派3开发环境搭建——2.安装ros-kinetic
  16. FISCO BCOS上使用第三方CA证书底层节点部署实操
  17. android 打开系统键盘的方法
  18. 喜闻乐见 iPhone终于要支持第三方应用了?
  19. 迅雷链流量扶持放大招:手雷链克专区上线!
  20. 2006年最受瞩目的七大IT技术(1)

热门文章

  1. 活力长者社区(C语言)
  2. 华为联通4g怎么显示无服务器,怎么设置中国联通华为沃4g ltemobile wifi?
  3. java printwriter用法_Java中printwriter类的用法 | 学步园
  4. 《Code Complete 代码大全》中用到的英文
  5. mask-rcnn解读
  6. 人工智能PK高鹗,续写《红楼梦》
  7. 年度账单刷屏的背后,隐藏了哪些不为人知的秘密?
  8. 均方根误差,均方误差,均方根,均方差,方差的区别
  9. 基于C语言的词法分析实验
  10. Hadoop Kerberos 集成