exponenta event banner

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™ компьютерного зрения, на вкладке Главная в разделе Среда щелкните Настройки. Затем выберите Инструмент компьютерного зрения (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 для изучения лексики из 20 000 визуальных слов используется структура пакета функций с детектором и экстрактором ускоренных надежных функций (SURF). Затем визуальные слова используются для создания индекса, который сопоставляет визуальные слова изображениям в imds. Индекс можно использовать для поиска изображений в imds , которые аналогичны заданному образу запроса.

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