Python 使用OpenCV vs Matlab评估校准结果
我正在做一个项目,我必须校准摄像机,以便计算摄像机矩阵并将其用于其他过程 我使用Zahng的方法(棋盘格)校准相机,并使用两种不同的工具执行校准: 1-Matlab校准工具 2-OpenCV方法(cv2.CalibleCamera()) 对于这两种方法,我使用了相同的图像(16个图像) 结果来自MatlabPython 使用OpenCV vs Matlab评估校准结果,python,matlab,opencv,image-processing,camera-calibration,Python,Matlab,Opencv,Image Processing,Camera Calibration,我正在做一个项目,我必须校准摄像机,以便计算摄像机矩阵并将其用于其他过程 我使用Zahng的方法(棋盘格)校准相机,并使用两种不同的工具执行校准: 1-Matlab校准工具 2-OpenCV方法(cv2.CalibleCamera()) 对于这两种方法,我使用了相同的图像(16个图像) 结果来自Matlab 4380.06266797091 0 0 0 4374.31691291339
4380.06266797091 0 0
0 4374.31691291339 0
949.990213743877 664.725183192415 1
#Radial Distortion Coefficient
-0.355521260561817 1.30195034883959
#tangational Distortion Coefficient
0 0
#average REPROJECTION ERROR
0.513903578285060
----------------------------------------------------
结果形成OpenCV代码
#camera matrix
mtx [[4.38350928e+03 0.00000000e+00 9.73653727e+02]
[0.00000000e+00 4.37873075e+03 6.68924323e+02]
[0.00000000e+00 0.00000000e+00 1.00000000e+00]]
#Distortion Coefficients
dist [[-3.59709752e-01 3.91496111e+00 3.43950578e-03 1.01871917e-03
-6.21911790e+01]]
所以我的问题是:
1-主点稍有不同,认为哪个结果更准确
2-为什么OpenCV考虑5个畸变系数,而Matlab考虑4个畸变系数(OpenCV中不考虑的两个为零!)
提前感谢这些评论引导我找到了问题的解决方案。归功于@fmw42请参见。在Matlab中,可以选择2或3个径向畸变系数,也可以得到2个切向系数。看见在Opencv中,你可以得到5个系数:3个径向系数和2个切向系数。OpenCV和Matlab的返回系数的阶数不同。但是,如果畸变方程相同,结果应该是相等的。如果在Matlab中使用3个径向系数,可以看到结果。在OpenCV中,切线系数非常小,为3.43950578e-03 1.01871917e-03,可能可以忽略不计。在Matlab中,这两个值分别为0和0。差异可能是由于精度不同。但它们的影响可能可以忽略不计。你在Matlab中包含了歪斜吗。我相信OpenCV包含了它。你还没有表现出这些区别。请这样做。但是,首先让两个模型如上所述相等。哪个模型的残差较小?或者将点从三维投影到二维,并查看它们之间的差异。它们可能无关紧要或在误差允许范围内。请将您的结果发布给其他人查看。找出其中一个是否明显优于另一个,这将是一件有趣的事情。你的方法也很有教育意义。