bagOfFeatures

Мешок визуального объекта слов

Описание

Можно создать мешок визуальных слов для использования в классификации категорий изображений, извлечения изображений или обнаружения закрытия цикла в визуальной одновременной локализации и картографии (vSLAM).

Создание

Описание

пример

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

bag = bagOfFeatures(imds,'CustomExtractor',extractorFcn) возвращает набор признаков, который использует функцию извлечения пользовательских признаков, чтобы извлечь функции из изображений в imds. extractorFcn указатель на функцию к пользовательской функции извлечения признаков.

bag = bagOfFeatures(imds,Name,Value) свойства наборов с помощью одной или нескольких пар "имя-значение". Заключите каждое имя свойства в кавычки. Например, bag = bagOfFeatures('Verbose',true)

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

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

развернуть все

Изображения в виде ImageDatastore объект. bagOfFeatures извлекает равное количество сильнейших признаков из изображений, содержавшихся в imds объект. Количество сильнейших признаков задано как:

number of strongest features = min(количество функций, найденных в каждом наборе) x StrongestFraction

Объект получает StrongestFraction значение от StrongestFeatures свойство.

Функция извлечения пользовательских признаков в виде указателя на функцию. Эта пользовательская функция извлекает функции, чтобы изучить визуальный словарь объекта.

Функция, extractorFcn, должен быть определен функцией указатель для файла:

extractorFcn = @exampleBagOfFeaturesExtractor;
bag = bagOfFeatures(imds,'CustomExtractor',extractorFcn)
где exampleBagOfFeaturesExtractor функция MATLAB. Например:
function [features,featureMetrics,location] = exampleBagOfFeaturesExtractor(img)
...
Функция должна быть на пути или в текущей рабочей директории. Аргументы заданы как:

Аргумент Ввод/выводОписание
imgВходной параметр
  • Двоичный файл, шкала полутонов или изображение истинного цвета.

  • Входное изображение от набора изображений, который был первоначально передан в bagOfFeatures.

featuresВывод

  • binaryFeatures объект.

  • M-by-N числовая матрица функций изображений, где M является количеством функций и N, является длиной каждого характеристического вектора.

  • Полнометражное, N, должно быть больше нуля и быть тем же самым для всех изображений, обработанных во время bagOfFeatures процесс создания.

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

  • Числовой, действительный, и неразреженный.

featureMetricsВывод

  • M-by-1 вектор из метрик функции, указывающих на силу каждого характеристического вектора.

  • Используемый, чтобы применить 'SelectStrongest' критерии в bagOfFeatures среда.

  • Числовой, действительный, и неразреженный.

locationВывод

  • M-by-2 матрица на основе 1 [x y] значения.

  • [x y] значения могут быть дробными.

  • Числовой, действительный, и неразреженный.

Для получения дополнительной информации о пользовательской функции извлечения и ее вводах и выводах, смотрите, Создают Пользовательский Экстрактор Функции.

Можно открыть файл функции, взятой в качестве примера, и использовать его в качестве шаблона путем ввода следующей команды в командной строке MATLAB:

edit('exampleBagOfFeaturesExtractor.m')

Свойства

развернуть все

Функция извлечения пользовательских признаков в виде указателя на функцию. Функция извлечения пользовательских признаков извлекает признаки, используемые для изучения визуального словаря для bagOfFeatures. Необходимо задать 'CustomExtractor'и указатель на функцию, extractorFcn, к пользовательской функции извлечения признаков.

Функция, extractorFcn, должен быть определен функцией указатель для файла:

extractorFcn = @exampleBagOfFeaturesExtractor;
bag = bagOfFeatures(imds,'CustomExtractor',extractorFcn)
где exampleBagOfFeaturesExtractor функция MATLAB, такая как:
function [features,featureMetrics] = exampleBagOfFeaturesExtractor(img)
...
Функция должна быть на пути или в текущей рабочей директории.

Для получения дополнительной информации о пользовательской функции извлечения и ее вводах и выводах, смотрите, Создают Пользовательский Экстрактор Функции. Можно открыть файл функции, взятой в качестве примера, и использовать его в качестве шаблона путем ввода следующей команды в командной строке MATLAB:

edit('exampleBagOfFeaturesExtractor.m')

Свойства дерева словаря в виде двухэлементного вектора в форме [numLevels branchingFactor]. numLevels является целым числом, которое задает количество уровней в дереве словаря. branchingFactor является целым числом, которое задает фактор, чтобы управлять суммой, которую словарь может вырастить на последовательных уровнях в дереве. Максимальным количеством визуальных слов, представленных деревом словаря, является branchingFactor ^numLevels. Типичные значения для numLevels между 1 и 6. Типичные значения для branchingFactor между 10 и 500. Используйте эмпирический анализ, чтобы выбрать оптимальные значения.

Увеличьте коэффициент ветвления, чтобы сгенерировать больший словарь. Увеличение словаря улучшает классификацию и точность извлечения изображений, но также увеличит время, чтобы закодировать изображения. Можно использовать дерево словаря с несколькими уровнями, чтобы создать словари порядка 10 000 визуальных слов или больше. Многоуровневое дерево уменьшает время, требуемое закодировать изображения с большими словарями, но займет больше времени, чтобы создать. Можно использовать дерево с одним уровнем для словарей, которые содержат только 100 - 1000 визуальных слов.

Часть сильнейших признаков в виде разделенной запятой пары, состоящей из 'StrongestFeatures'и значение в области значений [0,1]. Значение представляет часть сильнейших признаков, чтобы использовать от каждой метки в imds входной параметр.

Отобразите ход выполнения на экран в виде разделенной запятой пары, состоящей из 'Verbose'и логический true или false.

Метод выбора для выбора местоположений точки для извлечения признаков SURF в виде разделенной запятой пары, состоящей из 'PointSelection'и любой 'Grid' или 'Detector'. Существует два этапа для извлечения признаков. Во-первых, вы выбираете метод для выбора местоположений точки, (SURF 'Detector' или 'Grid'), с PointSelection свойство. Второй этап извлекает функции. Извлечение признаков использует экстрактор SURF для обоих методов выбора точки.

Когда вы устанавливаете PointSelection к 'Detector', характерные точки выбраны с помощью детектора ускоренной устойчивой функции (SURF). В противном случае точки выбраны на предопределенной сетке с разрядкой заданного 'GridStep'. Это свойство применяется только, когда вы не задаете пользовательский экстрактор с CustomExtractor свойство.

Размер шага сетки в пикселях в виде разделенной запятой пары, состоящей из 'GridStep'и 1 2 [x y] вектор. Это свойство применяется только, когда вы устанавливаете PointSelection к 'Grid' и вы не задаете пользовательский экстрактор с CustomExtractor свойство. Шаги в x и направлениях y задают интервал регулярной координатной сетки. Пересечения линий сетки задают местоположения для извлечения признаков.

Исправьте размер, чтобы извлечь вертикальный дескриптор SURF в виде разделенной запятой пары, состоящей из 'BlockWidth'и 1 N вектором из ширин блока N. Это свойство применяется только, когда вы не задаете пользовательский экстрактор с CustomExtractor свойство. Каждый элемент вектора соответствует размеру квадратного блока, из которого функция извлекает вертикальные дескрипторы SURF. Используйте несколько размеров квадратов, чтобы извлечь многошкальные функции. Весь заданный квадрат используется для каждой экстракции точки на сетке. Это свойство только применяется, когда вы устанавливаете PointSelection к 'Grid'. Блок width соответствует шкале функции. Минимальный BlockWidth 32 пикселя.

Ориентация характеристического вектора SURF в виде разделенной запятой пары, состоящей из 'Upright'и логический скаляр. Это свойство применяется только, когда вы не задаете пользовательский экстрактор с CustomExtractor свойство. Установите это свойство на true когда вы не должны оценивать ориентацию характеристических векторов SURF. Установите его на false когда вам нужны дескрипторы изображений, чтобы получить информацию о вращении.

Функции объекта

encodeСоздайте гистограмму визуальных случаев слова

Примеры

свернуть все

Загрузите два набора изображений.

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

Выберите первые два изображения от каждого набора изображений, чтобы создать наборы обучающих данных.

trainingSets = partition(imgSets,2);

Создайте набор признаков. Этот процесс может занять несколько минут.

bag = bagOfFeatures(trainingSets,'Verbose',false);

Вычислите гистограмму визуальных случаев слова для одного из изображений. Сохраните гистограмму как характеристический вектор.

img = read(imgSets(1),1);
featureVector = encode(bag,img);
Encoding images using Bag-Of-Features.
--------------------------------------
* Encoding an image...done.

Загрузите набор изображений.

setDir  = fullfile(toolboxdir('vision'),'visiondata','imageSets');
imds = imageDatastore(setDir,'IncludeSubfolders',true,'LabelSource',...
    'foldernames');

Задайте пользовательский экстрактор функции.

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

* Extracting features from 12 images...done. Extracted 230400 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          : 184320
* Number of clusters          : 500
* Initializing cluster centers...100.00%.
* Clustering...completed 37/100 iterations (~0.34 seconds/iteration)...converged in 37 iterations.

* Finished creating Bag-Of-Features
bag = 
  bagOfFeatures with properties:

      CustomExtractor: @exampleBagOfFeaturesExtractor
       NumVisualWords: 500
       TreeProperties: [1 500]
    StrongestFeatures: 0.8000

Расширенные возможности

Введенный в R2014b