在Matlab中,polyfit返回斜率1,但对于相同的数据,openCV fitline返回斜率10.7.通过手工计算,近垂直线(斜率10.7)是更好的最小二乘拟合.
为什么我们从这两个图书馆获得不同的界限呢?
OpenCV代码 – (在iOS上)
vector<cv::Point> vTestPoints;vTestPoints.push_back(cv::Point( 10,10 ));vTestPoints.push_back(cv::Point( 20,0 ));vTestPoints.push_back(cv::Point( 20,40 ));vTestPoints.push_back(cv::Point( 20,20 ));Mat cvTest = Mat(vTestPoints);cv::Vec4f testWeight;fitline( cvTest,testWeight,CV_disT_L2,0.01,0.01);NSLog(@"Slope: %.2f",testWeight[1]/testWeight[0]);
xcode日志显示
2014-02-12 16:14:28.109 Application[3801:70b] Slope: 10.76
Matlab代码
>> pxpx = 10 20 20 20>> pypy = 10 0 20 40>> polyfit(px,py,1)ans = 1.0000e+000 -2.7733e-014解决方法 MATLAB试图最小化给定输入x的y中的误差(即,好像x是你的独立变量,y是你的因变量).
在这种情况下,通过点(10,10)和(20,20)的线可能是最好的选择.如果你试图计算给定x = 10的y值,那么接近所有三个点且x = 20的近垂直线会产生非常大的误差.
虽然我不认识OpenCV语法,但我猜测CV_disT_L2是一个距离度量,这意味着你试图最小化线与x-y平面中每个点之间的总距离.在这种情况下,穿过点集中间的更垂直的线将是最接近的.
哪个“正确”取决于您的观点代表什么.
总结以上是内存溢出为你收集整理的ios – 拟合一条线–MatLab不同意OpenCV全部内容,希望文章能够帮你解决ios – 拟合一条线–MatLab不同意OpenCV所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)