2016-03-03 125 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