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