主要内容

图像检索使用定制的包的功能

这个例子展示了如何创建一个基于内容的图像检索(CBIR)系统使用一个定制的bag-of-features工作流。

介绍

基于内容的图像检索(CBIR)系统是用于查找图像视觉相似查询的形象。CBIR系统的应用可以发现在许多领域如一个基于web的产品搜索、监视、和视觉识别的地方。共同的技术用于实现CBIR系统袋视觉单词,也称为袋特性[1,2]。袋的特性技术适应图像检索的文档检索。而不是使用实际的单词在文档检索,袋特征使用图像特征描述图像的视觉语言。

图像特征是CBIR系统的一个重要组成部分。这些图像特性是用来衡量图像之间的相似度并可以包括全球形象特征,如颜色、纹理和形状。图像特性,也可以本地图像特性,比如加快健壮的特性(冲浪),渐变的柱状图(猪),或局部二进制模式(LBP)。bag-of-features方法的好处是,类型的功能用于创建视觉单词的词汇量可以被定制以适应应用程序。

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

计算机视觉工具箱™提供了一个可定制的bag-of-features框架来实现图像检索系统。以下步骤大纲程序:

  1. 选择图像特征检索

  2. 创建一个包的功能

  3. 索引图像

  4. 搜索类似的图片

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

下载这个数据集用于此示例。

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

注意,从网上下载数据集可以花费很长的时间取决于您的网络连接。下面的命令将阻止MATLAB这段时间。或者,您可以使用web浏览器来第一集下载到您的本地磁盘。如果你选择这条路线,它们上面的“url”变量,你下载的文件。

%未压缩的数据集imageFolder = fullfile (downloadFolder,“flower_photos”);如果~存在(imageFolder“dir”)%只下载一次disp (“下载数据集(218 MB)花…”);websave(文件名、url);解压(文件名,downloadFolder)结束flowerImageSet = imageDatastore (imageFolder,“LabelSource”,“foldernames”,“IncludeSubfolders”,真正的);%的图像数据集的总数元素个数(flowerImageSet.Files)
ans = 3670

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

特性用于检索的类型取决于类型的图像集合。例如,如果搜索图像集合组成的场景(海滩,城市,高速公路),最好使用一个全局图像特征,如颜色直方图捕获整个场景的颜色内容。但是,如果目标是寻找图像中的特定对象集合,然后局部图像特征提取的对象周围的要点是一个更好的选择。

让我们先看一个图片来了解如何处理这个问题。

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

显示的图像马里奥

在这个例子中,目标是寻找相似的花朵在查询中使用颜色信息的数据集的形象。一个简单的图像特征空间布局的基础上颜色是一个很好的起点。

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

类型exampleBagOfFeaturesColorExtractor.m
函数(功能、指标)= exampleBagOfFeaturesColorExtractor (I) %特征提取器的颜色布局示例。为使用bagOfFeatures而设计的。% %地方色彩布局从真彩图像中提取的特征,我和%返回功能。中返回%的强度特性指标。% 2014 - 2020版权MathWorks公司(~ ~ P) = (I)大小;isColorImage = P = = 3;如果isColorImage %将RGB图像转换成L * a * b *色彩。L * a * b *色彩%使您能够轻松地量化颜色之间的视觉差异。%视觉相似的颜色在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使用“CustomExtractor”选项。

doTraining假负载一个pretrained bagOfFeatures。doTraining设置为false,因为训练过程需要几分钟。其余的例子使用pre-trainedbagOfFeatures以节省时间。如果你想重新创建colorBag在本地,doTraining真的,考虑计算机视觉工具箱的偏好减少处理时间。

doTraining = false;如果doTraining%花卉图像的随机选择一个子集。trainingSet = splitEachLabel (flowerImageSet, 0.6,“随机”);%指定的数量水平和分支系数的词汇%树bagOfFeatures中使用。实证分析是必需的%选择最佳值。numLevels = 1;numBranches = 5000;%创建一个自定义包的功能使用“CustomExtractor”选项。colorBag = bagOfFeatures (trainingSet,“CustomExtractor”@exampleBagOfFeaturesColorExtractor,“TreeProperties”,(numLevels numBranches]);其他的%加载pretrained bagOfFeatures。负载(“savedColorBagOfFeatures.mat”,“colorBag”);结束

步骤3——索引图像

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

如果doTraining%创建搜索索引。flowerImageIndex = indexImages (flowerImageSet colorBag,“SaveFeatureLocations”、假);其他的%加载保存索引负载(“savedColorBagOfFeatures.mat”,“flowerImageIndex”);结束

因为索引步骤流程成千上万的图像,这个示例使用保存的索引来节省时间。你可以通过设置本地重新创建索引doTraining为true。

步骤4——搜索类似的图片

最后一步是使用retrieveImages函数搜索类似的图片。

%定义一个查询的形象queryImage = readimage (flowerImageSet, 200);图imshow (queryImage)

显示的图像RetinaFunk

%搜索前5图像具有相似颜色的内容[imageid,分数]= retrieveImages (queryImage flowerImageIndex,“NumResults”5);

retrieveImages返回图像的id和每个结果的分数。分数排序从最好到最差。

分数
成绩=5×10.4776 0.2138 0.1386 0.1382 0.1317

imageid对应的图像在图像集类似于查询图像。

%显示结果使用蒙太奇。图蒙太奇(flowerImageSet.Files (imageid),“ThumbnailSize”200年[200])

显示的图像RetinaFunk珍妮喝,Mayeesherr,daBinsi,史蒂夫·史诺德

结论

这个例子向您展示了如何定制bagOfFeatures以及如何使用indexImagesretrieveImages创建一个基于颜色特征的图像检索系统。这里显示的技术可能被进一步扩展到其他功能类型中使用自定义特性bagOfFeatures

引用

[1]Sivic, J。,Zisserman, A.: Video Google: A text retrieval approach to object matching in videos. In: ICCV. (2003) 1470-1477

[2]Philbin, J。密友,O。,Isard, M., A., J.S., Zisserman: Object retrieval with large vocabularies and fast spatial matching. In: CVPR. (2007)

[3]TensorFlow:如何为新类别重新培训一个图像分类器