Можно использовать среду набора признаков (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 | Входной параметр |
|
features | Вывод |
|
featureMetrics | Вывод |
|
location | Вывод |
|
Входные изображения могут потребовать предварительной обработки перед извлечением признаков. Извлекать функции SURF и использовать detectSURFFeatures
или detectMSERFeatures
функции, изображения должны быть шкалой полутонов. Если изображения не являются шкалой полутонов, можно преобразовать их использующий rgb2gray
функция.
[height,width,numChannels] = size(I); if numChannels > 1 grayImage = rgb2gray(I); else grayImage = I; end
Используйте обычную расположенную с интервалами сетку местоположений точки. Используя сетку по изображению допускает плотное извлечение признаков 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