2016-04-01 8 views
0

Ich habe mit Feature-Extraktion und Epipolare Geometrie gearbeitet. Allerdings komme ich immer wieder auf die folgenden Fehler:Warnung: Konvertieren von Nicht-Fließkommadaten in einzelne

Warning: Converting non-floating point data to single. In pdist2 (line 219) In extractFeaturesU (line 93)

Die Codezeile, die eine Warnmeldung zurückkehrt ist:

[distance, position] = sort(pdist2(double(repmat(featuresA, size(xPoints, 1))), featuresB), 2, 'ascend'); 

Der Teil des Codes die obige Zeile enthält unten angezeigt .

%% extract features 
corresponding = []; 
rightBound = size(sharpImageB, 2); 
xPoints = 3 : 3 : rightBound - 3; 
for index = 1 : size(realWantedPoints, 2) 
    %extract features from wanted points 
    disp('extracting features from wanted points...'); 
    if strcmp(desc, 'hog') 
     [featuresA, pointsA] = extractHOGFeatures(sharpImageA, realWantedPoints(:, index)', ... 
     'CellSize', [8 8], 'BlockSize', [2 2], 'NumBins', 9, 'UseSignedOrientation', true); 
    elseif strcmp(desc, 'block') 
     [featuresA, pointsA] = extractFeatures(sharpImageA, realWantedPoints(:, index)', ... 
     'Method', 'Block', 'BlockSize', 21, 'Upright', true); 
    elseif strcmp(desc, 'surf') 
     [featuresA, pointsA] = extractFeatures(sharpImageA, realWantedPoints(:, index)', ... 
     'Method', 'SURF', 'SURFSize', 64, 'Upright', true); 
    end 

    % generate epipolar line points 
    liner = star([1 0 0]) * [realWantedPoints(:, index); 1]; 
    yPoints = -(liner(3) + (liner(1) * xPoints))/liner(2); 
    matrixB = [xPoints', yPoints']; 

    % extract features from epipolar line points 
    disp('extracting features from epipolar line points...'); 
    if strcmp('hog', desc) 
     [featuresB, pointsB] = extractHOGFeatures(sharpImageB, matrixB, ... 
     'CellSize', [8 8], 'BlockSize', [2 2], 'NumBins', 9, 'UseSignedOrientation', true); 
    elseif strcmp('block', desc) 
     [featuresB, pointsB] = extractFeatures(sharpImageB, matrixB, ... 
     'Method', 'Block', 'BlockSize', 21, 'Upright', true); 
    elseif strcmp('surf', desc) 
     [featuresB, pointsB] = extractFeatures(greyB, matrixB, ... 
     'Method', 'SURF', 'SURFSize', 64, 'Upright', true); 
    end 

    % calculate similarity 
    [distance, position] = sort(pdist2(double(repmat(featuresA, size(xPoints, 1))), featuresB), 2, 'ascend'); 
    corresponding = [corresponding; pointsB(position(1), :)]; 
end 

xB = corresponding(:, 1); 
yB = corresponding(:, 2); 
+0

Was ist der Datentyp von FeaturesB? –

Antwort

0

Ich kann diesen Fehler erzeugen, indem pdist2 auf zwei Variablen Aufruf: eines vom Typ double und eine vom Typ Single. Z.B.

x = ones(5,1,'single'); 
y = ones(5,1,'double'); 
pdist2(x,y); 

Meine Vermutung ist, dass Ihr featuresB Variable single precision floating point ist und damit nicht den Typ Ihrer ersten Argument überein pdist2 (die doppelt so hoch ist, weil Sie es explizit konvertieren).

+0

Sie hatten Recht! Es hat funktioniert, danke –