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.

* Creating a 1366 word visual vocabulary.
* Number of levels: 1
* Branching factor: 1366
* Number of clustering steps: 1

* [Step 1/1] Clustering vocabulary level 1.
* Number of features          : 1366
* Number of clusters          : 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]
               ImageID: [1 2 3 4 5 6]
        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 object. The axes object contains an object of type image.

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

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

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

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

indices = retrieveImages(queryImage,imageIndex)
indices = 5x1 uint32 column vector

   2
   1
   5
   4
   3

bestMatchIdx = indices(1);

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

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

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

* Creating a 500 word visual vocabulary.
* Number of levels: 1
* Branching factor: 500
* Number of clustering steps: 1

* [Step 1/1] Clustering vocabulary level 1.
* Number of features          : 92160
* Number of clusters          : 500
* Initializing cluster centers...100.00%.
* Clustering...completed 27/100 iterations (~0.19 seconds/iteration)...converged in 27 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]
               ImageID: [1 2 3 4 5 6]
        MatchThreshold: 0.0100
    WordFrequencyRange: [0.0100 0.9000]

queryImage = read(imgSets,4);

figure
imshow(queryImage)

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

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

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

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

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

свернуть все

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

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

Аргументы name-value

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

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

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

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

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

свернуть все

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

Алгоритмы

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

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