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

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

介绍

基于内容的图像检索(CBIR)系统被用于发现视觉上相似于查询图像的图像。CBIR系统的应用,可以在很多领域找到,如基于Web的产品搜索,监视和视觉地点识别。用于实现CBIR系统的一种常用技术是视觉词,也称为特征[1,2]包袋。的特征袋由文件检索的世界适于图像检索的技术。而不是使用实际的话,如文献检索,功能包使用的图像特征描述图像的视觉词。

图像特征CBIR系统的重要组成部分。这些图像特征被用来衡量图像之间的相似度,并且可以包括全局图像特征如颜色,纹理,和形状。图像特征也可以作为加速稳健特征(SURF),梯度的直方图(HOG),或局部二进制模式(LBP)局部图像等功能。一袋功能的方法的好处是,用于创建视觉词词汇特征的类型可以进行定制,以适应各种应用。

速度和图像搜索的效率也是CBIR系统的重要。例如,它可能是可接受的以执行在不到100的图像,其中从查询图像特征进行比较,以从所述集合中的每个图像特征的图像的小集合的蛮力搜索。对于较大的集合,蛮力搜索是不可行的和更有效的搜索技术必须使用。的特征的袋子提供一个简明的编码方案来表示的大集合使用稀疏集合视觉词直方图的图像。这使得能够紧凑的存储高效的搜索通过一个倒排索引数据结构。

计算机视觉工具箱™提供一袋功能框架,实现图像检索系统可定制。以下步骤概括的过程:

  1. 选择检索的图像特征

  2. 创建袋特点中

  3. 索引图片

  4. 搜索相似图片

在这个例子中,你会去通过这些步骤,以用于搜索花集[3]创建一个图像检索系统。此数据集包含5种不同类型的花的3670倍的图像。

下载此数据集用于在这个例子中的其余部分。

压缩后的数据集的位置%URL ='http://download.tensorflow.org/example_images/flower_photos.tgz';%存储输出在临时文件夹downloadFolder = TEMPDIR;文件名=完整文件(downloadFolder,'flower_dataset.tgz');

需要注意的是从网上下载的数据集可以根据您的Internet连接需要很长的时间。下面的命令将阻止MATLAB的那一段时间。另外,您也可以使用Web浏览器先下载设定到本地磁盘。如果你选择这条路线,再点上方的“网址”变量的文件,您下载。

%非压缩数据组imageFolder =完整文件(downloadFolder,'flower_photos');如果〜存在(imageFolder,“目录”%下载只有一次DISP(“下载花集(218 MB)......”);websave(文件名,URL);解压缩(文件名,downloadFolder)结束flowerImageSet = imageDatastore(imageFolder,'LABELSOURCE''foldernames''IncludeSubfolders',真正);在数据组图像%总数numel(flowerImageSet.Files)
ANS = 3670

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

功能用于检索的类型取决于图像的集合中的类型。例如,如果搜索的场景(海滩,城市,公路)由图像采集,最好是使用全局图像特征,如颜色直方图捕捉整个场景的彩色内容。然而,如果目标是将图像集合中查找特定的对象,那么局部图像特征提取周围物体的关键点是更好的选择。

让我们通过查看图像的一个获得如何处理这个问题的想法开始。

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

所显示的图像是由马里奥

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

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

类型exampleBagOfFeaturesColorExtractor.m
函数[特征,度量] = exampleBagOfFeaturesColorExtractor(I)%实施例颜色布局特征抽取。设计用于bagOfFeatures使用。%%是从真彩色图像提取的局部颜色布局特征,I和%在功能返回。该特征的强度在%的指标返回。[〜,〜,P] =尺寸(I);isColorImage = P == 3;如果isColorImage%转换RGB图像到的L * a * b *表色空间。所述的L * a * b *表色空间%使您轻松地量化颜色之间的视觉差异。%视觉相似颜色的L * A * B *色彩空间将在其的L * a * b *值小%的差异。ILAB = rgb2lab(I); % 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假加载预训练bagOfFeatures。doTraining因为训练过程需要几分钟的时间设置为false。例子中的其余部分使用预训练bagOfFeatures为了省时间。如果你想重新colorBag在本地,集doTraining为真,并考虑计算机视觉工具箱首选项减少处理时间。

doTraining = FALSE;如果doTraining%选择鲜花图像的随机子集trainingSet = splitEachLabel(flowerImageSet,0.6%,“随机”);%创建一个使用“CustomExtractor”选项的功能自定义包colorBag = bagOfFeatures(trainingSet,...'CustomExtractor',@exampleBagOfFeaturesColorExtractor,...'VocabularySize',5000);其他%负载预训练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图像用颜色相近的内容[imageIDs,分数] = retrieveImages(queryImage,flowerImageIndex,'NumResults',5);

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

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

imageIDs对应于相似于该查询图像的图像组内的图像。

%使用蒙太奇显示结果。图蒙太奇(flowerImageSet.Files(imageIDs),'ThumbnailSize',[200 200])

所显示的图像是由RetinaFunk珍妮唐宁,MayeesherrdaBinsi史蒂夫·斯诺德格拉斯

结论

这个例子说明,你如何自定义bagOfFeatures以及如何使用indexImagesretrieveImages创建基于颜色特征的图像检索系统。这里示出的技术可以通过进一步定制被扩展到其它特征类型中使用的功能bagOfFeatures

参考

[1] Sivic,J.,Zisserman,A:视频谷歌:文本检索方法目标匹配的视频。在:ICCV。(2003)1470年至1477年

[2]菲尔宾,J.,密友,O.,伊萨德,M.,A.,J.S.,Zisserman:具有大的词汇和快速空间匹配对象检索。在:CVPR。(2007年)

[3] TensorFlow:如何为训练新类别的图像分类