主要内容

使用自定义特征包的图像检索

此示例显示了如何使用自定义的特性袋式工作流创建基于内容的图像检索(CBIR)系统。

介绍

基于内容的图像检索(CBIR)系统用于查找视觉上类似于查询图像的图像。CBIR系统的应用可以在许多领域找到,例如基于网络的产品搜索,监视和视觉地位识别。用于实现CBIR系统的常用技术是视觉单词的袋,也称为特征袋[1,2]。袋子特征是一种技术,适用于从文档检索世界的图像检索。而不是使用作为文档检索中的实际单词,而不是使用图像特征作为描述图像的视觉单词。

图像特征是CBIR系统的重要组成部分。这些图像特征用于衡量图像之间的相似性,可以包括全局图像特征,如颜色、纹理和形状。图像特征也可以是局部图像特征,如加速鲁棒特征(SURF)、梯度直方图(HOG)或局部二值模式(LBP)。功能包方法的好处是,可以定制用于创建可视词汇表的功能类型,以适应应用程序。

图像搜索的速度和效率在CBIR系统中也很重要。例如,在少于100张图像的小图像集合中执行暴力搜索是可以接受的,其中将查询图像的特性与集合中每个图像的特性进行比较。对于较大的集合,暴力搜索是不可行的,必须使用更有效的搜索技术。特征包提供了一种简洁的编码方案,使用一组稀疏的视觉词直方图来表示大量的图像。这使得紧凑的存储和通过反向索引数据结构的高效搜索成为可能。

计算机Vision Toolbox™提供可自定义的特点框架框架来实现图像检索系统。以下步骤概述程序:

  1. 选择用于检索的图像特征

  2. 创建一个功能包

  3. 索引图像

  4. 搜索类似图像

在本例中,您将执行以下步骤来创建用于搜索花卉数据集[3]的图像检索系统。这个数据集包含了5种不同类型的花的大约3670张图片。

下载此数据集以用于此示例的其余部分。

压缩数据集的%位置url =“http://download.tensorflow.org/example_images/flower_photos.tgz”;%存储临时文件夹中的输出downloadfolder = tempdir;filename = fullfile(downloadFolder,“flower_dataset.tgz”);

注意,根据你的网络连接,从网上下载数据集可能需要很长时间。下面的命令将在那段时间阻塞MATLAB。或者,您可以使用web浏览器首先将该集下载到您的本地磁盘。如果您选择了这条路径,请将上面的'url'变量重新指向您下载的文件。

%未压缩数据集imageFolder = fullfile (downloadFolder,“flower_photos”);如果〜存在(imagefolder,“dir”%只下载一次disp (“下载花卉数据集(218mb)…”);WebSave(Filename,URL);Untar(文件名,DownloadFolder)结尾FlowerImageSet = ImageageAtastore(imageFolder,“LabelSource”'foldernames'“IncludeSubfolders”,真的);%数据集中图像总数numel(flowerimageset.files)
ans = 3670

步骤1 -选择用于检索的图像特征

用于检索的功能类型取决于集合中的图像类型。例如,如果搜索由场景(海滩,城市,高速公路)组成的图像集合,则优选使用全局图像特征,例如捕获整个场景的颜色内容的颜色直方图。但是,如果目标是在图像集合中找到特定对象,则围绕对象键点提取的本地图像功能是更好的选择。

让我们首先观看一个图像来了解如何接近问题的想法。

%显示一个花图像图I = imread(flowerImageSet.Files{1});imshow(我);

显示的图像为by马里奥

在本例中,目标是使用查询图像中的颜色信息在数据集中搜索类似的花。一个基于颜色空间布局的简单图像特征是一个很好的开始。

下面的函数描述了从给定图像中提取颜色特征的算法。这个函数将被用作extractorFcnbagOfFeatures提取颜色功能。

类型exampleBagOfFeaturesColorExtractor.m
function [features, metrics] = exampleBagOfFeaturesColorExtractor(I) %颜色布局特征提取示例。专为bagfeatures使用。% %从真彩色图像中提取局部色彩布局特征,I和特征返回的%。特性的强度以%指标返回。(~ ~ P) = (I)大小;isColorImage = P == 3;将RGB图像转换为L*a*b* colorspace。L*a*b* colorspace %使您能够轻松量化颜色之间的视觉差异。%在L*a*b*颜色空间中,视觉上相似的颜色在L*a*b*值上有很小的%差异。Ilab = rgb2lab(我); % Compute the "average" L*a*b* color within 16-by-16 pixel blocks. The % average value is used as the color portion of the image feature. An % efficient method to approximate this averaging procedure over % 16-by-16 pixel blocks is to reduce the size of the image by a factor % of 16 using IMRESIZE. Ilab = imresize(Ilab, 1/16); % Note, the average pixel value in a block can also be computed using % standard block processing or integral images. % Reshape L*a*b* image into "number of features"-by-3 matrix. [Mr,Nr,~] = size(Ilab); colorFeatures = reshape(Ilab, Mr*Nr, []); % L2 normalize color features rowNorm = sqrt(sum(colorFeatures.^2,2)); colorFeatures = bsxfun(@rdivide, colorFeatures, rowNorm + eps); % Augment the color feature by appending the [x y] location within the % image from which the color feature was extracted. This technique is % known as spatial augmentation. Spatial augmentation incorporates the % spatial layout of the features within an image as part of the % extracted feature vectors. Therefore, for two images to have similar % color features, the color and spatial distribution of color must be % similar. % Normalize pixel coordinates to handle different image sizes. xnorm = linspace(-0.5, 0.5, Nr); ynorm = linspace(-0.5, 0.5, Mr); [x, y] = meshgrid(xnorm, ynorm); % Concatenate the spatial locations and color features. features = [colorFeatures y(:) x(:)]; % Use color variance as feature metric. metrics = var(colorFeatures(:,1:3),0,2); else % Return empty features for non-color images. These features are % ignored by bagOfFeatures. features = zeros(0,5); metrics = zeros(0,1); end

第2步 - 创建一袋功能

使用要定义的特征类型,下一步是学习中的视觉词汇bagOfFeatures使用一组培训图像。如下所示的代码从数据集中从数据集中选择了用于训练的随机图像,然后列车bagOfFeatures使用“CoreMextractor”选项。

用圆形为false以加载预先训练好的bagfeatures。用圆形设置为false,因为训练过程需要几分钟。示例的其余部分使用预先训练过的bagOfFeatures为了省时间。如果你想重新创建colorBag在本地,集合用圆形真实并考虑计算机视觉工具箱首选项缩短处理时间。

doTraining = false;如果用圆形%选择花图像的随机子集培训赛= spliteachlabel(FlowerimageSet,0.6,“随机”);使用“CustomExtractor”选项创建一个自定义功能包colorbag​​ = bagoffeature(培训,......'comotomxtractor'@exampleBagOfFeaturesColorExtractor,......'词汇',5000);其他的%加载一个预先训练好的bagfeatures加载(“savedColorBagOfFeatures.mat”“colorBag”);结尾

步骤3 - 索引图像

现在bagOfFeatures创建时,整个花卉图像集可以被索引以进行搜索。索引过程使用步骤1中的自定义提取函数从每个图像中提取特征。提取的特征被编码成一个视觉词直方图,并加入到图像索引中。

如果用圆形%创建搜索索引FlowerImageIndex = IndexImages(FlowerImageSet,Colorbag​​,“SaveFeatureLocations”、假);其他的%加载保存的索引加载(“savedColorBagOfFeatures.mat”'flowerimageIndex');结尾

由于索引步骤要处理数以千计的图像,因此本例的其余部分使用已保存的索引来节省时间。您可以通过设置在本地重新创建索引用圆形为true。

第4步 - 搜索类似图像

最后一步是使用redrieximages用于搜索类似图像的功能。

%定义查询图像QueryImage = ReadImage(FlowerImageSet,200);图imshow(queryimage)

显示的图像为byRetinaFunk

%搜索具有相似颜色内容的前5张图片[imageIds,scores] =检索agages(QueryImage,FlowerImageIndex,“NumResults”5);

redrieximages返回每个结果的图像ID和分数。分数是从最好的方式排序。

分数
得分=5×10.4822 0.2143 0.1389 0.1384 0.1320

imageid对应于图像集中与查询图像相似的图像。

%使用蒙太奇显示结果。图蒙太奇(FlowerImageSet.files(imageIds),“ThumbnailSize”,[200 200])

显示的图像是RetinaFunk,珍妮下降,MayeSherr.dabinsi.,史蒂夫雪丹草

结论

此示例显示了如何自定义bagOfFeatures以及如何使用indexImagesredrieximages建立基于颜色特征的图像检索系统。通过进一步定制其中使用的特性,这里显示的技术可以扩展到其他特性类型bagOfFeatures

参考文献

谷歌:一种用于视频对象匹配的文本检索方法。: ICCV。(2003) 1470 - 1477

[2] Philbin,J.,Chum,O.,Isard,M.,A.,J.s.,Zisserman:对象检索,具有大号词汇和快速空间匹配。在:CVPR。(2007)

[3] TensorFlow:如何重新培训图像分类器以获取新类别