首页 > 编程语言 >matlab练习程序(泽尼克多项式拟合)

matlab练习程序(泽尼克多项式拟合)

时间:2023-02-18 21:11:45浏览次数:56  
标签:case img 多项式 sqrt re fai matlab 拟合 尼克

泽尼克多项式是一个正交多项式,分为奇偶两类。

奇多项式:

偶多项式:

其中:

这里fai为方位角,范围[0-2pi];p为径向距离,范围[0,1];n-m大于等于0;

如果n-m=0,则R=0。

根据不同的m和n值,可以得到不同的多项式,用j表示不同的多项式,通常称为Noll序列:

n,m 0,0 1,1 1,−1 2,0 2,−2
j 1 2 3 4 5
n,m 2,2 3,−1 3,1 3,−3 3,3
j 6 7 8 9 10
n,m 4,0 4,2 4,−2 4,4 4,−4
j 11 12 13 14 15
n,m 5,1 5,−1 5,3 5,−3 5,5
j 16 17 18 19 20

Noll序列前15项泽尼克多项式为:

1 1 Piston
2 {\displaystyle 2\rho \cos \theta } Tip (lateral position) (X-Tilt)
3 {\displaystyle 2\rho \sin \theta } Tilt (lateral position) (Y-Tilt)
4 {\displaystyle {\sqrt {3}}(2\rho ^{2}-1)} Defocus (longitudinal position)
5 {\displaystyle {\sqrt {6}}\rho ^{2}\sin 2\theta } Astigmatism
6 {\displaystyle {\sqrt {6}}\rho ^{2}\cos 2\theta } Astigmatism
7 {\displaystyle {\sqrt {8}}(3\rho ^{3}-2\rho )\sin \theta } Coma
8 {\displaystyle {\sqrt {8}}(3\rho ^{3}-2\rho )\cos \theta } Coma
9 {\displaystyle {\sqrt {8}}\rho ^{3}\sin 3\theta } Trefoil
10 {\displaystyle {\sqrt {8}}\rho ^{3}\cos 3\theta } Trefoil
11 {\displaystyle {\sqrt {5}}(6\rho ^{4}-6\rho ^{2}+1)} Third-order spherical
12 {\displaystyle {\sqrt {10}}(4\rho ^{4}-3\rho ^{2})\cos 2\theta }
13 {\displaystyle {\sqrt {10}}(4\rho ^{4}-3\rho ^{2})\sin 2\theta }
14 {\displaystyle {\sqrt {10}}\rho ^{4}\cos 4\theta }
15 {\displaystyle {\sqrt {10}}\rho ^{4}\sin 4\theta }

下面用15阶泽尼克多项式拟合了一个高斯函数。

matlab代码如下:

clear all;close all;clc;

[x,y]=meshgrid(-100:100);
sigma=50;
target_img = 10000*(1/(2*pi*sigma^2))*exp(-(x.^2+y.^2)/(2*sigma^2));

B = target_img(:);
srcA = zeros(length(B),15);
for i=1:15
    [x,y] = meshgrid(-1:0.01:1);
    p = sqrt(x.^2+y.^2);
    theta = atan2(y,x);
    
    img = zernike_polynomials(i,p,theta);
    img(p>1) = nan;
    subplot(3,5,i);
    imagesc(img);
    srcA(:,i) = img(:);
    ax=gca;
    ax.XAxis.Visible='off';
    ax.YAxis.Visible='off';
end
A = srcA;

B(isnan(srcA(:,1))) = [];
A(isnan(srcA(:,1)),:) = [];

x = inv(A'*A)*A'*B;

fit_img = zeros(size(target_img));
for i=1:15
    fit_img = fit_img + x(i)*reshape(srcA(:,i),size(target_img));
end
figure;
mesh(target_img);
hold on;
surf(fit_img);

function re = zernike_polynomials(n,p,fai)
switch n
    case 1
        re = ones(size(p));
    case 2
        re = 2*p.*sin(fai);
    case 3
        re = 2*p.*cos(fai);
    case 4
        re = sqrt(6)*p.^2.*sin(2*fai);
    case 5
        re = sqrt(3)*(2*p.^2-1);
    case 6
        re = sqrt(6)*p.^2.*cos(2*fai);
    case 7
        re = sqrt(8)*p.^3.*sin(3*fai);
    case 8
        re = sqrt(8)*(3*p.^3-2*p).*sin(fai);
    case 9
        re = sqrt(8)*(3*p.^3-2*p).*cos(fai);
    case 10
        re = sqrt(8)*p.^3.*cos(3*fai);
    case 11
        re = sqrt(10)*p.^4.*sin(4*fai);
    case 12
        re = sqrt(10)*(4*p.^4-3*p.^2).*sin(2*fai);
    case 13
        re = sqrt(5)*(6*p.^4-6*p.^2+1);
    case 14
        re = sqrt(10)*(4*p.^4-3*p.^2).*cos(2*fai);
    case 15
        re = sqrt(10)*p.^4.*cos(4*fai);
end
end

结果如下:

泽尼克图像:

拟合结果对比,浅色曲面为原高斯曲面,深色为拟合曲面:

参考了维基百科

标签:case,img,多项式,sqrt,re,fai,matlab,拟合,尼克
From: https://www.cnblogs.com/tiandsp/p/17133244.html

相关文章

  • Ubuntu环境下安装MATLAB
    在Linux下安装MATLAB,当以root权限安装时,可能会出现运行安装文件但无响应的情况,则按以下步骤安装即可解决此问题:键入命令xhost+SI:localuser:root进入安装文件夹......
  • 基于扩展卡尔曼滤波的自适应智能无人车辆行驶matlab仿真,输出三维动态行驶动画
    1.算法描述        EKF扩展卡尔曼滤波要解决的是卡尔曼滤波不适用于非线性模型的问题。其和卡尔曼滤波算法结构相同,只是将非线性模型线性化,然后再应用卡尔曼滤波......
  • 基于蚁群算法的二维路径规划matlab仿真
    1.算法描述蚁群算法是一种用来寻找优化路径的概率型算法。它由MarcoDorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。这种算法具有......
  • 基于平均不同分辨率的共振峰跟踪算法matlab仿真
    1.算法描述共振峰轨迹的自动跟踪算法,其特点是不借助于其它的信息来源,仅仅是基于语谱图信息,来确定语谱图上前四个共振峰频率的位置和它们关于时间轴的轨迹.算法由三个层......
  • 基于平均不同分辨率的共振峰跟踪算法matlab仿真
    1.算法描述       共振峰轨迹的自动跟踪算法,其特点是不借助于其它的信息来源,仅仅是基于语谱图信息,来确定语谱图上前四个共振峰频率的位置和它们关于时间轴的轨......
  • 【MATLAB】绘图
    1绘图命令Matlab提供了一些绘图选项,用于确定所绘曲线的线型、颜色和数据点标记符号。这些选项如表所示:线型颜色标记符号- 实线b蓝色.  点s方块: 虚线g绿色o圆圈......
  • 用COPULA模型进行蒙特卡洛(MONTE CARLO)模拟和拟合股票收益数据分析|附代码数据
    全文下载链接:http://tecdat.cn/?p=24535最近我们被客户要求撰写关于COPULA的研究报告,包括一些图形和统计输出。最近,copula在仿真模型中变得流行起来。Copulas是描述变......
  • MATLAB 一些常用的处理数据函数
    记录一些简单的功能方便及时调出来看,并附上一些参考链接,这样就不用总是重复查了......多学一个就多补充一个。统计数组中指定元素数量参考链接:https://www.ilovematl......
  • Dijkstra的matlab实现
    任务描述:生成20x20个点,使用Dijkstra算法让找出点(1,1)到(20,20)的最短路径,期中有随机的120个点是不通的,这120个点不包括起点和终点随机五次的实验结果图,代码在后面1.F......
  • 基于免疫算法的认知无线电资源分配优化算法的matlab仿真
    1.算法描述       认知无线电(CR)的概念来自JosephMitolo博士1999年的开创性工作。它自适应地调整内部通信机制,通过学习,了解等实时变化特定的无线电操作参数(功率,载......