没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
最近在项目进行中遇到要提取离散点边界的问题,像我这样的对于matlab不是特别熟练的朋友一开始肯定摸不着头脑,到底选用哪种算法可以有效地提取到所有已知点的轮廓线呢。本人经过大量的文献搜索及代码实验找到了几个效果比较好的轮廓提取代码,在这里做个总结,并且希望能够对遇到同样问题的朋友有所启发。 关于离散点边界提取的三种方法: 1.Convhull 离散点集获得边界 2.Alpha Shape算法检测边缘点 3.Delaunay 三角剖分算法 前两种方法在之前的博客中已经做了总结这里就不展开了,现在主要介绍第三种算法。 该算法的总体思路如下: 1、利用 delaunay 函数,对所有数据点进行 De
资源详情
资源评论
资源推荐

MATLAB Delaunay算法提取离散点边界的方法算法提取离散点边界的方法
最近在项目进行中遇到要提取离散点边界的问题,像我这样的对于matlab不是特别熟练的朋友一开始肯定摸不着头脑,到底选
用哪种算法可以有效地提取到所有已知点的轮廓线呢。本人经过大量的文献搜索及代码实验找到了几个效果比较好的轮廓提取
代码,在这里做个总结,并且希望能够对遇到同样问题的朋友有所启发。
关于离散点边界提取的三种方法:
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);
效果图片我还不会添加进来,有兴趣的朋友可以试一试。
您可能感兴趣的文章您可能感兴趣的文章:python调用matlab的m自定义函数方法matlab 生成.bmp格式的文件Matlab制作视频并转换成gif动态图的
两种方法Matlab实现数据的动态显示方法matlab中实现矩阵删除一行或一列的方法ubuntu下Matlab_Linux添加工具包操作步骤
详解如何在python中读写和存储matlab的数据文件(*.mat)在ubuntu16.04上创建matlab的快捷方式(实现方法)Ubuntu 16.04
LTS下安装MATLAB 2014B的方法教程基于MATLAB神经网络图像识别的高识别率代码











格式:pdf 资源大小:944.6KB 页数:7



















weixin_38691742
- 粉丝: 4
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 【工业4.0边缘AI】基于TinyML的单片机电机异常检测系统设计:STM32H743XI实时振动监测与代码优化案例分析
- 【单片机开发】基于STM32WL55JC的智慧农业节点全栈实现:从LED到LoRa的关键技术与应用文档的主要内容
- 【单片机开发】进阶实践与复杂系统设计:多模块协同应用及未来发展趋势综述单片机开发
- 【单片机开发】从基础入门到实践应用:关键概念、开发技巧及典型应用场景详解
- 【单片机开发】基于传感器数据采集与处理的温度监测系统设计:51单片机与DS18B20的实际应用案例分析
- 交流微电网系统中光伏、储能与异步电动机的协同控制及其实现方法
- Edge浏览器插件 定时鼠标左键点击
- JAVA+SQL电子通讯录带系统托盘(论文+源代码)
- 基于IGDT信息间隙决策理论的综合能源系统优化调度:应对风光不确定性与碳经济最大化 · 光热电站
- 直流微电网仿真模型:光伏+储能+三相逆变器的设计与实现(附建模过程)
- 直流微电网关键技术解析:光伏升压、双向DCDC储能与三相逆变系统的智能电力解决方案 · 直流微电网
- JAVA3D的网络三维技术的设计与实现(源代码+论文+说明)
- 基于双层优化策略的微电网系统容量配置与运行策略研究:多电源优化调度代码实践
- 基于共享储能电站的工业用户日前优化经济调度方法与效益分析
- MATLAB实现多智能体系统一致性算法用于电力系统分布式经济调度
- 基于多智能体系统一致性算法的电力系统分布式经济调度策略——代码实现与效果评估
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

评论1