首页 > 行业资讯 > matlab封闭曲线拟合 (针对一些列离散点)

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

时间:2022-04-17 来源: 浏览:

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

原创 巴山 matlab爱好者
matlab爱好者

matlabaihaozhe

学matlab编程就关注matlab爱好者!

收录于话题
#matlab 3
#曲线拟合 1
#封闭曲线拟合 1

很久之前给大家介绍了如何用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 -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 中下载,或在matlab爱好者公众号中回复 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.

如需转载,请在公众号中回复“ 转载 ”获取授权!

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐