1

我需要在移动物体的一系列照片上跟踪四个点。起初,我尝试了看起来像棋盘的四个方格(2 个白色和 2 个黑色)和 ORB 检测器的标记:

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('D:/workspace_Rita/Tag5.jpg',0)

orb = cv2.ORB_create()

# find the keypoints with ORB
kp = orb.detect(img,None)
kp, des = orb.compute(img, kp)

img2 = cv2.drawKeypoints(img,kp,None,color=(0,255,0), flags=0)
plt.imshow(img2),plt.show()

图片: http: //postimg.org/image/52phl54rz/

А加上所需的点(标记的中心),我得到了很多噪音,所以我决定将棋盘标记更改为基准标记,以 ARTag 样式绘制。此外,如果对象旋转,这些标记将有助于识别点。现在,使用相同的 Python 代码,我得到:

图片: http: //postimg.org/image/f58zzrkl5/

我仍然检测到噪声点,并且我看不到从关键点质量中提取标记中心坐标的简单方法。我认为,我需要调整检测器的灵敏度(也许,对图像进行一些预过滤),或者找到另一种算法。

我会很感激想法和示例,我可以使用哪些检测器或算法以最简单的方式跟踪基准标记中心,更喜欢 Python 语言和 Open CV。

4

1 回答 1

0

我认为您检测标记太快了。这是如何做到的:

  1. 使用中值滤波器去噪(可选)
  2. 检测亮/白表面的简单阈值
  3. 将最大的保留在图像中心(白色面板)。这可以通过添加霍夫滤波器进行微调,以找到平行线(面板/矩形边界)。
  4. 新阈值以检测先前结果中的暗区。
  5. 连接组件标签以分隔暗区。如果他们互相接触。
  6. 每个区域的质心,否则如果区域相互接触,则最终被侵蚀。
于 2016-06-27T20:26:15.667 回答