如何提高aruco检测精度?

时间:2018-02-10 17:34:40

标签: opencv 3d-reconstruction pose-estimation aruco

我用相同的相机从两个位置拍摄了aruco板上的物体。我在工作之前没有扭曲图像和校准相机。我在一次拍摄中取一个红点并计算3d线,这对应于此点3D空间,然后将其投影到另一个图像:

p1

p2

问题是另一幅图像上的线与点之间存在一些差异(~5px-15px)。我也观察到与opengl生成的图像相同的问题,所以它似乎不是我的相机的问题。我使用这段代码来检测电路板位置:

MarkerMapPoseTracker MSPoseTracker;  // tracks the pose of the marker map
MSPoseTracker.setParams(camParam, theMarkerMapConfig);
MSPoseTracker.estimatePose(ret.markers);

是否有可能以某种方式增加容忍度?我还发现了具有某种容差参数的函数:

bool estimatePose(Marker& m, const CameraParameters& cam_params, float markerSize, float minErrorRatio = 4 /*tau_e in paper*/)

但我不知道如何将此参数传递给MSPoseTracker.estimatePose。如果我认为至少可以理论化它,我怎样才能提高精度?

1 个答案:

答案 0 :(得分:1)

我最终得到了蛮力解决方案,我在时间上没有实施。我用 getMarker3DInfo 获取了校准板上标记边界的坐标,找到了用cv :: projectPoints投影的点的坐标,然后在这两组四点之间找到了单应性。这使我能够计算原始照片和投影校准板之间的L2范数。然后我连接了 bobyqa 算法,这是一个开源GNU优化库,专门用于多维优化,没有用于重计算差异函数的导数。这给出了相当不错的结果:

enter image description here