你可以使用带有许多不同类型图像特征的特征包(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 |
输入 |
|
特性 |
输出 |
|
featureMetrics |
输出 |
|
位置 |
输出 |
|
输入图像在特征提取前需要进行预处理。提取SURF特征并使用detectSURFFeatures
或detectMSERFeatures
函数,图像必须是灰度的。如果图像不是灰度级的,可以使用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)];
detectSURFFeatures
或detectMSERFeatures
,以选择点的位置。
multiscaleSURFPoints = detectSURFFeatures(我);
从选定的点位置提取特征。默认情况下,bagOfFeatures
提取直立SURF特征。
特点= extractFeatures (grayImage multiscaleGridPoints,“正直”,真的);
特性指标表明每个特性的强度。较大的度量值被分配给较强的特征。在使用之前,使用功能指标来识别并删除薄弱功能bagOfFeatures
学习图像集的视觉词汇。使用适合您的特征向量的度量。
例如,您可以使用SURF特性的方差作为特性度量。
featureMetrics = var(特性,[],2);
如果您使用特征检测器进行点选择,那么就使用检测度量。
featureMetrics = multiscaleSURFPoints.Metric;
您可以选择返回特性位置信息。该特征位置可用于空间或几何验证图像搜索应用程序。看到使用estimateGeometricTransform2D函数进行几何验证的例子。的retrieveImages
和indexImages
函数用于基于内容的图像检索系统。
if nargout > 2 varargout{1} = multiscaleGridPoints.Location;结束