3d 如何使用一维和/或二维小波创建三维小波?

3d 如何使用一维和/或二维小波创建三维小波?,3d,decomposition,wavelet-transform,3d,Decomposition,Wavelet Transform,我有1D小波和2D小波分解的MATLAB代码。如何使用一维和二维小波创建3D小波? 我不想使用MATLAB的内置函数wavedec3小波变换可以表示为。 利用一维和二维小波变换的可分性,可以直接进行组合 具体而言: 假设您有一个NX NY x NZ体素的三维数据集“数据”。 伪码中可能的3D小波变换为: for iz = 0 .. NZ - 1: FWT2D(data[:, :, iz]) //apply 2D transform to the slices tmp = 0 * [NZ]

我有
1D小波
2D小波
分解的MATLAB代码。如何使用一维和二维小波创建
3D小波

我不想使用MATLAB的内置函数
wavedec3

小波变换可以表示为。 利用一维和二维小波变换的可分性,可以直接进行组合

具体而言: 假设您有一个NX NY x NZ体素的三维数据集“数据”。 伪码中可能的3D小波变换为:

for iz = 0 .. NZ - 1:
   FWT2D(data[:, :, iz]) //apply 2D transform to the slices

tmp = 0 * [NZ][NY][NX] //initialize 

//x-z transposition to have unit-stride in z
for ix = 0 .. NX - 1:
   for iz = 0 .. NZ - 1:
       tmp[iz, :, ix] = data[ix, :, iz]

for ix = 0 .. NX - 1:
   for iy = 0 .. NY - 1:
       FWT1D(tmp[:, iy, ix]) //apply 1D transform to z-streams

//transpose back
for ix = 0 .. NX - 1:
   for iz = 0 .. NZ - 1:
       data[ix, :, iz] = tmp[iz, :, ix]
建议的解决方案是围绕一维和二维小波变换编写的, i、 它应该允许在不修改代码的情况下直接重用内核。 备注:我假设您的内核实现完整的小波变换,而不仅仅是一步变换

如果您不喜欢换位,很公平:-),您应该修改1D变换,以允许数据的非单位步幅访问沿z方向跳跃

如果需要应用2D内核在XZ或YZ方向进行操作,则可以导出类似的算法

最后一句话:由于小波变换转化为可分离滤波器,理论上可以沿不同方向组合不同的小波