【问题标题】:Concatenate SURF features and Radon Features to train SVM连接 SURF 特征和 Radon 特征来训练 SVM
【发布时间】: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


    【解决方案1】:

    当您使用bagOfFeatures 时,您调用encode 方法,该方法获取图像并返回特征袋直方图。您可以将该直方图与同一图像的 Radon 特征连接起来,并以此为基础进行训练。

    【讨论】:

    • 感谢您的回复!所以我试着按照你说的做,只是为了澄清,我不能再使用: categoryClassifier = trainImageCategoryClassifier(trainingSets, bag);confMatrix1 = evaluate(categoryClassifier,trainingSets);相反,我必须使用分类器 = fitcecoc(featureVector, trainingLabels);预测训练标签 = 预测(分类器,特征向量);我这样做了,我首先只使用了一个提取器函数进行了测试,但是我得到了很差的验证分类结果。你为什么会这样?再次感谢您。
    • 没错,您将无法再使用trainImageCategoryClassifier。我能想到在这里告诉你的唯一一件事是,你必须在调用 fitcecoc 之前对你的特征进行规范化,以便每个元素的范围在 -1 和 1 之间。
    • 好的!我会试试的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    • 2018-10-25
    • 2019-02-02
    • 2012-09-17
    • 2018-12-16
    • 2011-10-08
    • 1970-01-01
    相关资源
    最近更新 更多