当用户猛烈地移动相机(手机)时,我正试图使基于OpenCV的基准标记检测更加稳健.标记是ArTag风格,黑色边框内嵌有汉明码.通过对图像进行阈值处理来检测边界,然后根据找到的轮廓查找四边形,然后检查四边形的内部.
通常,如果识别黑色边界,则标记的解码相当稳健.我尝试过最明显的事情,即对图像进行两次下采样,并在这些级别上执行四次检测.这有助于相机在极端近地标记上散焦,并且还有非常小的图像模糊水平,但对于相机运动模糊的一般情况并没有太大帮助
是否有关于使检测更加稳健的方法的研究?我想知道的想法包括:
失败的想法的链接也将受到赞赏,如果它节省我尝试它们.
我们正在开发一个 AR 应用程序,其中需要将对象的 3D 模型叠加到对象的视频流上。Unity 场景包含 3D 模型,并且相机正在拍摄 3D 对象。相机姿势最初未知。
\n\n\xe2\x96\xb6我们尝试过的
\n\n我们没有找到一个好的解决方案来直接在 Unity 中估计相机位姿。因此,我们使用了OpenCV,它提供了广泛的计算机视觉函数库。特别是,我们找到Aruco 标签,然后将其匹配的 3D-2D 坐标传递给solvePnp.
solvePnp返回与现实相符最多几厘米的相机位置。我们还验证了较低的重投影误差。
每个使用过的标签角都会被重新投影并在图像上显示为红点。如您所见,差异很小。
\n\n这些结果看起来不错,应该足以满足我们的用例。\n因此,我们根据现实和 OpenCV 验证相机姿势。
\n\n\xe2\x96\xb6问题
\n\n然而,当将相机放置在 Unity 场景中的估计姿势时,3D 对象无法很好地对齐。
\n\n\n\n在此 Unity 屏幕截图中,您可以看到虚拟(Unity 对象)绿色标签的视图与视频源中的真实标签不匹配。
\n\n\xe2\x96\xb6可能的根本原因
\n\n我们确定了可以解释 Unity 和 OpenCV 之间不匹配的不同可能根本原因:
\n\n\n\n …opencv computer-vision unity-game-engine pose-estimation opencv-solvepnp
opencv ×2