我的总体目标是进行基于标记的姿势估计。为此,我需要图像坐标和对象坐标之间的对应关系。
因此,在检测到圆形标记后,我需要确定左上角的标记是 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}
最初测量所有标记标记之间的距离。P = {dist(A,B),dist(A,C),dist(A,D),dist(B,C),..., dist(D,C) 注意:这仅在之前完成一次姿态估计程序的运行时间。
如果 |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 标记之类的东西,但我的问题旨在仅使用白色圆形标记进行识别。
有谁知道一种方法,我可以如何改进我的系统?就像我一开始说的,我的目标是用白色圆形标记进行姿态估计。我愿意接受任何能让我更接近这个目标的解决方案。