indexImages

Создайте индекс поиска изображений

Синтаксис

imageIndex = indexImages(imds)
imageIndex = indexImages(imds,bag)
imageIndex = indexImages(___,Name,Value)

Описание

пример

imageIndex = indexImages(imds) создает объект invertedImageIndex, imageIndex, который содержит поисковый индекс для imds. Используйте imageIndex с функцией retrieveImages, чтобы искать изображения.

пример

imageIndex = indexImages(imds,bag) возвращает поисковый индекс, который использует пользовательский объект bagOfFeatures, bag. Используйте этот синтаксис с bag, который вы создали когда это необходимо, чтобы изменить количество визуальных слов, или тип функции раньше создавал индекс поиска изображений для imds.

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

Эти параллельные вычисления поддержки объектов с помощью нескольких рабочих MATLAB®. Включите параллельные вычисления из диалогового окна Computer Vision Toolbox Preferences. Чтобы открыть настройки Computer Vision Toolbox™, на вкладке Home, в разделе Environment, нажимают Preferences. Затем выберите Computer Vision System Toolbox.

Примеры

свернуть все

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

setDir  = fullfile(toolboxdir('vision'),'visiondata','imageSets','cups');
imds = imageDatastore(setDir);

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

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 6 images...done. Extracted 1708 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: 1366.
** Using the strongest 1366 features from each of the other image categories.

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

* 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 6 images...done.
Finished creating the image index.
imageIndex = 
  invertedImageIndex with properties:

         ImageLocation: {6x1 cell}
            ImageWords: [6x1 vision.internal.visualWords]
         WordFrequency: [1x1366 double]
         BagOfFeatures: [1x1 bagOfFeatures]
        MatchThreshold: 0.0100
    WordFrequencyRange: [0.0100 0.9000]

Отобразите набор изображений с помощью функции montage.

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

figure
montage(thumbnailGallery);

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

queryImage = readimage(imds,2);
figure
imshow(queryImage)

Ищите набор изображений подобное изображение с помощью изображения запроса. Лучший результат является первым.

indices = retrieveImages(queryImage,imageIndex)
indices = 5×1

     2
     1
     5
     3
     4

bestMatchIdx = indices(1);

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

bestMatch = imageIndex.ImageLocation{bestMatchIdx}
bestMatch = 
'/mathworks/devel/bat/BR2019ad/build/matlab/toolbox/vision/visiondata/imageSets/cups/blueCup.jpg'
figure
imshow(bestMatch)

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

setDir  = fullfile(toolboxdir('vision'),'visiondata','imageSets','cups');
imgSets = imageSet(setDir, 'recursive');

Изображение на дисплее установлено.

thumbnailGallery = [];
for i = 1:imgSets.Count
    I = read(imgSets, i);
    thumbnail = imresize(I, [300 300]);
    thumbnailGallery = cat(4, thumbnailGallery, thumbnail);
end

figure
montage(thumbnailGallery);

Обучите мешок функций с помощью пользовательского экстрактора функции.

extractor = @exampleBagOfFeaturesExtractor;
bag = bagOfFeatures(imgSets,'CustomExtractor',extractor);
Creating Bag-Of-Features.
-------------------------
* Image category 1: cups
* Extracting features using a custom feature extraction function: exampleBagOfFeaturesExtractor.

* Extracting features from 6 images in image set 1...done. Extracted 115200 features.

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

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

* Initializing cluster centers...100.00%.
* Clustering...completed 21/100 iterations (~0.19 seconds/iteration)...converged in 21 iterations.

* Finished creating Bag-Of-Features

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

imageIndex = indexImages(imgSets,bag,'Verbose',false) 
imageIndex = 
  invertedImageIndex with properties:

         ImageLocation: {6x1 cell}
            ImageWords: [6x1 vision.internal.visualWords]
         WordFrequency: [1x500 double]
         BagOfFeatures: [1x1 bagOfFeatures]
        MatchThreshold: 0.0100
    WordFrequencyRange: [0.0100 0.9000]

queryImage = read(imgSets,4);

figure
imshow(queryImage)

Ищите изображение от индекса изображений с помощью изображения запроса.

indices = retrieveImages(queryImage,imageIndex);
bestMatch = imageIndex.ImageLocation{indices(1)};
figure
imshow(bestMatch)

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

свернуть все

Изображения, заданные как объект imageDatastore. Объектно-ориентированная память набор изображений.

Мешок визуальных слов, заданных как объект bagOfFeatures.

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

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

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

Сохраните местоположения функции, заданные как пара, разделенная запятой, состоящая из 'SaveFeatureLocations' и логического скаляра. Когда установлено в true, местоположения функции изображений сохранены в imageIndex объект вывода. Используйте данные о местоположении, чтобы проверить пространственные или геометрические результаты поиска изображений. Если вы не требуете местоположений функции, установите это свойство на ложь уменьшать потребление памяти.

Отобразите информацию прогресса, указанную как пара, разделенная запятой, состоящая из 'Verbose' и логического скаляра.

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

свернуть все

Отобразите поисковый индекс, возвращенный как объект invertedImageIndex.

Алгоритмы

imageIndex использует среду сумки функций с детектором ускоренных устойчивых функций (SURF) и экстрактором, чтобы изучить словарь 20 000 визуальных слов. Визуальные слова затем используются, чтобы создать индекс, который сопоставляет визуальные слова с изображениями в imds. Можно использовать индекс, чтобы искать изображения в imds, которые подобны данному изображению запроса.

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