retrieveImages

Поисковое изображение установлено для подобного изображения

Описание

пример

imageIDs = retrieveImages(queryImage,imageIndex) возвращает идентификаторы изображений imageIDs это соответствует изображениям в imageIndex это визуально похоже на изображение запроса. imageIDs возвращены в оцениваемом порядке, от большинства до наименее подобного соответствия.

пример

[imageIDs,scores] = retrieveImages(queryImage,imageIndex) опционально возвращается, баллы подобия раньше оценивали результаты извлечения изображений. scores выведите содержит соответствующие оценки от 0 до 1.

пример

[imageIDs,scores,imageWords] = retrieveImages(queryImage,imageIndex) опционально возвращает визуальные слова в queryImage это используется, чтобы искать подобные изображения.

пример

[imageIDs,___] = retrieveImages(queryImage,imageIndex,Name,Value) дополнительные опции использования заданы одним или несколькими Name,Value парные аргументы, с помощью любого из предыдущих синтаксисов.

Примеры

свернуть все

Создайте набор изображений обложек книги.

dataDir = fullfile(toolboxdir('vision'),'visiondata','bookCovers');
bookCovers = imageDatastore(dataDir);

Отобразите набор данных.

thumbnailGallery = [];
for i = 1:length(bookCovers.Files)
    I = readimage(bookCovers,i);
    thumbnail = imresize(I,[300 300]);
    thumbnailGallery = cat(4,thumbnailGallery,thumbnail);
end

figure
montage(thumbnailGallery);

Figure contains an axes object. The axes object contains an object of type image.

Индексируйте набор изображений. Этот шаг может занять несколько минут.

imageIndex = indexImages(bookCovers);
Creating an inverted image index using Bag-Of-Features.
-------------------------------------------------------

Creating Bag-Of-Features.
-------------------------

* Selecting feature point locations using the Detector method.
* Extracting SURF features from the selected feature point locations.
** detectSURFFeatures is used to detect key points for feature extraction.

* Extracting features from 58 images...done. Extracted 29216 features.

* Keeping 80 percent of the strongest features from each category.

* Balancing the number of features across all image categories to improve clustering.
** Image category 1 has the least number of strongest features: 23373.
** Using the strongest 23373 features from each of the other image categories.

* Creating a 20000 word visual vocabulary.
* Number of levels: 1
* Branching factor: 20000
* Number of clustering steps: 1

* [Step 1/1] Clustering vocabulary level 1.
* Number of features          : 23373
* Number of clusters          : 20000
* Initializing cluster centers...100.00%.
* Clustering...completed 18/100 iterations (~0.65 seconds/iteration)...converged in 18 iterations.

* Finished creating Bag-Of-Features


Encoding images using Bag-Of-Features.
--------------------------------------

* Encoding 58 images...done.
Finished creating the image index.

Выберите и отобразите изображение запроса.

queryDir = fullfile(dataDir,'queries',filesep);
queryImage = imread([queryDir 'query3.jpg']);

imageIDs = retrieveImages(queryImage,imageIndex);

Покажите изображение запроса и его лучшее соответствие, рядом друг с другом.

bestMatch = imageIDs(1);
bestImage = imread(imageIndex.ImageLocation{bestMatch});

figure
imshowpair(queryImage,bestImage,'montage')

Figure contains an axes object. The axes object contains an object of type image.

Ищите набор изображений объект с помощью видимой области (ROI) для изображения запроса.

Задайте набор изображений, чтобы искать.

imageFiles = ...
  {'elephant.jpg', 'cameraman.tif', ...
  'peppers.png',  'saturn.png',...
  'pears.png',    'stapleRemover.jpg', ...
  'football.jpg', 'mandi.tif',...
  'kids.tif',     'liftingbody.png', ...
  'office_5.jpg', 'gantrycrane.png',...
  'moon.tif',     'circuit.tif', ...
  'tape.png',     'coins.png'};

imds = imageDatastore(imageFiles);

Создайте поисковый индекс.

 imageIndex = indexImages(imds);
Creating an inverted image index using Bag-Of-Features.
-------------------------------------------------------

Creating Bag-Of-Features.
-------------------------

* Selecting feature point locations using the Detector method.
* Extracting SURF features from the selected feature point locations.
** detectSURFFeatures is used to detect key points for feature extraction.

* Extracting features from 16 images...done. Extracted 3680 features.

* Keeping 80 percent of the strongest features from each category.

* Balancing the number of features across all image categories to improve clustering.
** Image category 1 has the least number of strongest features: 2944.
** Using the strongest 2944 features from each of the other image categories.

* Creating a 2944 word visual vocabulary.
* Number of levels: 1
* Branching factor: 2944
* Number of clustering steps: 1

* [Step 1/1] Clustering vocabulary level 1.
* Number of features          : 2944
* Number of clusters          : 2944
* Initializing cluster centers...100.00%.
* Clustering...completed 1/100 iterations (~0.06 seconds/iteration)...converged in 1 iterations.

* Finished creating Bag-Of-Features


Encoding images using Bag-Of-Features.
--------------------------------------

* Encoding 16 images...done.
Finished creating the image index.

Задайте изображение запроса и ROI. ROI обрисовывает в общих чертах объект, слона, для поиска.

queryImage = imread('clutteredDesk.jpg');
queryROI = [130 175 330 365];

figure
imshow(queryImage)
rectangle('Position',queryROI,'EdgeColor','yellow')

Figure contains an axes object. The axes object contains 2 objects of type image, rectangle.

Можно также использовать imrect функция, чтобы выбрать ROI в интерактивном режиме. Например, queryROI = getPosition(imrect)

Найдите изображения, которые содержат объект.

imageIDs = retrieveImages(queryImage,imageIndex,'ROI',queryROI)
imageIDs = 12x1 uint32 column vector

    1
   11
    6
   12
    2
    3
    8
   10
   13
   14
      ⋮

Отобразите лучшее соответствие.

bestMatch = imageIDs(1);

figure
imshow(imageIndex.ImageLocation{bestMatch})

Figure contains an axes object. The axes object contains an object of type image.

Используйте местоположения визуальных слов, чтобы проверить лучший результат поиска. Чтобы повторно оценить результаты поиска на основе геометрических данных, повторите эту процедуру для верхней части N результаты поиска.

Задайте местоположение изображений.

dataDir = fullfile(toolboxdir('vision'),'visiondata','bookCovers');
bookCovers = imageDatastore(dataDir);

Индексируйте набор изображений. Этот процесс может занять несколько минут.

imageIndex = indexImages(bookCovers);
Creating an inverted image index using Bag-Of-Features.
-------------------------------------------------------

Creating Bag-Of-Features.
-------------------------

* Selecting feature point locations using the Detector method.
* Extracting SURF features from the selected feature point locations.
** detectSURFFeatures is used to detect key points for feature extraction.

* Extracting features from 58 images...done. Extracted 29216 features.

* Keeping 80 percent of the strongest features from each category.

* Balancing the number of features across all image categories to improve clustering.
** Image category 1 has the least number of strongest features: 23373.
** Using the strongest 23373 features from each of the other image categories.

* Creating a 20000 word visual vocabulary.
* Number of levels: 1
* Branching factor: 20000
* Number of clustering steps: 1

* [Step 1/1] Clustering vocabulary level 1.
* Number of features          : 23373
* Number of clusters          : 20000
* Initializing cluster centers...100.00%.
* Clustering...completed 18/100 iterations (~0.72 seconds/iteration)...converged in 18 iterations.

* Finished creating Bag-Of-Features


Encoding images using Bag-Of-Features.
--------------------------------------

* Encoding 58 images...done.
Finished creating the image index.

Выберите и отобразите изображение запроса.

queryDir = fullfile(dataDir,'queries',filesep);
queryImage = imread([queryDir 'query3.jpg']);

figure
imshow(queryImage)

Figure contains an axes object. The axes object contains an object of type image.

Получите лучшие соответствия. queryWords выведите содержит визуальную информацию о местоположениях слова для изображения запроса. Используйте эту информацию, чтобы проверить результаты поиска.

[imageIDs, ~, queryWords] = retrieveImages(queryImage,imageIndex);

Найдите лучшее соответствие для изображения запроса путем извлечения визуальных слов из индекса изображений. Индекс изображений содержит визуальную информацию о слове для всех изображений в индексе.

bestMatch = imageIDs(1);
bestImage = imread(imageIndex.ImageLocation{bestMatch});
bestMatchWords = imageIndex.ImageWords(bestMatch);

Сгенерируйте набор предварительных соответствий на основе визуальных присвоений слова. Каждое визуальное слово в запросе может иметь несколько соответствий из-за трудного квантования, используемого, чтобы присвоить визуальные слова.

queryWordsIndex     = queryWords.WordIndex;
bestMatchWordIndex  = bestMatchWords.WordIndex;

tentativeMatches = [];
for i = 1:numel(queryWords.WordIndex)
    
    idx = find(queryWordsIndex(i) == bestMatchWordIndex);
    
    matches = [repmat(i, numel(idx), 1) idx];
    
    tentativeMatches = [tentativeMatches; matches];
    
end

Покажите местоположения точки для предварительных соответствий. Существует много слабых соответствий.

points1 = queryWords.Location(tentativeMatches(:,1),:);
points2 = bestMatchWords.Location(tentativeMatches(:,2),:);

figure
showMatchedFeatures(queryImage,bestImage,points1,points2,'montage')

Figure contains an axes object. The axes object contains 4 objects of type image, line.

Удалите плохие визуальные присвоения слова с помощью estimateGeometricTransform2D функция. Сохраните присвоения, которые соответствуют допустимому геометрическому преобразованию.

[tform,inlierIdx] = ...
    estimateGeometricTransform2D(points1,points2,'affine',...
        'MaxNumTrials',2000);
inlierPoints1 = points1(inlierIdx, :);
inlierPoints2 = points2(inlierIdx, :);

Повторно оцените результаты поиска процентом inliers. Сделайте это, когда геометрическая процедура проверки будет применена к верхней части N результаты поиска. Те изображения с более высоким процентом inliers, более вероятно, будут релевантны.

percentageOfInliers = size(inlierPoints1,1)./size(points1,1);

figure
showMatchedFeatures(queryImage,bestImage,inlierPoints1,...
    inlierPoints2,'montage')

Figure contains an axes object. The axes object contains 4 objects of type image, line.

Применяйте предполагаемое преобразование.

outputView = imref2d(size(bestImage));
Ir = imwarp(queryImage, tform, 'OutputView', outputView);

figure
imshowpair(Ir,bestImage,'montage')

Figure contains an axes object. The axes object contains an object of type image.

Используйте evaluateImageRetrieval функционируйте, чтобы помочь выбрать соответствующие поисковые параметры.

Создайте набор изображений.

setDir  = fullfile(toolboxdir('vision'),'visiondata','imageSets','cups');
imds = imageDatastore(setDir, 'IncludeSubfolders', true, 'LabelSource', 'foldernames');

Индексируйте набор изображений.

 imageIndex = indexImages(imds,'Verbose',false);

Настройте параметры поиска изображений.

imageIndex.MatchThreshold = 0.2;
imageIndex.WordFrequencyRange = [0 1]
imageIndex = 
  invertedImageIndex with properties:

         ImageLocation: {6x1 cell}
            ImageWords: [6x1 vision.internal.visualWords]
         WordFrequency: [1x1366 double]
         BagOfFeatures: [1x1 bagOfFeatures]
               ImageID: [1 2 3 4 5 6]
        MatchThreshold: 0.2000
    WordFrequencyRange: [0 1]

queryImage = readimage(imds, 1);
indices = retrieveImages(queryImage,imageIndex);

Входные параметры

свернуть все

Введите изображение запроса или в виде M-by-N-by-3 изображение истинного цвета или в виде M-by-N 2D полутоновое изображение.

Типы данных: single | double | int16 | uint8 | uint16 | logical

Отобразите поисковый индекс в виде invertedImageIndex объект. indexImages функция создает invertedImageIndex объект, который хранит данные, используемые для поиска изображений.

Аргументы name-value

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'NumResults',25 устанавливает 'NumResults' свойство к 25

Максимальное количество результатов возвратиться в виде разделенной запятой пары, состоящей из 'NumResults'и числовое значение. Установите это значение к Inf возвратить как можно больше соответствующих изображений.

Запросите область поиска изображений в виде разделенной запятой пары, состоящей из 'ROI'и [x y width height] вектор.

Метрика подобия раньше оценивала результаты извлечения изображений в виде 'cosine' или 'L1' [3].

Выходные аргументы

свернуть все

Оцениваемый индекс полученных изображений, возвращенных как M-by-1 вектор. Идентификаторы изображений возвращены в оцениваемом порядке от большинства до наименее подобного совпадающего изображения.

Метрика подобия, возвращенная как N-by-1 вектор. Этот выход содержит оценки, которые соответствуют полученным изображениям в imageIDs вывод . Баллы вычисляются с помощью Metric свойство и диапазон от 0 до 1.

Объект для хранения визуальных присвоений слова, возвращенных как visualWords объект. Объектно-ориентированная память визуальные присвоения слова queryImage и их местоположения в том изображении.

Ссылки

[1] Сивич, J. и А. Зиссермен. Видео Google: текстовое извлечение приближается, чтобы возразить соответствию в видео. ICCV (2003) пг 1470-1477.

[2] Philbin, J. O. Приятель, М. Исард, Й. Сивич и А. Зиссермен. Объектное извлечение с большими словарями и быстро пространственное соответствие. CVPR (2007).

[3] Гальвес-Лопес, Дориан и Хуан Д. Тардос. Мешки двоичных слов для быстрого распознавания места в последовательностях изображений. Транзакции IEEE на Робототехнике 28.5 (2012): 1188-1197.

Представленный в R2015a