MATLAB中Delaunay算法如何提取离散点边界-创新互联

小编给大家分享一下MATLAB中Delaunay算法如何提取离散点边界,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

创新互联建站主要从事成都网站制作、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务江华,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220

关于离散点边界提取的三种方法:

1.Convhull 离散点集获得边界

2.Alpha Shape算法检测边缘点

3.Delaunay 三角剖分算法

前两种方法在之前的博客中已经做了总结这里就不展开了,现在主要介绍第三种算法。

该算法的总体思路如下:

1、利用 delaunay 函数,对所有数据点进行 Delaunay 三角剖分处理,delaunay 函数的返回值是一个 N * 3 的矩阵,其中 N 为剖分出的三角形个数,3 为每个三角形的三个端点的序号。

2、根据 triangles 矩阵,提取出所有 delaunay 三角剖分时所连接的边,依次扫描 triangles 矩阵的每一行,将 delaunay 三角剖分时所连接的边添加到一个新的矩阵中,最后构成一个 M * 2 的矩阵,其中 M 是一共所连接的边的条数。

3、显然,最小凸多边形上的边应该仅在以上矩阵中出现一次,因此,将以上矩阵中那些出现次数超过一次的边全部去掉,最后保留的便是最小凸多边形的边。

4、根据最小凸多边形的边,很容易得到构成最小凸多边形的结点的顺序,从而解决问题。

输入参数 points 是一个 2 * P 矩阵, P 为数据点的个数,第一行是这些数据点对应的 x 坐标,第二行是对应的 y 坐标;输出参数 polygon 是一个 2 * Q 矩阵, Q 为凸多边形的顶点个数(首尾相连),第一行是这些顶点对应的 x 坐标,第二行是对应的 y 坐标。代码实现如下:

function polygon = minimal_convex_polygon(points)
 % 进行 delaunay 三角剖分,将所有连接了的边保存在矩阵 lines 中
 triangles = sort(delaunay(points(1, :), points(2, :)), 2);
 lines = zeros(size(triangles, 1) * 3, 2);
 for i = 1:size(triangles, 1)
 lines(3 * i - 2,:) = [triangles(i, 1), triangles(i, 2)];
 lines(3 * i - 1,:) = [triangles(i, 1), triangles(i, 3)];
 lines(3 * i,:) = [triangles(i, 2), triangles(i, 3)];
 end
 % 去掉 lines 中出现次数超过一次的边
 [~, IA] = unique(lines, 'rows');
 lines = setdiff(lines(IA, :), lines(setdiff(1:size(lines, 1), IA), :), 'rows');
 % 跟踪 lines 中的数据点,将凸多边形的顶点编号保存在 seqs 中
 seqs = zeros(size(lines, 1) + 1,1);
 seqs(1:2) = lines(1, :);
 lines(1, :) = [];
 for i = 3:size(seqs)
 pos = find(lines == seqs(i - 1));
 row = rem(pos - 1, size(lines, 1)) + 1;
 col = ceil(pos / size(lines, 1));
 seqs(i) = lines(row, 3 - col);
 lines(row, :) = [];
 end
 % 根据 seqs , 得到凸多边形顶点坐标
 polygon = points(:, seqs);
end

定义了实现函数,下面进行调用:

plot(Pp(1,:),Pp(2,:), '*r', 'LineWidth', 4);  % Pp第一行为x坐标,第二行为y坐标
polygon = minimal_convex_polygon(Pp);
hold on;
plot(polygon(1, :), polygon(2, :), 'LineWidth', 2);

以上是“MATLAB中Delaunay算法如何提取离散点边界”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联网站建设公司行业资讯频道!

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

网页名称:MATLAB中Delaunay算法如何提取离散点边界-创新互联
本文来源:https://www.cdcxhl.com/article6/coodig.html

成都网站建设公司_创新互联,为您提供定制网站网站设计公司手机网站建设品牌网站设计外贸网站建设用户体验

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网站建设公司