Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用OpenCV vs Matlab评估校准结果_Python_Matlab_Opencv_Image Processing_Camera Calibration - Fatal编程技术网

Python 使用OpenCV vs Matlab评估校准结果

Python 使用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

我正在做一个项目,我必须校准摄像机,以便计算摄像机矩阵并将其用于其他过程

我使用Zahng的方法(棋盘格)校准相机,并使用两种不同的工具执行校准: 1-Matlab校准工具 2-OpenCV方法(cv2.CalibleCamera())

对于这两种方法,我使用了相同的图像(16个图像)

结果来自Matlab

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包含了它。你还没有表现出这些区别。请这样做。但是,首先让两个模型如上所述相等。哪个模型的残差较小?或者将点从三维投影到二维,并查看它们之间的差异。它们可能无关紧要或在误差允许范围内。请将您的结果发布给其他人查看。找出其中一个是否明显优于另一个,这将是一件有趣的事情。你的方法也很有教育意义。