2016-03-03 68 views
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方法,但是,我得到了非常差的结果,所以我相信这是不正确的)

谢谢!

回答

2

当您使用bagOfFeatures时,您可以调用encode方法,该方法将图像返回一个特征包的直方图。您可以将该直方图与您的Radon功能连接为相同的图像,然后进行训练。

+0

感谢您的回应!所以我试图按照你所说的,只是为了澄清,我不能再使用:categoryClassifier = trainImageCategoryClassifier(trainingSets,bag); confMatrix1 = evaluate(categoryClassifier,trainingSets);我必须使用 分类器= fitcecoc(featureVector,trainingLabels); predicttrainLabels = predict(classifier,featureVector); 我这样做了,而且我首先使用一个提取函数进行了测试,但是我得到的验证分类结果很差。你为什么会这样做?再次感谢你。 – User404

+0

这是正确的,您将无法再使用'trainImageCategoryClassifier'。我能想到的唯一的事情就是在你调用'fitcecoc'之前,你必须规范你的特性,以便每个元素的范围在-1和1之间。 – Dima

+0

好吧!我会试试。谢谢! – User404