2
是否可以连接2个bagoffeatures对象来训练分类器?连接SURF特征和氡特征来训练SVM
我已经训练使用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);
我收到每个公平的结果。无论如何要结合这些来训练使用氡和SURF点的分类器吗?
(我也试图通过使用k均值的手工做的氡BOW方法,但是,我得到了非常差的结果,所以我相信这是不正确的)
谢谢!
感谢您的回应!所以我试图按照你所说的,只是为了澄清,我不能再使用:categoryClassifier = trainImageCategoryClassifier(trainingSets,bag); confMatrix1 = evaluate(categoryClassifier,trainingSets);我必须使用 分类器= fitcecoc(featureVector,trainingLabels); predicttrainLabels = predict(classifier,featureVector); 我这样做了,而且我首先使用一个提取函数进行了测试,但是我得到的验证分类结果很差。你为什么会这样做?再次感谢你。 – User404
这是正确的,您将无法再使用'trainImageCategoryClassifier'。我能想到的唯一的事情就是在你调用'fitcecoc'之前,你必须规范你的特性,以便每个元素的范围在-1和1之间。 – Dima
好吧!我会试试。谢谢! – User404