这里待拟合的螺线我们选择阿基米德螺线,对数螺线类似。
螺线的笛卡尔坐标系方程为:
 
螺线从笛卡尔坐标转为极坐标方程为:
 
阿基米德螺线在极坐标系下极径r和极角theta为线性关系,方程为:
 
计算步骤如下:
1.通常我们首先得到螺线在笛卡尔坐标下的一些点x,y。
2.然后根据x,y计算出r和theta。
3.最后拟合的目标就是计算出a和b,这一步可以用最小二乘。
 
拟合结果:
下图蓝色线为原始线(这里可能看不到),红色线为拟合线,红色点为测量点。
放大看一下:
不过有时候拟合也会失败(这时候就可以祭出ransac大法了):
matlab代码如下:
clear all;
close all;
clc; %%生成阿基米德螺线
a=6.34;
b=4.23;
theta=:0.01:*pi;
r = a+b*theta; x = r.*cos(theta);
y = r.*sin(theta);
plot(x,y,'b') %%生成待拟合数据
ind = randperm(length(x),);
dat=[x(ind)' y(ind)'] + rand(,)/;
hold on;
plot(dat(:,),dat(:,),'r.'); T = atan(dat(:,)./dat(:,));
R = sqrt(dat(:,).^+dat(:,).^); %%因为T是周期为pi循环数列,因此需要根据不同圈数加pi
D=[R T];
D=sortrows(D);
E=D;
n = ;
for i=:length(D)
if D(i,)-D(i-,)< && D(i,)<
n=n+;
end
E(i,) = E(i,) + n*pi;
end X = [E(:,) ones(length(dat),)];
Y = E(:,);
C = inv(X'*X)*X'*Y; theta=:0.01:*pi;
r = C()+C()*theta;
x = r.*cos(theta);
y = r.*sin(theta);
plot(x,y,'r') %%生成对数螺线
a=1.34;
b=2.23;
theta=:0.01:*pi;
r = a*exp(b*theta/); x = r.*cos(theta);
y = r.*sin(theta);
figure;
plot(x,y) ind = randperm(length(x),);
dat=[x(ind)' y(ind)'] + rand(,)/;
hold on;
plot(dat(:,),dat(:,),'r.');

最后还生成了对数螺线,大家可以自行尝试拟合一下哈。

matlab练习程序(螺线拟合)的更多相关文章

  1. 基于MATLAB的多项式数据拟合方法研究-毕业论文

    摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式 ...

  2. MATLAB之数据处理+公式拟合

    MATLAB之数据处理+公式拟合 前言:由试验得到一组数据,对该组数据进行处理,作图分析,分析各变量的关系,期望得到拟合公式. 试验数据背景 本次试验有三个自变量:V.M.G,因变量为F,每组试验重复 ...

  3. MATLAB实例:多元函数拟合(线性与非线性)

    MATLAB实例:多元函数拟合(线性与非线性) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 更多请看:随笔分类 - MATLAB作图 之前写过一篇博 ...

  4. matlab练习程序(SUSAN检测)

    matlab练习程序(SUSAN检测) SUSAN算子既可以检测角点也可以检测边缘,不过角点似乎比不过harris,边缘似乎比不过Canny.不过思想还是有点意思的. 主要思想就是:首先做一个和原图像 ...

  5. (转)matlab练习程序(HOG方向梯度直方图)

    matlab练习程序(HOG方向梯度直方图)http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html HOG(Histogram o ...

  6. MATLAB用“fitgmdist”函数拟合高斯混合模型(一维数据)

    MATLAB用“fitgmdist”函数拟合高斯混合模型(一维数据) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 在MATLAB中“fitgmdis ...

  7. matlab练习程序(最小二乘多项式拟合)

    最近在分析一些数据,就是数据拟合的一些事情,用到了matlab的polyfit函数,效果不错. 因此想了解一下这个多项式具体是如何拟合出来的,所以就搜了相关资料. 这个文档介绍的还不错,我估计任何一本 ...

  8. matlab示例程序--Motion-Based Multiple Object Tracking--卡尔曼多目标跟踪程序--解读

    静止背景下的卡尔曼多目标跟踪 最近学习了一下多目标跟踪,看了看MathWorks的关于Motion-Based Multiple Object Tracking的Documention. 官网链接:h ...

  9. matlab练习程序(透视投影,把lena贴到billboard上)

    本练习程序是受到了这个老外博文的启发,感觉挺有意思,就尝试了一下.他用的是opencv,我这里用的是matlab. 过去写过透视投影,当时是用来做倾斜校正的,这次同样用到了透视投影,不过更有意思,是将 ...

随机推荐

  1. [转]UiPath Build Data Table

    本文转自:https://docs.uipath.com/activities/docs/build-data-table UiPath.Core.Activities.BuildDataTable ...

  2. 部署vue-element-admin流程

    1.修改环境变量: 在以下两个文件: .env_staging [如果修改这个,需要以npm run build:stage启动] .env_production [如果修改这个,需要以npm run ...

  3. 大疆无人机 Android 开发总结——视频解码

    DJI_Mobile_SDK是大疆为开发者提供的开发无人机应用的开发接口,可以实现对无人机飞行的控制,也可以利用无人机相机完成一些视觉任务.目前网上的开发教程主要集中于DJI 开发者社区,网上的资源非 ...

  4. DSP程序中的布尔类型使用

    在DSP程序中,布尔类型不能直接拿来用,要定义一下,可以通过定义为枚举类型来定义: typedef enum{FALSE=0,TRUE} BOOL; 一般枚举类型的定义是这样的:enum [枚举名] ...

  5. Oracle对时间的相关操作

    目录导航: 1. 年操作 2. 月操作 3. 周操作 4. 天操作 5. 时操作 6. 分操作 7. 秒操作 1.年操作 SELECT add_months(SYSDATE, -12) FROM du ...

  6. 千万级数据迁移工具DataX实践和geom类型扩展

    ## DataX快速入门参考 > 官方https://github.com/alibaba/DataX/blob/master/userGuid.md ## 环境要求 > Linux JD ...

  7. EEPROM的概念接口类型及软件实例

    基本概念 EEPROM的全称是“电可擦除可编程只读存储器”,即Electrically Erasable Programmable Read-Only Memory.是相对于紫外擦除的rom来讲的.但 ...

  8. Python 从入门到进阶之路(一)

    人生苦短,我用 Python. Python 无疑是目前最火的语言之一,在这里就不再夸他的 NB 之处了,本着对计算机编程的浓厚兴趣,便开始了对 Python 的自学之路,并记录下此学习记录的心酸历程 ...

  9. Python 一键获取百度网盘提取码

    该 GIF 图来自于官网,文末有给出链接. 描述 依托于百度网盘巨大的的云存储空间,绝大数人会习惯性的将一些资料什么的存储到上面,但是有的私密链接需要提取码,但是让每个想下载私密资源的人记住每一个提取 ...

  10. halcon 算子功能查找大全中文版(可直接下载)

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11543364.html haicon算子中文查找大全百度云链接 链接:https://pan. ...