我正在尝试将非均匀数据重新网格化到4-D空间中定义的均匀网格上。数据测量由函数d = f(xp,yp,zp,wp)
给出,其中xp
、yp
、zp
和wp
是4-D坐标。我想将非均匀间隔的xp
、yp
、zp
和wp
重新栅格到x
、y
、z
和w
的均匀间隔栅格上。
为了便于讨论,让我们将网格内核定义为可分离Hanning内核的乘积:
1/a(1+cos(2*pi*x/a))
1/b(1+cos(2*pi*y/b))
1/c(1+cos(2*pi*z/c))
1/d(1+cos(2*pi*w/d))
然后,我相信要重新网格化,我需要做的是执行4-D卷积并在均匀网格上重新采样。然而,我不确定如何使用离散数据来实现这一点。我的问题如下:
1) 我应该如何对每个网格内核进行采样?例如,在计算离散卷积值时,我应该使用非均匀的xp
、yp
、zp
和wp
值吗?还是应该使用均匀间隔的值x
、y
、z
和w
?或者这两种观点都不正确?
2) 那么我该如何实现4-D卷积呢?我想我可能需要使用四个for
循环,但不确定如何组织我的数据,即4-D数据结构或简单的4列矩阵?
我对最快的方法不感兴趣,但更感兴趣的是找到最直观或直接的方法。
我相信我了解sinc插值和网格算法的基本知识。我读过多篇论文,包括J.D.O'Sullivan和J.I.Jackson的经典著作,讨论了不同网格核的性质和差异。我也读过一些MRI重建的论文,这些论文使用了网格,但大多数方法都假设是二维网格。
我不知道如何以离散的方式实际实现该方法,最好是在Matlab或C++中,甚至更困惑于如何在四维中实现这样的东西。
我研究了几个线程,我的问题与这些线程有点相似,但我想使用通用内核的卷积,而不是线性插值,这两个线程都没有真正建议如何组织4-D数据或执行卷积:
矩形网格上的Python 4D线性插值
矩形网格上的Python 4D线性插值
感谢您的任何建议、见解或建议!
你能使用interpn函数吗?
[X Y Z W]=ndgrid(x,y,z,w); % unequally spaced
[XR YR ZR WR]=ndgrid(x_regular,y_regular,z_regular,w_regular); % equally spaced
volume=interpn(X,Y,Z,W,d,XR,YR,ZR,WR);
interpn
和ndgrid
的文档提供了更多详细信息;它们的使用将为您提供一个如何构建CCD_ 25的框架。
编辑:哦,对不起,对不起,我看到你的评论后,不想使用插值。
好吧,你可以使用上面的插值将你的值线性地定位到网格上,然后使用
volume=convn(volume,general_kernel);
将值与内核进行卷积?