Можно использовать среду 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 | Вход |
|
features | Выход |
|
featureMetrics | Выход |
|
location | Выход |
|
Входные изображения могут потребовать предварительной обработки перед редукцией данных. Чтобы извлечь функции 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