LIRE(Lucene Image REtrieval)提供一种的简单方式来建立基于图像特性的Lucene索引。利用该索引就可以构建一个基于内容的图像检索(content- based image retrieval,CBIR)系统,来搜索类似的图像。LIRE使用的特性都取自MPEG-7标准: ScalableColor、ColorLayout、EdgeHistogram。 java
搜索类似图片的方法ui
使用 ImageSearcherFactory 建立 ImageSearcher。例如ImageSearcherFactory.createDefaultSearcher()。spa
ImageSearcher 能够经过 InputStream 或 BufferedImage,或者一个描述图像的Lucene的 Document 进行检索。 例如使用search(BufferedImage, IndexReader) 或者search(Document, IndexReader).code
返回的结果是一个 ImageSearchHits 相似于Lucene 中的Hits。索引
/** * Simple image retrieval with Lire * @author Mathias Lux, mathias <at> juggle <dot> at */ public class Searcher { public static void main(String[] args) throws IOException { // Checking if arg[0] is there and if it is an image. BufferedImage img = null; boolean passed = false; if (args.length > 0) { File f = new File(args[0]); if (f.exists()) { try { img = ImageIO.read(f); passed = true; } catch (IOException e) { e.printStackTrace(); } } } if (!passed) { System.out.println("No image given as first argument."); System.out.println("Run \"Searcher <query image>\" to search for <query image>."); System.exit(1); } IndexReader ir = DirectoryReader.open(FSDirectory.open(new File("index"))); ImageSearcher searcher = ImageSearcherFactory.createCEDDImageSearcher(10); ImageSearchHits hits = searcher.search(img, ir); for (int i = 0; i < hits.length(); i++) { String fileName = hits.doc(i).getValues(DocumentBuilder.FIELD_NAME_IDENTIFIER)[0]; System.out.println(hits.score(i) + ": \t" + fileName); } } }