Computer vision 姿势估计方法的困惑

Computer vision 姿势估计方法的困惑,computer-vision,marker,homography,pose-estimation,Computer Vision,Marker,Homography,Pose Estimation,我正试图从一个具有4个角=4个共面点的平面标记进行姿势估计(实际上[编辑:3DOF]旋转就是我所需要的一切)。 直到今天,我从我所读到的每件事中都有这样的印象:你总是会计算单应性(例如,使用DLT),并使用各种可用的方法(Faugeras,Zhang,中也描述了分析方法)分解该矩阵,并在必要时使用非线性优化对其进行优化 第一个小问题:如果这是一种分析方法(简单地从一个矩阵中选取两列,并从中创建一个正交矩阵,从而得到所需的旋转矩阵),那么需要优化什么?我在Matlab中尝试过,结果非常不稳定,因此

我正试图从一个具有4个角=4个共面点的平面标记进行姿势估计(实际上[编辑:3DOF]旋转就是我所需要的一切)。
直到今天,我从我所读到的每件事中都有这样的印象:你总是会计算单应性(例如,使用DLT),并使用各种可用的方法(Faugeras,Zhang,中也描述了分析方法)分解该矩阵,并在必要时使用非线性优化对其进行优化

第一个小问题:如果这是一种分析方法(简单地从一个矩阵中选取两列,并从中创建一个正交矩阵,从而得到所需的旋转矩阵),那么需要优化什么?我在Matlab中尝试过,结果非常不稳定,因此我可以清楚地看到结果并不完美,甚至不够充分,但我也不明白,如果这个简单的方法已经产生了结果,为什么要使用Faugeras和Zhang使用的相当昂贵和复杂的SVD

还有迭代姿态估计方法,如Lu等人的Ortohomonal迭代(OI)算法,或者Schweighofer和Pinz的鲁棒姿态估计算法,其中甚至没有提到“单应性”一词。他们所需要的只是一个初始姿态估计,然后对其进行优化(例如,Schweighofer在Matlab中完成的参考实现使用OI算法,该算法本身使用基于SVD的方法)

我的问题是:到目前为止,我读到的所有东西都是‘4分’?单应,单应,单应。分解好吧,有几种方法很棘手,一般来说不是唯一的。”现在这个迭代的世界打开了,我无法在头脑中连接这两个世界,我不完全理解它们的关系。我甚至不能正确地表达我的问题是什么,我只是希望有人能理解我在哪里

我非常感谢你给我一两个提示


编辑:可以这样说吗:平面上的4个点及其图像通过单应关系关联,即8个参数。通过使用Faugeras、Zhang或直接解计算和分解单应矩阵,可以找到标记器姿势的参数,每种方法都有各自的缺点。也可以使用迭代方法(如OI或Schweighofer算法)来完成,该算法在任何时候都不计算单应矩阵,而只使用相应的点,并且需要初始估计(可以使用单应分解的初始猜测).

只有四个点,您的解决方案通常对其位置的小误差非常敏感,特别是当矩形几乎与光轴正交时(这是因为消失点是不可见的——它们在图像之外,距离测量值很远——并且姿势由从四边形中心到消失点的向量的叉积给出)


您的模式是否能够确保角点能够以亚像素精度可靠地定位?我建议对角点使用“棋盘格类型”模式,这允许使用良好且简单的迭代细化算法来实现亚像素精度(查找“迭代鞍点算法”,或在OpenCV中查找文档).

我不会给你一个完整的答案,但看起来至少有一点需要澄清:

单应性是从p^2(齐次3向量)到自身的可逆映射,它始终可以由可逆3x3矩阵表示。话虽如此,请注意,如果您的3d点是共面的,您将始终能够使用单应性将世界点与图像点关联起来

通常,3-空间中的点在齐次坐标系中表示为4-向量。作用于p^3上的射影变换由非奇异4x4矩阵表示(15个自由度,16个元素减去总尺度的1)

因此,底线是,如果你的模型是平面的,你将能够摆脱单应(8自由度)和一个适当的算法,而在一般情况下,你将需要估计4x4矩阵,并需要一个不同的算法

希望这有帮助


Alex

我们必须从基础开始。你已经有了这些好的4个角点吗?如果有,那么没有什么其他的事情要做,问题已经解决了。如果你不能准确地获得这4个点会发生什么?现在其他的方法是有意义的,对吗?嗯,找到这4个角点是一个图像处理的问题,不是吗?我正在使用g ARToolKitPlus使用的矩形检测算法,所以是的,给或取几个像素的噪声,我有4个角。但是这些算法都不能帮助我找到角点,但是使用这些角点坐标来找到姿势。我不知道迭代算法怎么可能提高角点的精度,毕竟不是图像就是我所拥有的一切。我只是意识到我没有明确地写下我需要绕3个轴旋转,而不仅仅是z轴(标记平面在z=0处),在这种情况下,问题当然可以通过4个角点“解决”。这就是你所说的吗?好的,谢谢。我的图案是白色背景上的一个简单的黑色矩形。我目前使用的算法不允许亚像素精度,但我计划尝试使用类似于Harris角点检测的东西,这是Matlab开箱即用。但这不是我的问题,我很困惑,所有初学者的代码示例、教程和科学论文都在讨论如何计算单应性,而在进行图像处理(如校正)时,单应性似乎才是真正需要的。我开始感觉像是从单应性进行姿势估计哈里斯算法本身不是亚像素级的精确算法(尽管我不确定Matlab实现的具体功能)。它的解通常被用作ite的起点