1

我正在使用 OpenCV 的函数 cvFitLine,它给出的结果让我非常怀疑。基本上,您可以看到我输入的点坐标几乎沿着一条有 2 个异常值的线。我正在使用 Huber 距离测量来忽略异常值。然而,得到的拟合线是一条对角线,似乎非常考虑了异常值。难道我做错了什么?有人得到类似的结果吗?

(编辑)结果显然应该是一条类似于 {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);
4

1 回答 1

-1

如果您注意到有两个 x 坐标的值为 530 而它们应该是 531,则您没有正确输入坐标。这两个点出现故障(即值为 530 的点)。其余的都可以。

于 2012-03-26T22:29:22.377 回答