通信搜索标记识别

时间:2016-01-12 09:25:59

标签: c++ opencv computer-vision opencv3.0 pose-estimation

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

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

enter image description here

现在我的第一个想法是以距离为基础。 由于我知道现实世界中我的标记的宽度,我可以很容易地计算出欧几里德距离乘以一个像素的真实世界大小。

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;

    while(j< | D |)

    测量dist(dRef,dj)并将其映射到P中的所有条目。    假设当前dist是一个,与P中的一个entrie具有最高的相似性。将假设标记的出现增加一个

  3. 3.dref =具有higesht出现值的标记

    4.对D

    中的所有检测执行此操作

    示例:

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

    问题:

    此方法仅适用于2D空间,只要标记都在同一平面内,距离就会得到纠正。但是如果某些标记不在同一平面上,则距离是错误的,因此距离不能再进行比较。请参阅下图以获取示例。

    enter image description here

    问题

    我知道有些东西像aruco标记,但我的问题的目的是,用白色圆形标记进行识别。

    有谁知道一种方法,我如何改进我的系统? 就像我在开始时说的那样,我的目标是用白色圆形标记做姿势估计。我对任何使我更接近这一目标的解决方案持开放态度。

0 个答案:

没有答案