matlab在ydown出现解析错误,竟然遇到了一个MATLAB也解决不了的问题

最近在做一个闭合曲线拟合的问题,手头有一些二维离散点的数据,大概长这样:

250bc63e1e3ca2de628117cab1810040.png

我想要把这样不完全闭合的曲线给补齐成闭合的曲线,脑补一下:

2623499b52d021e444c6a7405cce9668.png

研究了半天,发现MATLAB的拟合工具箱虽然强大,但是只能拟合常规的函数曲线。无奈,只能转向求助于python。

首先第一步,发挥下MATLAB的余热,把离散点的x和y坐标保存至mat文件:

pts = [x y];

save('pts.mat', 'pts')

下一步,打开Anaconda中的spyder,输入下列代码:

import osimport scipy.io as sioimport numpy as npfrom scipy.interpolate import splprep, splev

filePath = r"yourPath"dirs = os.listdir(filePath)

nPoint = 1000pts = sio.loadmat(filePath \      + '\\pts.mat')['pts']

tck, u = splprep(pts.T, \      u=None, s=5, per=1, k = 3)

u_new = np.linspace( \      u.min(), u.max(), nPoint)

x_new, y_new = splev( \      u_new, tck, der=0)

pts_repaired = np.transpose( \      np.vstack((x_new, y_new)))

sio.savemat(filePath + \      '\\pts_repaired.mat', \      {'pts_repaired': pts_repaired})最后再把python生成的mat文件用MATLAB读取并画个图看看效果:

c7656765baaddb617c33ffee5128f237.png

load('pts_repaired.mat')figure

hold on

plot(pts_repaired(:,1), ...

pts_repaired(:,2), ...    'lineWidth', 2, ...    'color', 'b')

plot(pts(:,1), pts(:,2), ...    'lineStyle', 'none', ...    'color', 'r', ...    'marker', '+')

box on

目前为止我没有找到MATLAB拟合闭合曲线的方法,直角坐标系转极坐标的方法我试了貌似不行,如果有大牛搞定了还麻烦不吝赐教;

Python的SciPy库中样条函数插值是支持闭合曲线的,但是所输入的x和y离散点坐标序列必须连续,也就是逐个相连可以画出图形的轮廓,不可以乱序。至于如何将乱序点排列成clockwise或者anti-clockwise顺序,MATLAB自带的boundary()函数了解一下。

P.S. 最近不知为毛涨了一些粉,容我窃喜一下~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值