使用霍夫变换的边缘跟踪

信息处理 卡尔曼滤波器 霍夫变换 视觉跟踪 精明边缘检测器
2022-02-04 09:14:21

我正在尝试改进一些在我的工作中完成项目的学生开发的边缘跟踪算法。该算法应该使用相机让机器人沿着一条线走。他们的方法是使用 Canny 算法检测边缘,然后使用 Hough 变换从该图像中提取线条。然后将向用户呈现三个建议的线路,用户可以选择机器人应该尝试遵循的线路。

我想要反馈的是使用霍夫变换的数据关联。帧之间的线条匹配有什么好的标准吗?现在使用的解决方案是测量跟随线和提取线之间的角度和距离,并选择最相似的一条。

我看到的另一个问题是他们没有过滤信号,即检测到帧之间的线。我有一个关于使用卡尔曼滤波器通过使用提取的线来估计边缘的当前参数的想法,以便它是动态的并且不易出错。你怎么看?

我曾考虑过制作一个 SLAM 算法,但因为我们只想要一个概念证明,这将是一次巨大的改造,并且需要比我目前拥有的更多的数据。

2个回答

SLAM 是同时定位和映射。如果您已经有地图,我认为您在路线跟踪中的主要挑战是本地化部分。

对于直线,Canny+Hough 流水线在检测中效果相对较好。每帧内的线条是否严格线性?他们会弯曲吗?假设您正在处理直线,则输出将是线参数化,例如ax+by=c. 测量线之间的距离有很多确定方法,您绝对可以将其集成到单个目标跟踪器中,以便在您逐步通过帧时关联最可能的线。

  1. 跨多个视图的匹配线是一个常见的研究问题,并且得到了相当好的研究:如果您有端点,例如:Tomas Werner - 跨多个视图的线段匹配:实现描述(备忘录)

即使很难处理更多的几何属性,如果您的场景条件良好,您也可以使用渐变/强度信息来匹配线条。

这是关于单目设置的多视图线匹配的完整源代码:manhofer - Line3D++ - Multi-View Stereo using Line Segments

你可能也想从那个开始。

  1. 在线路上使用 KALMAN 过滤器将是一个好主意。还有更复杂的算法。例如,在每一帧中,您可能希望最小化成本函数以获得子像素线,它与前一帧中的线具有更好的相似性。

您还可以跟踪相机姿势并从那里假设线条。

您尝试避免 SLAM,但也许,对线条进行三角测量并获得 3D 结构将是减少错误的最佳方法。