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

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

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

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

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

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

示例数据:

Corner Detection

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

[ 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 等)的文章。我还尝试了一些 jar 装线检测器,但没有取得太大成功。我试着玩弄 Line Segment Detector但它需要一个灰度图像作为输入,我认为将我的矢量转换为完整的 2D 图像以将其输入 LSD 之类的东西会非常慢。

非常感谢任何帮助!

最佳答案

我将其视为寻找在多个尺度下稳定的曲率极值的问题 - 以及您尝试过的拆分和合并方法的线条提示。

关于matlab - 二维矢量数据中的角点检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20316793/

相关文章:

visual-studio-2010 - 如何找到单 channel 图像来运行 openCV 的方法 cvCanny

python - 在 OpenCV + Python 中计算汽车

c - 使用 leptonica 查找区域的边界框

opencv - 检测视频流中的 “noise” (“snow”,绿色 block ,部分帧失真等)

image-processing - 如何使用 Keras 中保存的模型对单个图像进行预测和分类?

matlab - 列出Matlab中的所有环境变量

c++ - 将 MATLAB 代码转换为 OpenCV C++

matlab - 计算 3D 点的距离矩阵

c - 将一维数组视为 C 中的二维数组以旋转图像

matlab - 如何在 Matlab 中编写一个 for 循环来读取 1000 个文本文件?