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

Можно использовать среду bag-of-features (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 процесс создания.

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

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

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