opencv cvfitline дает сомнительные результаты - PullRequest
1 голос
/ 27 марта 2012

Я использую функцию OpenCV cvFitLine, и она дает мне результаты, которые я считаю очень сомнительными. По сути, вы можете видеть, что я вводю координаты точек практически вдоль линии с двумя выбросами. Я использую меру расстояния Хьюбера, чтобы игнорировать выбросы. Получающаяся подобранная линия, однако, является диагональной линией, которая, кажется, очень сильно учитывает выбросы. Я делаю что-то неправильно? кто-нибудь получает похожие результаты?

(правка) Результат, очевидно, должен быть прямой линией, аналогичной {vx, vy, x0y0} = {0,1,531,0}, но openCV дает мне {0,85, -0,53, 453,144}, которая не является удаленно вертикальной.

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);

1 Ответ

0 голосов
/ 27 марта 2012

Вы неправильно указали координаты, если заметили, что есть две координаты x, имеющие значение 530, тогда как они должны быть 531. Эти две точки работают со сбоями (то есть с точками 530). Остальное в порядке.

...