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