exponenta event banner

retrieveImages

Набор изображений поиска для похожего изображения

Описание

пример

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);

Figure contains an axes. The axes 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.

* 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.45 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')

Figure contains an axes. The axes 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.

* 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.05 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. The axes contains 2 objects of type image, rectangle.

Вы также можете использовать imrect для интерактивного выбора ROI. Например, queryROI = getPosition(imrect)

Поиск изображений, содержащих объект.

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

     1
    11
     6
    12
     2
     3
     8
    10
    13
    14
      ⋮

Отображение наилучшего соответствия.

bestMatch = imageIDs(1);

figure
imshow(imageIndex.ImageLocation{bestMatch})

Figure contains an axes. The axes 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.

* 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.61 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)

Figure contains an axes. The axes 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. The axes contains 4 objects of type image, line.

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

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

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

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

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

Figure contains an axes. The axes 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. The axes 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]
        MatchThreshold: 0.2000
    WordFrequencyRange: [0 1]

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

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

свернуть все

Входное изображение вопроса, определенное или как M N 3 truecolor изображениями или как 2-е изображение оттенков серого M на Н.

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

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

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. 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] Сивич, Дж. и А. Зиссерман. Видео Google: Поиск текста подход к совпадению объектов в видео. ICCV (2003) pg 1470-1477.

[2] Филбин, Дж., О. Чум, М. Изард, Дж. Сивич и А. Зиссерман. Извлечение объектов с большими словарями и быстрым пространственным согласованием. CVPR (2007).

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