2012-03-26 12 views
1

Ich benutze OpenCV-Funktion cvFitLine und es gibt mir Ergebnisse, die ich sehr zweifelhaft finde. Grundsätzlich kann man sehen, dass ich Koordinaten von Punkten ziemlich genau entlang einer Linie mit 2 Ausreißern eingabe. Ich verwende den Huber-Abstand, um die Ausreißer zu ignorieren. Die resultierende angepasste Linie ist jedoch eine diagonale Linie, die die Ausreißer sehr zu berücksichtigen scheint. Mache ich etwas falsch? bekommt jemand ähnliche Ergebnisse?opencv cvfitline gibt zweifelhafte Ergebnisse

(bearbeiten) Das Ergebnis sollte offensichtlich eine gerade Linie analog zu {vx, vy, x0y0} = {0,1,531,0} sein, aber openCV gibt mir {0,85, -0,53, 453,144}, die nicht entfernt vertikal ist.

CvPoint * points=(CvPoint*)malloc(13 * sizeof(points[0])); 

points[0].x = 531;points[0].y = 0; 
points[1].x = 531;points[1].y = 20; 
points[2].x = 530;points[2].y = 40; 
points[3].x = 531;points[3].y = 60; 
points[4].x = 530;points[4].y = 80; 
points[5].x = 531;points[5].y = 100; 
points[6].x = 531;points[6].y = 120; 
points[7].x = 531;points[7].y = 140; 
points[8].x = 531;points[8].y = 160; 
points[9].x = 531;points[9].y = 180; 
points[10].x = 531;points[10].y = 200; 
points[11].x = 273;points[11].y = 260; 
points[12].x = 141;points[12].y = 280; 
float testPar[4];// to store the results 
CvMat point_mat = cvMat(1, 13, CV_32SC2, points); 
cvFitLine(&point_mat,CV_DIST_HUBER ,0,0.01,0.01,testPar); 

Antwort

-1

Sie haben nicht eingegeben die Koordinaten richtig, wenn Sie es bemerken, sind zwei x-Koordinaten, die von Wert 530 sind, während sie 531. Diese beiden Punkte sollte eine Fehlfunktion (das heißt diejenigen, die mit dem Wert 530). Der rest ist in Ordnung.

+0

Sollte die Linie immer noch in der Nähe von 530-531 liegen, anstatt, was ich bekomme, die auf den 2 Ausreißern [11] und [12] viel schwerer zu wiegen scheint? – Denis