二维矢量数据中的角点检测

时间:2013-12-01 20:21:58

标签: matlab image-processing computer-vision image-segmentation hierarchical-clustering

我正在尝试检测数据的2D散射矢量中的角(x / y坐标)。

数据来自激光测距仪,我们当前的平台使用Matlab(虽然独立的程序/库是一个选项,但导航/控制代码在Matlab上,所以它必须有一个接口)。

角点检测是SLAM算法的一部分,角落将作为地标。

如果可能,我也希望在速度方面达到接近100Hz的水平(我知道它的Matlab,但我的数据集非常小。)

示例数据:

Corner Detection

[蓝色是原始数据,红色是我需要检测的。 (这种观点实际上是自上而下的。)]

[Actual vector data from above shots]

到目前为止,我尝试了许多不同的方法,有些方法比其他方法更成功。 我从未正式研究过任何形式的机器视觉。

我的第一种方法是自制的最小二乘线装配工,它会将线条分成两半,直到它们满足一些r ^ 2值,然后尝试合并具有相似斜率/截距的线条。然后它将计算这些线的交叉点。它不是很好,但是在70%的时间里都能以相当的准确度工作,尽管它有一些完全缺少某些功能的坏问题。

我当前的方法使用clusterdata函数根据马哈拉诺比斯距离对我的数据进行分段,然后基本上做同样的事情(最小二乘线拟合/合并)。它工作正常,但我假设有更好的方法。

[Source Code to Current Method] [cnrs, dat, ~, ~] = CornerDetect(data, 4, 1)使用上述数据会产生我所获得的位置。

我不需要从头开始编写,看起来大多数高级方法都适用于2D图像或3D点云,而不是2D散射数据。我已经阅读了很多关于Hough变换和各种数据聚类方法(k-Means等)的内容。我也尝试了一些罐装线探测器而没有太大的成功。我尝试使用Line Segment Detector但它需要一个灰度图像作为输入,我认为将我的矢量转换为完整的2D图像以将其输入到像LSD这样的东西中会非常慢。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

我认为这是一个找到在多个尺度上稳定的曲率极值的问题 - 而你用线条提示的拆分和合并方法暗示了这一点。

答案 1 :(得分:1)

您可以使用哈里斯角探测器探测角落。