当前位置:网站首页>matlab封闭曲线拟合 (针对一些列离散点)
matlab封闭曲线拟合 (针对一些列离散点)
2022-08-04 05:35:00 【懂科研的程序员】
很久之前给大家介绍了如何用matlab进行图像轮廓坐标提取 (直通车:matlab任意图形轮廓坐标提取【含源代码】),当时就立了个flag要给大家做一期有关如何用matlab进行封闭曲线拟合的博文,拖了这么,它终于与大家见面了。
封闭曲线拟合和普通曲线拟合相比有个最大特点就是封闭曲线首尾相接,且多处出现一对多的情况,很难用一个解析式来表达 (当然像圆、椭圆这类规则的封闭曲线除外)。通过检索资料发现,D. A. Smith指出使用样条拟合的方式可以实现封闭曲线的拟合,顾天奇等人指出采用移动最小二乘法的方式可以实现封闭曲线拟合 (咱已经用matlab实现了此方法)。通过在File Exchange中检索发现,Santiago Benito通过调用matlab内置拟合函数的方式实现了封闭曲线的拟合,并将整合后的函数命名为:interpclosed。
本文主要介绍Santiago Benito所写函数能实现的功能以及相关的调用方法,咱自己写的代码暂不与大家分享。
The function can be used to:
(i) return the fit itself;
(ii) interpolate values within the curve using an arc-length parametrization;
(iii) compute the area, perimeter, centroid, and second moments of area of the curve.
Santiago Benito (File Exchange)
调用方式很简单,只需要准备按次序排列的XY坐标点 (随机打乱的数据点不能用,需要事先调整好各个点次序),然后指定一种拟合方法即可 (支持:'linear' 'pchip' 'spline'),咱对该代码进行升级修改,增加了cscvn、makima两种方法(升级后的代码将分享至原创代码与科研论文交流群中供公众号铁杆粉丝下载使用)。以下是使用interpclosed的应用案例,拟合所用到的数据来源于stackoverflow。
先上效果图

相关代码
% 数据来源:https://stackoverflow.com/questions/31464345/fitting-a-closed-curve-to-a-set-of-points
% interpclosed函数:nl.mathworks.com/matlabcentral/fileexchange/69055-interpclosed
clc;clear;close all;
data = [6.55525,3.05472;6.17284,2.802609;5.53946,2.649209;4.93053,2.444444;4.32544,2.318749;3.90982,2.2875;...
3.51294,2.221875;3.09107,2.29375;2.64013,2.4375;2.275444,2.653124;2.137945,3.26562;2.15982,3.84375;...
2.20982,4.31562;2.334704,4.87873;2.314264,5.5047;2.311709,5.9135;2.29638,6.42961;2.619374,6.75021;...
3.32448,6.66353;3.31582,5.68866;3.35159,5.17255;3.48482,4.73125;3.70669,4.51875;4.23639,4.58968;...
4.39592,4.94615;4.33527,5.33862;3.95968,5.61967;3.56366,5.73976;3.78818,6.55292;4.27712,6.8283;...
4.89532,6.78615;5.35334,6.72433;5.71583,6.54449;6.13452,6.46019;6.54478,6.26068;6.7873,5.74615;...
6.64086,5.25269;6.45649,4.86206;6.41586,4.46519;5.44711,4.26519;5.04087,4.10581;4.70013,3.67405;...
4.83482,3.4375;5.34086,3.43394;5.76392,3.55156;6.37056,3.8778;6.53116,3.47228;6.55525,3.05472];
r0 = mean(data);
x = data(:,1);
y = data(:,2);
n = 200;
tq = 0:1/n:1;
xyqS = interpclosed(x,y,tq);
xyqL = interpclosed(x,y,tq,'linear');
xyqP = interpclosed(x,y,tq,'cscvn');
plot(x,y,'.',xyqS(1,:),xyqS(2,:),xyqL(1,:),xyqL(2,:),xyqP(1,:),xyqP(2,:),'linewidth',2.5,'MarkerSize',30);
hold on;
plot(r0(1),r0(2),'r.','markersize',35);
axis equal;axis([2 7 2 7]);
hold off;未升级版interpclosed函数的获取方式,点击左下角阅读原文直接转到File Exchange中下载,或在懂科学的程序员公众号中回复QQ加交流群获取。想要获取升级版以及更多咱原创或升级优化代码的伙伴可在公众号中回复“原创”加群获取。
参考资料:
[1] stackoverflow.com/questions/31464345/fitting-a-closed-curve-to-a-set-of-points.
[2] nl.mathworks.com/matlabcentral/fileexchange/69055-interpclosed.
[3] D. A. Smith,Computers in Physics 6, 472 (1992); doi: 10.1063/1.168433.
[4] 顾天奇 等,封闭离散点的曲线拟合方法 [J], 吉林大学学报(工学版), 45 (2), 2015.
如需转载,请在懂科学的程序员公众号中回复“转载”获取授权!
边栏推荐
- SENet详解及Keras复现代码
- Different lower_case_table_names settings for server (‘1‘) and data dictionary (‘0‘) 解决方案
- Jenkins pipeline 自动部署实践
- 目标检测中的IoU、GIoU、DIoU与CIoU
- 基于EEMD+GRU+MLR的时间序列预测
- Gramm Angle field GAF time-series data into the image and applied to the fault diagnosis
- sql常用函数
- 如何在Excel 里倒序排列表格数据 || csv表格倒序排列数据
- Operating System Random
- 自适应迁移学习核极限学习机用于预测
猜你喜欢

自适应迁移学习核极限学习机用于预测

网络技巧:教你给路由器装上电池,断电照样可以上网!

Hardware Knowledge: Introduction to RTMP and RTSP Traditional Streaming Protocols

基于EEMD+GRU+MLR的时间序列预测

A semi-supervised Laplace skyhawk optimization depth nuclear extreme learning machine for classification

Microsoft computer butler 2.0 beta experience

在线公众号文章内容转音频文件实用小工具

sql常用函数

DenseNet详解及Keras复现代码

用手机也能轻松玩转MATLAB编程
随机推荐
目标检测中的IoU、GIoU、DIoU与CIoU
Nacos 原理
狗都能看懂的Self-Attention讲解
matlab的2DCNN、1DCNN、BP、SVM故障诊断与结果可视化
复杂格式的json转递
sql常用函数
POI及EasyExcel
Online public account article content to audio file practical gadget
Interpretation of EfficientNet: Composite scaling method of neural network (based on tf-Kersa reproduction code)
CMDB 阿里云部分实现
Scheduler (Long-term,Short-term, Medium-term Scheduler) & Dispatcher
DOM的12中节点类型,通过关系或方法获取DOM节点,渲染到浏览器页面的一些特效功能,获取DOM节点来改变属性,点击图片,切换为所点击的图片为背景图,页面上的表单验证,点击底部导航栏切换界面
益智小游戏- 算算总共多少正方形
树莓派 4 B 拨动开关控制风扇 Rasberry Pi 4 B Add Toggle Switch for the Fan
数组的一些方法
目标检测中的先验框(Anchor)
Hardware Knowledge: Introduction to RTMP and RTSP Traditional Streaming Protocols
Microsoft Store 微软应用商店无法连接网络,错误代码:0x80131500
What is the connection between GRNN, RBF, PNN, KELM?
Prematurely reached end of stream