2重新投影错误和自定义计算的不一致

2重新投影错误和自定义计算的不一致

本文介绍了OPENCV:Calibratecamera 2重新投影错误和自定义计算的不一致的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

我有一个Python脚本,该脚本使用calibratecamera2方法从棋盘的几个视图校准相机.校准成功后,我将追踪所有原始点并作一些绘图,然后再次计算重投影误差.令我惊讶的是,opencv和我的计算出的重投影误差有些不同.我觉得很奇怪.我是用错误的方式计算的吗?

I have a python script that uses the calibratecamera2 method to calibrate a camera from a few views of a checker board. After a successful calibration I go after all original points and do some plots and compute again the re-projection error. My surprise is that the reprojection error computed by opencv and mine are a bit different. I found it strange. Am I computing it in a wrong way?

obj_points = []# 3d point in real world space. List of arrays
img_points = []# 2d points in image plane. List of arrays

...

ret, camera_matrix, dist_coeffs, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points, (w, h), camera_matrix, dist_coeffs, rvecs, tvecs, calib_flags +cv2.CALIB_USE_INTRINSIC_GUESS, criteria)
print "Final reprojection error opencv: ", ret   #Compute mean of reprojection error
tot_mean_error=0
mean_error_image = 0
for i in xrange(len(obj_points)):
    reprojected_points, _ = cv2.projectPoints(obj_points[i], rvecs[i], tvecs[i], camera_matrix, dist_coeffs)
    reprojected_points=reprojected_points.reshape(-1,2)
    mean_error_image=np.sum(np.sum(np.abs(img_points[i]-reprojected_points)**2,axis=-1)**(1./2))/np.alen(reprojected_points)
    tot_mean_error +=mean_error_image

mean_error=tot_mean_error/len(obj_points)
print "Mean reprojection error: ", mean_error

最终投影误差opencv:0.571030279037

Final reprojection error opencv: 0.571030279037

平均投影错误:0.438696960449

Mean reprojection error: 0.438696960449

推荐答案

我在错误/不同地计算它.我正在使用这种公式:

I was computing it wrong/differently. I was using this kind of formula:

但是opencv使用这个:

But opencv uses this one:

所以,如果有人感兴趣,代码现在看起来像:

So, if anyone is interested the code looks now like:

#Compute mean of reprojection error
tot_error=0
total_points=0
for i in xrange(len(obj_points)):
    reprojected_points, _ = cv2.projectPoints(obj_points[i], rvecs[i], tvecs[i], camera_matrix, dist_coeffs)
    reprojected_points=reprojected_points.reshape(-1,2)
    tot_error+=np.sum(np.abs(img_points[i]-reprojected_points)**2)
    total_points+=len(obj_points[i])

mean_error=np.sqrt(tot_error/total_points)
print "Mean reprojection error: ", mean_error

最终投影误差opencv:0.571030279037

Final reprojection error opencv: 0.571030279037

平均投影错误:0.571030718956

Mean reprojection error:0.571030718956

这篇关于OPENCV:Calibratecamera 2重新投影错误和自定义计算的不一致的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-06 07:18