【发布时间】:2016-06-16 08:50:35
【问题描述】:
是否可以连接 2 个 bagoffeatures 对象来训练分类器?
我通过以下方式使用 SURF 点训练了一个分类器:
extractorFcn = @SURFBOW;
bag = bagOfFeatures(trainingSets,'CustomExtractor',extractorFcn);
其中 SURFBOW 包含:
[height,width,numChannels] = size(I);
if numChannels > 1
grayImage = rgb2gray(I);
else
grayImage = I;
end
multiscaleSURFPoints = detectSURFFeatures(grayImage,'MetricThreshold',100);
features = extractFeatures(grayImage, multiscaleSURFPoints,'Upright',true);
featureMetrics = multiscaleSURFPoints.Metric;
并按照 Matlab 的示例:http://www.mathworks.com/help/vision/examples/image-category-classification-using-bag-of-features.html?refresh=true
接下来,我做了类似的事情来提取图像的氡特征,而不是使用另一个提取器函数,但使用 RadonBOW(I) 如下:
[height,width,numChannels] = size(I);
if numChannels > 1
grayImage = double(rgb2gray(I));
else
grayImage = double(I);
end
dx = imfilter(grayImage,fspecial('sobel') ); % x, 3x3 kernel
dy = imfilter(grayImage,fspecial('sobel')'); % y
gradmag = sqrt( dx.^2 + dy.^2 );
% mask by disk
R = min( size(grayImage)/2 ); % radius
disk = insertShape(zeros(size(grayImage)),'FilledCircle', [size(grayImage)/2,R] );
mask = double(rgb2gray(disk)~=0);
gradmag = mask.*gradmag;
% radon transform
theta = linspace(0,180,179);
vars = zeros(size(theta));
for u = 1:length(theta)
[rad,xp] =radon( gradmag, theta(u) );
indices = find( abs(xp)<R );
% ignore radii outside the maximum disk area
% so you don't sum up zeroes into variance
vars(u) = var( rad( indices ) );
end
features = vars/norm(vars);
featureMetrics = var(features);
我得到了公平的结果。有没有办法结合这些来训练使用氡和冲浪点的分类器?
(我也尝试过使用 kmeans 手动执行 Radon BOW 方法,但是结果非常差,所以我认为这是不正确的)
谢谢!
【问题讨论】:
标签: matlab image-processing matlab-cvst surf