1

我的总体目标是进行基于标记的姿势估计。为此,我需要图像坐标和对象坐标之间的对应关系。

因此,在检测到圆形标记后,我需要确定左上角的标记是 A,右侧的第一个标记是 B,然后是 C,然后是 D。如下面的示例图像所示。

在此处输入图像描述

现在我的第一个想法是基于这个距离。因为我知道我的标记在现实世界中的宽度,所以我可以简单地计算欧几里得距离乘以一个像素的现实世界大小。

Example:
realMarkerWidth = 2,7
realWorldSizeOfOnePixel = MarkerWidth / RealMarkerWidth
distance = euclidiantDistance(P1,P2) * realWorldSizeOfOnePixel

我目前的做法:

有了这些信息,对应搜索算法就像这样。

符号:

初始测量距离存储在集合 P =(dist(m1,m2),...,dist(mi,mi+1)}

检测到的标记将在集合中 D = {d1,d2...,dn}

  1. 最初测量所有标记标记之间的距离。P = {dist(A,B),dist(A,C),dist(A,D),dist(B,C),..., dist(D,C) 注意:这仅在之前完成一次姿态估计程序的运行时间。

  2. 如果 |D| >= 3 然后

    dref=d1;

    dj = d2;

    而 ( j < |D|)

    测量 dist(dRef,dj) 并将其与 P 中的所有条目进行比较。假设当前 dist 是与 P 中的一个条目具有最高相似性的那个。将假定标记的出现增加一

3.dref = 出现值最高的标记

4.对D中的所有检测执行此操作


例子:

dref = A 并且其他检测到的标记是 B 和 C。然后程序将计数 2 次 A 一次 B 和一次 C。A 的出现率高于所有其他,因此 dref 必须是 A,


问题:

这种方法只适用于二维空间,只要标记都在同一个平面上,距离就会被校正。但是,如果某些标记不在同一平面上,则距离是错误的,因此无法再比较距离。有关示例,请参见下图。

在此处输入图像描述


问题

我知道有像 aruco 标记之类的东西,但我的问题旨在仅使用白色圆形标记进行识别。

有谁知道一种方法,我可以如何改进我的系统?就像我一开始说的,我的目标是用白色圆形标记进行姿态估计。我愿意接受任何能让我更接近这个目标的解决方案。

4

0 回答 0