ios – 拟合一条线–MatLab不同意O​​penCV

ios – 拟合一条线–MatLab不同意O​​penCV,第1张

概述取样点(10,10),(20,0),(20,40),(20,20). 在Matlab中,polyfit返回斜率1,但对于相同的数据,openCV fitline返回斜率10.7.通过手工计算,近垂直线(斜率10.7)是更好的最小二乘拟合. 为什么我们从这两个图书馆获得不同的界限呢? OpenCV代码 – (在iOS上) vector<cv::Point> vTestPoints;vTestPoi 取样点(10,10),(20,0),40),20).

在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不同意O​​penCV全部内容,希望文章能够帮你解决ios – 拟合一条线–MatLab不同意O​​penCV所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1041370.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存