retrieveImages

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

Синтаксис

imageIDs = retrieveImages(queryImage,imageIndex)
[imageIDs,scores] = retrieveImages(queryImage,imageIndex)
[imageIDs,scores,imageWords] = retrieveImages(queryImage,imageIndex)
[imageIDs,___] = retrieveImages(queryImage,imageIndex,Name,Value)

Описание

пример

imageIDs = retrieveImages(queryImage,imageIndex) возвращает индексы, соответствующие изображениям в 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);

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

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.

* Using K-Means clustering to create a 20000 word visual vocabulary.
* Number of features          : 23373
* Number of clusters (K)      : 20000

* Initializing cluster centers...100.00%.
* Clustering...completed 7/100 iterations (~0.69 seconds/iteration)...converged in 7 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')

Ищите набор изображений объект с помощью видимой области (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.

* Using K-Means clustering to create a 20000 word visual vocabulary.
* Number of features          : 2944
* Number of clusters (K)      : 2944

* Initializing cluster centers...100.00%.
* Clustering...completed 1/100 iterations (~0.11 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')

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

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

imageIDs = retrieveImages(queryImage,imageIndex,'ROI',queryROI)
imageIDs = 13×1

     1
    11
     6
    12
     2
     3
    13
     8
    14
     5
      ⋮

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

bestMatch = imageIDs(1);

figure
imshow(imageIndex.ImageLocation{bestMatch})

Используйте местоположения визуальных слов, чтобы проверить лучший результат поиска. Чтобы повторно оценить результаты поиска на основе геометрических данных, повторите эту процедуру для верхней части 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.

* Using K-Means clustering to create a 20000 word visual vocabulary.
* Number of features          : 23373
* Number of clusters (K)      : 20000

* Initializing cluster centers...100.00%.
* Clustering...completed 7/100 iterations (~0.65 seconds/iteration)...converged in 7 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)

Получите лучшие соответствия. 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')

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

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

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

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

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

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

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

figure
imshowpair(Ir,bestImage,'montage')

Используйте функцию 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]
        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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

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

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

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

свернуть все

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

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

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

Ссылки

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

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

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