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

Можно использовать среду набора признаков (BoF) со многими различными типами функций изображений. Чтобы использовать пользовательский экстрактор функции вместо экстрактора функции ускоренных устойчивых функций (SURF) по умолчанию, используйте CustomExtractor свойство bagOfFeatures объект.

Пример пользовательского экстрактора функции

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

edit('exampleBagOfFeaturesExtractor.m')

  • Шаг 1. Задайте наборы изображений.

  • Шаг 2. Создайте новый файл функции экстрактора.

  • Шаг 3. Предварительно обработайте изображение.

  • Шаг 4. Выберите местоположение точки для извлечения признаков.

  • Шаг 5. Выделить признаки.

  • Шаг 6. Вычислите метрику функции.

Задайте набор изображений и меток

Считайте изображения категории и создайте наборы изображений.

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

Создайте новый файл функции экстрактора

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

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

Функция должна быть на пути или в текущей рабочей папке.

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

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

featuresВывод

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

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

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

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

featureMetricsВывод

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

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

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

locationВывод

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

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

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

Предварительно обработайте изображение

Входные изображения могут потребовать предварительной обработки перед извлечением признаков. Извлекать функции SURF и использовать detectSURFFeatures или detectMSERFeatures функции, изображения должны быть шкалой полутонов. Если изображения не являются шкалой полутонов, можно преобразовать их использующий im2gray функция.

grayImage = im2gray(I);

Выберите местоположение точки для извлечения признаков

Используйте обычную расположенную с интервалами сетку местоположений точки. Используя сетку по изображению допускает плотное извлечение признаков SURF. Шаг сетки находится в пикселях.

gridStep = 8;
gridX = 1:gridStep:width;
gridY = 1:gridStep:height;

[x,y] = meshgrid(gridX,gridY);

gridLocations = [x(:) y(:)];

Можно вручную конкатенировать несколько SURFPoints объекты в различных шкалах, чтобы достигнуть многошкального извлечения признаков.

multiscaleGridPoints = [SURFPoints(gridLocations,'Scale',1.6);
    SURFPoints(gridLocations,'Scale',3.2);
    SURFPoints(gridLocations,'Scale',4.8);
    SURFPoints(gridLocations,'Scale',6.4)];
В качестве альтернативы можно использовать анализатор, такой как detectSURFFeatures или detectMSERFeatures, выбрать местоположения точки.

multiscaleSURFPoints = detectSURFFeatures(I);

Выделить признаки

Извлеките функции из выбранных местоположений точки. По умолчанию, bagOfFeatures извлечения вертикальные функции SURF.

features = extractFeatures(grayImage,multiscaleGridPoints,'Upright',true);

Вычислите метрику функции

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

Например, можно использовать отклонение функций SURF как метрика функции.

featureMetrics = var(features,[],2);

Если вы использовали анализатор для выбора точки, то используйте метрику обнаружения вместо этого.

featureMetrics = multiscaleSURFPoints.Metric;

Можно опционально возвратить информацию о местоположении функции. Местоположение функции может использоваться для пространственных или геометрических поисковых приложений верификации изображений. Смотрите, что Геометрическая Верификация Использует пример Функции estimateGeometricTransform2D. retrieveImages и indexImages функции используются для поисковых систем изображений на основе содержимого.

if nargout > 2
    varargout{1} = multiscaleGridPoints.Location;
end