7

我们正在制造一个自主机器人(在大学活动中),它遵循某些标志和方向并通过定向路线。机器人将在头部安装一个摄像头。它将跟随在它前面的道路上或墙壁上绘制的标志,并据此做出决定。标志将是绿色箭头(用于 GO 信号),或红色 T 作为停止标志。机器人将实时扫描这些符号并执行必要的操作。这些标志可以直接在前面的墙上,也可以画在前面的路上。

我曾尝试寻找必要的图像变换算法或方法,但我们对这个领域还很陌生。我就如何解决这个问题以及可能对我们有帮助的必要代码寻求您的帮助(假设我们是初学者)。

我已经研究了以下线程,但我很困惑: - OpenCV 对象检测 - 中心点 -如何识别此图像中的矩形? - http://www.chrisevansdev.com/computer-vision-opensurf.html(我无法使用它)

该事件给出的提示之一是,我们可以将箭头建模为矩形和三角形,以找出三角形的中心是否在该矩形的右侧(这意味着向右走)或其他位置。对于 T 也是如此。

谢谢!:)

4

2 回答 2

8

如果标志是先前已知的,您可以使用“通过特征检测识别对象”的方法。

这个想法是你有一个标志的图片(箭头或 T),你执行以下训练步骤,离线

1 - 特征检测(使用,SURF,FAST,...)

2 - 使用 SIFT、FREAK 等进行描述符提取(从特征中)...

然后是实时部分。对于每一帧,您必须执行特征检测和描述符提取,但随后您需要对训练图像进行匹配以查看您得到的对象。一个可以实时工作的例子:

cv::FAST detector;
cv::FREAK descriptor;
BFMatcher matcher = BFMatcher(NORM_HAMMING,false);

detector.detect(frame,keypoints_frame);
descriptor.compute(frame, keypoints_frame,descriptors_frame);
matcher.match(descriptors_trainning, descriptors_frame);

这将是匹配的第一种方法,然后您需要优化和删除异常值。有些技术是

  • 比率测试

  • 交叉检查

  • RANSAC + 单应性

这里有一个完整的例子

于 2012-12-19T08:28:28.177 回答
3

我假设您可以在活动开始前获得标志:拿箭头标志,然后从他那里获得“筛选描述符”并将它们存储在您的机器人中。

然后在机器人获取的每一帧中寻找标志的颜色,当你看到类似于标志的东西时,筛选描述符并尝试在存储的描述符和新的描述符之间进行注册。如果成功,请尝试计算原始存储符号与您在图像上找到的符号之间的旋转和平移矩阵。

要阅读有关 sift 的信息,我建议在此站点上: http ://aishack.in/tutorials/sift-scale-invariant-feature-transform-introduction/ 在您了解 sift 的基础知识后,我建议您下载一些实现自己实现,这是一项非常乏味的工作,并且有很多陷阱

顺便说一句,虽然 sift 是“比例不变特征变换”,但我很确定它也适用于你的情况,即使你也有“透视变换”。

希望它有所帮助

于 2012-12-18T05:36:18.503 回答