`

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

 
阅读更多

 

注:此前写了一系列的文章,分析LIRe的源代码,在此列一个列表:

LIRe 源代码分析 1:整体结构
LIRe 源代码分析 2:基本接口(DocumentBuilder)
LIRe 源代码分析 3:基本接口(ImageSearcher)
LIRe 源代码分析 4:建立索引(DocumentBuilder)[以颜色布局为例]
LIRe 源代码分析 5:提取特征向量[以颜色布局为例]
LIRe 源代码分析 6:检索(ImageSearcher)[以颜色布局为例]
LIRe 源代码分析 7:算法类[以颜色布局为例]

 

前几篇文章介绍了LIRe 的基本接口:

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

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

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

现在来看一看它的实现部分,本文先来看一看建立索引((DocumentBuilder))部分。不同的特征向量提取方法的建立索引的类各不相同,它们都位于“net.semanticmetadata.lire.impl”中,如下图所示:

由图可见,每一种方法对应一个DocumentBuilder和一个ImageSearcher,类的数量非常的多,无法一一分析。在这里仅分析一个比较有代表性的:颜色布局。

颜色直方图建立索引的类的名称是ColorLayoutDocumentBuilder,该类继承了AbstractDocumentBuilder,它的源代码如下所示:

 

/*
 * This file is part of the LIRe project: http://www.semanticmetadata.net/lire
 * LIRe is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * LIRe is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with LIRe; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * We kindly ask you to refer the following paper in any publication mentioning Lire:
 *
 * Lux Mathias, Savvas A. Chatzichristofis. Lire: Lucene Image Retrieval 鈥�
 * An Extensible Java CBIR Library. In proceedings of the 16th ACM International
 * Conference on Multimedia, pp. 1085-1088, Vancouver, Canada, 2008
 *
 * http://doi.acm.org/10.1145/1459359.1459577
 *
 * Copyright statement:
 * --------------------
 * (c) 2002-2011 by Mathias Lux (mathias@juggle.at)
 *     http://www.semanticmetadata.net/lire
 */
package net.semanticmetadata.lire.impl;

import net.semanticmetadata.lire.AbstractDocumentBuilder;
import net.semanticmetadata.lire.DocumentBuilder;
import net.semanticmetadata.lire.imageanalysis.ColorLayout;
import net.semanticmetadata.lire.utils.ImageUtils;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;

import java.awt.image.BufferedImage;
import java.util.logging.Logger;

/**
 * Provides a faster way of searching based on byte arrays instead of Strings. The method
 * {@link net.semanticmetadata.lire.imageanalysis.ColorLayout#getByteArrayRepresentation()} is used
 * to generate the signature of the descriptor much faster.
 * User: Mathias Lux, mathias@juggle.at
 * Date: 30.06.2011
 */
public class ColorLayoutDocumentBuilder extends AbstractDocumentBuilder {
    private Logger logger = Logger.getLogger(getClass().getName());
    public static final int MAX_IMAGE_DIMENSION = 1024;

    public Document createDocument(BufferedImage image, String identifier) {
        assert (image != null);
        BufferedImage bimg = image;
        // Scaling image is especially with the correlogram features very important!
        // All images are scaled to guarantee a certain upper limit for indexing.
        if (Math.max(image.getHeight(), image.getWidth()) > MAX_IMAGE_DIMENSION) {
            bimg = ImageUtils.scaleImage(image, MAX_IMAGE_DIMENSION);
        }
        Document doc = null;
        logger.finer("Starting extraction from image [ColorLayout - fast].");
        ColorLayout vd = new ColorLayout();
        vd.extract(bimg);
        logger.fine("Extraction finished [ColorLayout - fast].");

        doc = new Document();
        doc.add(new Field(DocumentBuilder.FIELD_NAME_COLORLAYOUT_FAST, vd.getByteArrayRepresentation()));
        if (identifier != null)
            doc.add(new Field(DocumentBuilder.FIELD_NAME_IDENTIFIER, identifier, Field.Store.YES, Field.Index.NOT_ANALYZED));

        return doc;
    }
}


从源代码来看,其实主要就一个函数:createDocument(BufferedImage image, String identifier),该函数的流程如下所示:

 

1.如果输入的图像分辨率过大(在这里是大于1024),则将图像缩小。

2.新建一个ColorLayout类型的对象vd。

3.调用vd.extract()提取特征向量。

4.调用vd.getByteArrayRepresentation()获得特征向量。

5.将获得的特征向量加入Document,返回Document。

 

其实其他方法的DocumentBuilder的实现和颜色直方图的DocumentBuilder差不多。例如CEDDDocumentBuilder的源代码如下所示:

 

/*
 * This file is part of the LIRe project: http://www.semanticmetadata.net/lire
 * LIRe is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * LIRe is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with LIRe; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * We kindly ask you to refer the following paper in any publication mentioning Lire:
 *
 * Lux Mathias, Savvas A. Chatzichristofis. Lire: Lucene Image Retrieval 鈥�
 * An Extensible Java CBIR Library. In proceedings of the 16th ACM International
 * Conference on Multimedia, pp. 1085-1088, Vancouver, Canada, 2008
 *
 * http://doi.acm.org/10.1145/1459359.1459577
 *
 * Copyright statement:
 * ~~~~~~~~~~~~~~~~~~~~
 * (c) 2002-2011 by Mathias Lux (mathias@juggle.at)
 *     http://www.semanticmetadata.net/lire
 */
package net.semanticmetadata.lire.impl;

import net.semanticmetadata.lire.AbstractDocumentBuilder;
import net.semanticmetadata.lire.DocumentBuilder;
import net.semanticmetadata.lire.imageanalysis.CEDD;
import net.semanticmetadata.lire.utils.ImageUtils;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;

import java.awt.image.BufferedImage;
import java.util.logging.Logger;

/**
 * Provides a faster way of searching based on byte arrays instead of Strings. The method
 * {@link net.semanticmetadata.lire.imageanalysis.CEDD#getByteArrayRepresentation()} is used
 * to generate the signature of the descriptor much faster.
 * User: Mathias Lux, mathias@juggle.at
 * Date: 12.03.2010
 * Time: 13:21:35
 *
 * @see GenericFastDocumentBuilder
 * @deprecated use GenericFastDocumentBuilder instead.
 */
public class CEDDDocumentBuilder extends AbstractDocumentBuilder {
    private Logger logger = Logger.getLogger(getClass().getName());
    public static final int MAX_IMAGE_DIMENSION = 1024;

    public Document createDocument(BufferedImage image, String identifier) {
        assert (image != null);
        BufferedImage bimg = image;
        // Scaling image is especially with the correlogram features very important!
        // All images are scaled to guarantee a certain upper limit for indexing.
        if (Math.max(image.getHeight(), image.getWidth()) > MAX_IMAGE_DIMENSION) {
            bimg = ImageUtils.scaleImage(image, MAX_IMAGE_DIMENSION);
        }
        Document doc = null;
        logger.finer("Starting extraction from image [CEDD - fast].");
        CEDD vd = new CEDD();
        vd.extract(bimg);
        logger.fine("Extraction finished [CEDD - fast].");

        doc = new Document();
        doc.add(new Field(DocumentBuilder.FIELD_NAME_CEDD, vd.getByteArrayRepresentation()));
        if (identifier != null)
            doc.add(new Field(DocumentBuilder.FIELD_NAME_IDENTIFIER, identifier, Field.Store.YES, Field.Index.NOT_ANALYZED));

        return doc;
    }
}



 

 

分享到:
评论

相关推荐

    LIRE 源代码

    LIRE(Lucene Image REtrieval)提供一种的简单方式来创建基于图像特性的Lucene索引。利用该索引就能够构建一个基于内容的图像检索(content- based image retrieval,CBIR)系统,来...这是LIRE的源代码以及相关文档。

    lire 图片索引工具

    **Lire 图片索引工具详解** 在信息技术领域,数据检索和分析是至关重要的环节,尤其是在海量图片数据中寻找特定图像或实现相似图像搜索时。`Lire`(Latent Image REtrieval)是一个用于图像内容检索的Java库,它为...

    mpeg 7 demo(LIRE)

    在LIREDemo-0.7这个压缩包中,包含了LIRE库的源代码和相关示例,供用户学习和研究。通过这些示例,我们可以了解到如何利用LIRE库实现以下关键功能: 1. **特征提取**:LIRE支持多种特征提取算法,如颜色直方图、...

    Java《基于LIRE搭建的图像检索,实现以图搜图》+源代码+设计资料

    基于LIRE搭建的图像检索,实现以图搜图 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! 1、该资源内...

    Lire图片搜索示例

    此外,研究Lire的源代码和官方文档可以更好地理解其内部机制和优化方法。 通过以上介绍,你应该对Lire图片搜索有了基本的理解。`LireDemo`项目将提供一个实践平台,帮助你直观地感受和掌握Lire的使用。在实际操作中...

    lire图片搜索图片样例

    总结来说,Lire图片搜索图片样例演示了如何利用Lire库在大量图像中找到相似图片,这涉及图像特征的提取、索引的建立和相似度的计算。通过这种方式,我们可以实现高效的图像检索,这对于许多现代应用程序和系统来说是...

    Lire图片检索

    Lire允许开发者自定义特征提取器或优化现有的索引策略以适应特定需求。例如,你可以使用分布式Lucene(如Solr)来处理大规模的图像数据集,或者结合其他机器学习技术提高检索精度。 总之,Lire是一个强大的图片检索...

    lire图形检索

    在给出的代码示例中,`createIndex`方法演示了如何使用LIRE创建索引。首先,通过`DocumentBuilderFactory`获取适当的`DocumentBuilder`,然后配置`IndexWriterConfig`和`Analyzer`。接着,遍历要索引的图像文件,...

    最新LIRE以图找图 java实例

    通过理解和实践这个Java实例,你可以深入学习LIRE库的用法,并掌握以图找图的基本技术,这对于图像处理、计算机视觉以及大数据分析等领域都有极大的帮助。同时,这个实例也可以作为进一步研究图像检索算法和优化索引...

    LIRE-CIBR:测试使用 LIRE 库为基于内容的图像检索创建基于 Lucene 的检索索引

    4. **建立索引**:将这些视觉词构建成一个索引,这是Lucene擅长的部分。每个图像对应一条索引记录,包含了其所有相关的视觉词。 5. **查询与检索**:当用户提交一个查询图像时,同样进行特征提取和编码,然后在...

    LIRE-0.9.5

    LIRE(Lucene Image REtrieval)提供一种的简单方式来创建基于图像特性的Lucene索引。利用该索引就能够构建一个基于内容的图像检索(content- based image retrieval,CBIR)系统,来...这是LIRE的源代码以及相关文档。

    LIRE示例应用:LireDemo

    mysqlLIRE(Lucene Image REtrieval)是一个强大的工具,它简化了基于图像特征的Lucene索引的创建过程。该程序利用MPEG-7标准中的ScalableColor、ColorLayout和EdgeHistogram等特性,为图像内容的检索提供了高效而...

    基于Lire库搜索相似图片源码

    这个代码片段定义了一个`AverageColor`特征,用于计算图像的平均颜色,然后遍历指定目录下的所有图像,为每张图像构建一个索引。 **3. 搜索相似图片** 有了索引后,我们可以搜索与查询图片相似的图像。以下是一个...

    基于lire的图片搜索功能demo.zip

    4. **查询与匹配**:当用户输入一张查询图像时,LIRE会重复上述步骤,提取特征并编码,然后在索引中寻找与之最匹配的图像。 在“LireDemo”这个项目中,我们可以预期看到以下关键部分: - **设置和配置**:初始化...

    LIRE:开源库,用于基于内容的图像检索,视觉信息检索

    LIRE的生命已尽 该项目不再维护。 我要感谢所有提供帮助,找到了支持之言... LIRE是开放源代码且免费的,我们唯一需要的就是您在工作中使用它。 有关参考,请参见下文。 资料下载 当前在以下位置托管下载: : 。 每晚

    LireDemo (LIRE的例子)

    LIRE(Lucene Image REtrieval)提供一种的简单方式来创建基于图像特性的Lucene索引。LIRE使用的特性都取自MPEG-7标准: ScalableColor、ColorLayout、EdgeHistogram。 这是一个完整的例子程序。

    image-similarity-with-lire:图像相似度

    在“image-similarity-with-lire-master”这个项目中,包含了使用LIRE库进行图像相似度比较的源代码。开发者可以通过阅读和运行这些代码来理解和学习如何在实际应用中实现图像相似度的计算。这将涵盖从安装库、理解...

    Jack LIRE (Linked Record):具有参考和遗传学的量子通用对象系统-开源

    Jack LIRE(链接记录)是量子数据库支持的终身文本记录日记,在记录之间具有引用(链接)功能,并且是用于终身保存文档,照片,音乐等文件的数据库。 日记记录是完全可搜索的。 可以在日记记录中提及文件,以保存...

    LIRE(Lucene Image REtrieval)最新开发包

    LIRE(Lucene Image REtrieval)提供一种的简单方式来创建基于图像特性的Lucene索引。利用该索引就能够构建一个基于内容的图像检索(content- based image retrieval,CBIR)系统,来搜索相似的图像,提取图像特征,...

    elasticsearch-image-1.0-SNAPSHOT.zip elasticsearch插件 以图搜图 LIRE

    将该json丢入es当中,其中image类型为keyword类型即可 数据查询ES语句: GET /imagetest/_search { "query": { "function_score": { "query": { "match_all": {} }, "script_score": { "script": { "inline...

Global site tag (gtag.js) - Google Analytics