很久之前给大家介绍了如何用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'),咱对该代码进行升级修改,增加了cscvnmakima两种方法(升级后的代码将分享至原创代码与科研论文交流群中供公众号铁杆粉丝下载使用)。以下是使用interpclosed的应用案例,拟合所用到的数据来源于stackoverflow

先上效果图

相关代码

% 数据来源:https://stackoverflow.com/questions/31464345/fitting-a-closed-curve-to-a-set-of-points
% interpclosed函数:nl.mathworks.com/matlabcentral/fileexchange/69055-interpclosedclc;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.

如需转载,请在懂科学的程序员​​​​​​​公众号中回复“转载”获取授权!

matlab封闭曲线拟合 (针对一些列离散点)相关推荐

  1. Matlab的曲线拟合工具箱CFtool的使用

    今天帮同学做了一个非线性函数的曲线拟合,以前没做过,所以是摸着石头过河.费了一下午时间,终于把曲线拟合出来了,顺道也学习了使用Matlab进行曲线拟合的方法,把学习所得记录下来,和大家共享. 一.   ...

  2. matlab 非线性曲线拟合

    % matlab 非线性曲线拟合, nlinfit & lsqcurvefit & lsqnonlin: %x0 初始向量 %p 表达式参数变量 xdata = [0.25 0.5 0 ...

  3. matlab里插入行和列

    matlab里插入行和列 >> A=magic(4) A =     16     2     3    13      5    11    10     8      9     7 ...

  4. matlab 画非线性曲线,matlab 非线性曲线拟合, nlinfit  lsqcurvefit  lsqnonlin

    % matlab 非线性曲线拟合,polyfit & nlinfit & lsqcurvefit & lsqnonlin: %x0 初始向量 %p 表达式参数变量 xdata ...

  5. matlab数据变成一列数据,matlab读取excel表格列数据-matlab导入excel后,怎么把数据提取成一列?...

    怎么用matlab读取excel表格中的一列十六进制数据? x=xlsread('oillack.xls','sheet1','a1:a73') excel文件名是oillack.xls,sheet1 ...

  6. matlab输出多个参数到表格固定列,matlab将excle的列提取出来?如何使用Matlab提取Excel中指定列的数据?...

    MATLAB 在txt文件中怎么提取数据,并将那三列数据转化为EXCLE格式? 在matlab中 file import data number of text header lines 改成6 下一 ...

  7. matlab:曲线拟合

    matlab:曲线拟合 曲线拟合具体步骤如下 导入数据 选择拟合函数 拟合曲线 绘制曲线 分析结果 Matlab曲线拟合是指利用Matlab软件进行数据拟合,即根据给定的数据点,通过选择合适的拟合函数 ...

  8. 用matlab进行曲线拟合

    曲线拟合 曲线拟合概述 曲线拟合的步骤 用matlab进行曲线拟合 曲线拟合概述 在实际工程应用和科学实践中,经常需要寻求两个(或多个)变量间的关系,而实际上却只能通过观测得到一些离散的数据点,针对这 ...

  9. MATLAB的曲线拟合

    MATLAB软件提供了基本的曲线拟合函数的命令. 曲线拟合就是计算出两组数据之间的一种函数关系,由此可描绘其变化曲线及估计非采集数据对应的变量信息. 1.线性拟合函数:regress() 调用格式:  ...

  10. MATLAB中曲线拟合方法总结(包括对数正态分布函数)

    鉴于最近遇到非线性函数拟合问题,本人对网上有关matlab多种类型的线性.非线性曲线拟合的方法进行了总结,希望对各位朋友有所帮助. 1. Matlab有一个功能强大的曲线拟合工具箱 cftool ,使 ...

最新文章

  1. .NET Core容器化@Docker
  2. 论文浅尝 | KG Embedding with Iterative Guidance from Soft Rules
  3. 面试鹅厂,我三面被虐的体无完肤……
  4. 案例 员工信息维护系统 c# 1613925570
  5. 计算机图形学----投影矩阵
  6. python基础篇--变量和简单的数据类型(中)
  7. 怎么查看SAP用户化指南(SPRO --> SAP参考IMG)里各个功能的事务代码
  8. 计算机微信开发中期检查表,毕业论文(设计)-中期检查报告(范文)61页
  9. 2020年苏大计算机考研872真题及解析
  10. MRI脑影像分析从哲学到技术:一文搞懂VBM预处理基本原理(全网最详细解析)
  11. 安装docker环境报错:Could not resolve host
  12. 冬虫夏草之技术路线图之二【“术”——业务篇】
  13. 计算机英语单词怎么巧背,怎么快速背记英语单词
  14. Oracle表空间增加方法
  15. ubuntu20.04 跳过grub
  16. 使用DoraCloud在Proxmox虚拟化平台搭建桌面云
  17. Java 复习之多线程
  18. 问题:如果我们有面值为1元、3元和5元的硬币若干枚,如何用最少的硬币凑够11元?.md
  19. 华为HG8245光纤终端及开路由
  20. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java大学生日常行为评分管理系统9gl38(1)

热门文章

  1. 教师信息管理系统——c语言(附N-S图)
  2. 网易电子邮箱的文档功能是什么?
  3. python blp模型 估计_python实践——时间序列分析建模理论及代码实现
  4. 软件无线电波测试软件,SDR软件无线电的测量
  5. 测试无线电频率的软件叫什么,软件无线电到底是什么
  6. 软件测试基础知识+面试
  7. Vue uniapp省份城市列表选择、省市选择
  8. oppo升级android,OPPO Real R807升级Android4.0教程
  9. 在线web魔方和在线AI象棋
  10. 安卓dj专业打碟机软件_Mac平台上的专业DJ打碟软件