主要内容

创建自定义特性提取器

你可以使用带有许多不同类型图像特征的特征包(BoF)框架。要使用自定义特性提取器而不是默认的加速健壮特性(SURF)特性提取器,请使用CustomExtractor财产的bagOfFeatures对象。

自定义特征提取器的示例

这个例子展示了如何编写自定义特征提取函数bagOfFeatures.您可以在MATLAB中输入以下命令,打开这个示例函数文件并将其作为模板使用®命令提示符:

编辑(“exampleBagOfFeaturesExtractor.m”)

  • 步骤1。定义图像集。

  • 步骤2。创建一个新的提取器函数文件。

  • 步骤3。预处理图像。

  • 步骤4。选择一个点位置进行特征提取。

  • 第5步。提取特征。

  • 步骤6。计算特征度量。

定义一组图像和标签

读取类别图像并创建图像集。

setDir = fullfile (toolboxdir(“愿景”)、“visiondata”,“imageSets”);imd = imageDatastore (setDir IncludeSubfolders,没错,‘LabelSource’,……“foldernames”);

创建一个新的提取器函数文件

提取器函数必须指定为函数句柄:

extractorFcn = @exampleBagOfFeaturesExtractor;袋= bagOfFeatures (imgSets CustomExtractor, extractorFcn)
exampleBagOfFeaturesExtractor是一个MATLAB函数。例如:
function [features,featureMetrics] = exampleBagOfFeaturesExtractor(img)…
您还可以指定可选的位置输出:
function [features,featureMetrics,location] = exampleBagOfFeaturesExtractor(img)…

该函数必须位于路径或当前工作文件夹中。

论点 输入/输出 描述
img 输入
  • 二值、灰度或真彩色图像。

  • 输入图像来自最初传入的图像集bagOfFeatures

特性 输出

  • 一个binaryFeatures对象。

  • 一个——- - - - - -N图像特征的数值矩阵,其中是多少特征和N为每个特征向量的长度。

  • 特征长度,N,必须大于零,并且在处理期间的所有图像都相同bagOfFeatures创建过程。

  • 如果不能从图像中提取特征,则提供空特征矩阵和空特征度量向量。例如,如果您没有找到任何用于特征提取的关键点,则使用空矩阵和向量。

  • 数字、实数和非稀疏性。

featureMetrics 输出

  • 一个-by-1特征度量向量,表示每个特征向量的强度。

  • 用于应用“SelectStrongest”标准bagOfFeatures框架。

  • 数字、实数和非稀疏性。

位置 输出

  • 一个- 1基的× 2矩阵[xy)的值。

  • (xy值可以是小数。

  • 数字、实数和非稀疏性。

预处理图像

输入图像在特征提取前需要进行预处理。提取SURF特征并使用detectSURFFeaturesdetectMSERFeatures函数,图像必须是灰度的。如果图像不是灰度级的,可以使用im2gray函数。

grayImage = im2gray(我);

选择一个点位置进行特征提取

使用规则间隔的点位置网格。使用图像上方的网格可以密集地提取SURF特征。网格步骤的单位是像素。

gridStep = 8;gridX = 1: gridStep:宽度;格子= 1:gridStep:高度;(x, y) = meshgrid (gridX, gridY);gridLocations = [x(:) y(:)];

您可以手动连接多个SURFPoints对不同尺度的目标进行多尺度特征提取。

multiscaleGridPoints = [SURFPoints (gridLocations,“规模”,1.6);SURFPoints (gridLocations,“规模”,3.2);SURFPoints (gridLocations,“规模”,4.8);SURFPoints (gridLocations,“规模”,6.4)];
或者,您可以使用特性检测器,例如detectSURFFeaturesdetectMSERFeatures,以选择点的位置。

multiscaleSURFPoints = detectSURFFeatures(我);

提取的特征

从选定的点位置提取特征。默认情况下,bagOfFeatures提取直立SURF特征。

特点= extractFeatures (grayImage multiscaleGridPoints,“正直”,真的);

计算特征度量

特性指标表明每个特性的强度。较大的度量值被分配给较强的特征。在使用之前,使用功能指标来识别并删除薄弱功能bagOfFeatures学习图像集的视觉词汇。使用适合您的特征向量的度量。

例如,您可以使用SURF特性的方差作为特性度量。

featureMetrics = var(特性,[],2);

如果您使用特征检测器进行点选择,那么就使用检测度量。

featureMetrics = multiscaleSURFPoints.Metric;

您可以选择返回特性位置信息。该特征位置可用于空间或几何验证图像搜索应用程序。看到使用estimateGeometricTransform2D函数进行几何验证的例子。的retrieveImagesindexImages函数用于基于内容的图像检索系统。

if nargout > 2 varargout{1} = multiscaleGridPoints.Location;结束