ios - 拟合一条线 - MatLab 不同意 OpenCV

标签 ios matlab opencv

取样本点 (10,10)、(20,0)、(20,40)、(20,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, 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代码

>> px
px =  10 20 20 20

>> py
py = 10 0 20 40

>> polyfit(px,py,1)
ans = 1.0000e+000 -2.7733e-014

最佳答案

MATLAB 正在尝试将给定输入 xy 中的误差最小化(即好像 x 是您的独立并且 y 你的因变量)。

在这种情况下,穿过点 (10,10) 和 (20,20) 的直线可能是最佳选择。如果您尝试计算给定 x= 的 y 的值,则靠近 x=20 的所有三个点的近垂直线将产生非常大的错误10

虽然我不认识 OpenCV 语法,但我猜 CV_DIST_L2 是一个距离度量,这意味着您正在尝试最小化直线与 x-y 平面中每个点之间的总距离.在那种情况下,穿过点集中间的更垂直的线将是最近的。

哪个“正确”取决于您的观点。

关于ios - 拟合一条线 - MatLab 不同意 OpenCV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21740810/

相关文章:

.net - 有没有办法通过MonoTouch制作 "custom" map ?

c - 在 Matlab 中编译 mex 文件时找不到标准 C 库

python - MATLAB 多维矩阵到 NumPy 矩阵的转换

c++ - 与MATLAB相比,OpenCV从视频文件中提取的帧更少

opencv - 视差图代码?

iOS - 将应用程序与文本文件捆绑在一起

ios - LandscapeRight 前置摄像头倒置拍摄的照片

ios - UINavigationBar titleView 比栏本高度

matlab - 跨两种模式的交叉成对距离测量

c++ - 使用 OpenCV 2.3.1 和 C++ 校准单个相机