indexImages

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

Описание

пример

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

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

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

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

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

Поиск в наборе изображений по аналогичному изображению с помощью изображения запроса. Лучший результат - во-первых.

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

     2
     1
     5
     4
     3

bestMatchIdx = indices(1);

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

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

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

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

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

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

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

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 40/100 iterations (~0.20 seconds/iteration)...converged in 40 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)

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

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

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

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

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

свернуть все

Изображения, заданные как imageDatastore объект. Объект хранит набор изображений.

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

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

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

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

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

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

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

свернуть все

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

Алгоритмы

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

Введенный в R2015a