ZERNFUN。m和ZERNFUN2。m计算泽尼克函数Znm(r,)这些函数在单位圆上形成一个正交的基础,用于天文学、光学、验光学和眼科等学科,在一个圆形的域上表征函数和数据。ZERNPOL。m计算泽尼克多项式Znm(r),这是泽尼克函数的径向部分。
描述使用用于分析光学数据的Zernike函数的MATLAB摘要文章也可在文件交换中作为PDF的应用程序(使用LASIK手术数据)
在HTML处:
保罗弗里克(2021年)。泽尼克多项式(//www.tatmou.com/matlabcentral/fileexchange/7687-zernike-polynomials),Matlab中央文件交换。检索到。
灵感来自:Showregions.M.那Quadcc.
启发:Zernike分解那使用MATLAB中的矩阵反转的给定波前的Zernike多项式系数那Zernike3.那泽尼克径向多项式的快速计算那Zernfun2a.m那Showregions.M.那Quadcc.那iahncajigas / nSTAT
你好,
上述技术文章(//www.tatmou.com/company/newsletters/articles/Analyzing-lasik-optical-data-using-zernike-functions.html.)已更新正确的数字和表格。
谢谢。
你好Chan-Wook,
你的担心是有道理的。问题似乎在已出版的通讯(//www.tatmou.com/company/newsletters/articles/Analyzing-lasik-optical-data-using-zernike-functions.html.),而不是用代码。
1.通讯中表2中的值被替换为正值和负值“m”,没有被规格化。
2.图3的模态号也被交换了,与作者正在讨论的示例并不完全对应。
谢谢你支持这个例子,但我发现金宝app了以下几个问题:
(1)“表2.第一个十个Zernike径向函数及其共同名称。”在LASIK示例的HTML链接中,与维基百科相比,z的编号不正确(https://en.wikipedia.org/wiki/Zernike_polynomials)。
(2)图3”。图2所示的术前眼部数据的泽尼克系数谱“在捕捉图像精确复制时,模式数的顺序看起来是错误的。
我已经问了这些东西,我收到了参考编号:(案例:#03909269)[ref:_00di0ha1u._5003q1i7j50:ref]我正在等待你的回复。
请再次检查这些并发布一个新的黄色。
嗨,我也想知道哪里可以找到eyedata --joseph
嗨,保罗,
我想在角膜地形仪上做一个重建。在“用泽尼克函数分析LASIK光学数据”中使用的“眼数据”是来自地形学家本身的图像吗?
如果没有,那是什么,我可以在哪里找到它?
提前致谢!
亲爱的弗里克博士,
我真的很喜欢阅读您的文件“分析LASIK光学数据使用Zernike函数”。了不起的工作!
我试图了解您的EyeData矩阵应该是如何以及如何绘制它的格式。你可能在这里使用比images的困难者?
眼数据只有一个m x n图像吗?我确实将Topo从您的榜样保存为JPEG,并裁剪轴以尝试复制您的示例,但我遇到了问题。在某处可用的原始数据和代码是否可用?谢谢!
在哪里可以在哪里找到“使用Zernike函数分析LASIK光学数据”的EyeDATA,到处都可以在线找到。帮助!
你好。我认为Zernfun的帮助有一个错字。它指出,“M的每个元素k必须是正整数,具有可能的值M(k)= -n(k)至+ n(k)”,这是一个矛盾。即使在该示例中之后,也使用负值。在检查代码后,我已到达的结论只是粘糊糊的帮助。我对吗?
另一方面,对ZERNPOL函数的帮助确实使用M(k)的严格正值。也许这就是问题的根源。
记录好!
你好,
感谢您为社区提供这些文件!
但是,你检查过所创建的函数的正交性吗?
在我看来,那里有些不对劲。
我生成了2个polynoms,就像在文档中显示的那样:
z (idx) = zernfun (3 1 r (idx),θ(idx));
z2(idx)= zernfun(4,0,r(id(id x),theta(idx));
当我检查正交性时,只需这样做:
总和(sum(z(id x)。* z2(idx)))
结果不是0。
我在做什么错误或在这里有PB吗?
由于adavnce
@JUAN CARDENAS
地板n =(1 +√(1 + 8 * p)) / 2);
m = - p + n (n *。* (n + 1));
使用任何P的非常好的解决方案
我想你对m的定义缺少一个“-”符号(可以在画泽尼克多项式时看到)。
谢谢保罗。
在zernfun2中对启用任何P order的更新,而不是:
n =装天花板(3 +√(9 + 8 * p)) / 2);
m = 2 * p - n。*(n + 2);
改变它:
地板n =(1 +√(1 + 8 * p)) / 2);
m = n-2 * p + n。*(n + 1);
你好,
有人知道离散泽尼克变换(DZT)吗?
我很想实现它。
先感谢您
谢谢你的代码!我对由此代码生成的Zernike多项式的单位有一个问题,它是否在[波浪数]或[微米]中?
再次感谢!
在另一个程序中使用我的拟合术语时,我遇到了问题:相同的系数没有给出相同的表面。
我找到了原因:余弦和正弦项在zernfun中是反向的。M>0应该是cos,而M<0应该是sin。
我已经更正了,从第193行开始
如果任何(idx_pos)
z(:,idx_pos)= y(:,idx_pos)。* cos(theta * m(idx_pos)');
结尾
如果任何(idx_neg)
z(:,idx_neg)= y(:,idx_neg)。* sin(theta * -m(idx_neg)');
结尾
%注意正弦术语中所需的标志更改“-m”
非常伟大的功能!但是用“规范”作为标准的做法似乎是错误的。我已经改变:
zernfun.m
对于规格化多项式,第177行:
(:, j) = y: j *√((1 + (m (j) ~ = 0)) * (n (j) + 1) / pi);
%我必须替换:
如果m(j)== 0
Y(:,j)= y(:,j)* sqrt((n(j)+1));
别的
(:, j) = y: j *√(2 * (n (j) + 1));
结尾
我仍然习惯于matlab。当我在没有任何修改的情况下运行zernfun.m.m.m.
???输入参数“n”未定义。
错误在==> zernfun 88
if(〜yous(size(n)== 1))||(〜任何(大小(m)== 1)))。
但是,当我初始化n,m,r和theta时,我收到此错误
???最大递归限制为500达到。使用set(0,'recursionlimit',n)
改变限制。请注意超出您可用的堆栈空间可以
崩溃Matlab和/或您的计算机。
错误==> meshgrid
有人有关于使Zernfun的工作有关吗?任何帮助将不胜感激。
保罗,非常感谢这段代码。这是非常赞赏。
但是,我认为,你有一个错误你如何使Zernike多项式正常化。NOLL的纸张表明,对于M = 0的术语来说,归一化术语应该是(n + 1)** 0.5,并且对于m!= 0表示归一化术语应该是(2 *(n + 1))** 0.5。在vercine zernpol.m中,您将通过(2 *(n + 1))** 0.5,正常化所有术语(包括m = 0)** 0.5。
也许你已经解决了这个?我刚从这个网站上1-21-10下载了它。我正在寻找的文件的创作日期是11月13日,2006年11月13日下午12:56:48。
我有兴趣提取3D形状的3D Zernike描述符吗?你是否知道是否有任何MATLAB代码?
看起来很有希望,但我有问题复制LASIK榜样......我复制了LASIK图像并编辑了LASIK部分 - 但是我从以下内容得到了一个大红色斑点 - 而不是一个体面的重建图像。..AnyBody知道什么是错的?
形象= imread(“zk_fig2_w.jpg”);
图(1);
i = im2double(图片);
显示亮度图像(图像);
%制作以极性坐标表示的网格坐标矩阵
L =大小(我,1);
X = 1:2 / (l - 1): 1;
(x, y) = meshgrid (x);
x = x(:);
y = y(:);
[θ,r] = cart2pol (x, y);
%计算n = 0-7的所需程度和订单值,包括
n = [];
M = [];
对于n = 0:7
n = [n * n *(1,n + 1)];
m = [m-n:2:n];
结尾
Is_in_circle = (r <= 1);
Z = zernfun (N M r (is_in_circle),θ(is_in_circle));
a = z \ i(is_in_circle);
使用Zernike系数重建图像
r =南(大小(I));
r(is_in_circle)= z * a;
%Rescale到0-255显示图像
图(2);
r = im2uint8(im2double(r));
imshow(r);
有价值的工作,谢谢。
非常有帮助!如果包括Zernike环形多项式,这将是完美的
为什么这个错误?谢谢!
???错误:文件:e:\ zernike \ zernpol.m线:151列:25
"标识符"预期,"("找到。
非常有帮助,快速,完整。评论中的例子也非常有帮助。
感谢你
非常感谢
谢谢
这是我过去几周一直在找的函数