如何使用MATLAB Delaunay算法从离散点中提取边界线?
- 内容介绍
- 文章标签
- 相关推荐
本文共计982个文字,预计阅读时间需要4分钟。
在项目推进中遇到需提取离散点边界的难题,对Matlab不太熟悉。作为初学者,不妨先摸清头脑,选用哪种算法能有效提取已知点集的轮廓线呢?
最近在项目进行中遇到要提取离散点边界的问题,像我这样的对于matlab不是特别熟练的朋友一开始肯定摸不着头脑,到底选用哪种算法可以有效地提取到所有已知点的轮廓线呢。本人经过大量的文献搜索及代码实验找到了几个效果比较好的轮廓提取代码,在这里做个总结,并且希望能够对遇到同样问题的朋友有所启发。
关于离散点边界提取的三种方法:
1.Convhull 离散点集获得边界
2.Alpha Shape算法检测边缘点
3.Delaunay 三角剖分算法
前两种方法在之前的博客中已经做了总结这里就不展开了,现在主要介绍第三种算法。
该算法的总体思路如下:
1、利用 delaunay 函数,对所有数据点进行Delaunay 三角剖分处理,delaunay 函数的返回值是一个 N * 3 的矩阵,其中 N 为剖分出的三角形个数,3 为每个三角形的三个端点的序号。
2、根据 triangles 矩阵,提取出所有delaunay 三角剖分时所连接的边,依次扫描triangles 矩阵的每一行,将delaunay 三角剖分时所连接的边添加到一个新的矩阵中,最后构成一个 M * 2 的矩阵,其中 M 是一共所连接的边的条数。
本文共计982个文字,预计阅读时间需要4分钟。
在项目推进中遇到需提取离散点边界的难题,对Matlab不太熟悉。作为初学者,不妨先摸清头脑,选用哪种算法能有效提取已知点集的轮廓线呢?
最近在项目进行中遇到要提取离散点边界的问题,像我这样的对于matlab不是特别熟练的朋友一开始肯定摸不着头脑,到底选用哪种算法可以有效地提取到所有已知点的轮廓线呢。本人经过大量的文献搜索及代码实验找到了几个效果比较好的轮廓提取代码,在这里做个总结,并且希望能够对遇到同样问题的朋友有所启发。
关于离散点边界提取的三种方法:
1.Convhull 离散点集获得边界
2.Alpha Shape算法检测边缘点
3.Delaunay 三角剖分算法
前两种方法在之前的博客中已经做了总结这里就不展开了,现在主要介绍第三种算法。
该算法的总体思路如下:
1、利用 delaunay 函数,对所有数据点进行Delaunay 三角剖分处理,delaunay 函数的返回值是一个 N * 3 的矩阵,其中 N 为剖分出的三角形个数,3 为每个三角形的三个端点的序号。
2、根据 triangles 矩阵,提取出所有delaunay 三角剖分时所连接的边,依次扫描triangles 矩阵的每一行,将delaunay 三角剖分时所连接的边添加到一个新的矩阵中,最后构成一个 M * 2 的矩阵,其中 M 是一共所连接的边的条数。

