exponenta event banner

Создание пользовательского экстрактора элементов

Можно использовать структуру 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-на-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