如何使用1D和/或2D小波创建3D小波?

时间:2015-11-03 23:26:28

标签: 3d decomposition wavelet-transform

我有1D Wavelets2D Wavelets分解的MATLAB代码。如何使用1D和2D小波创建3D Wavelets? 我不想使用MATLAB的内置函数wavedec3

1 个答案:

答案 0 :(得分:2)

小波变换可以表示为separable filters。 通过利用它们的可分离性,可以直接组合1D和2D小波变换。

具体做法是: 假设您有一个NX x NY x NZ体素的3D数据集“数据”。 伪代码中可能的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]

建议的解决方案是围绕您的1D和2D小波变换编写的, 即它应该允许直接重用你的内核而不需要修改代码。 备注:我假设您的内核实现全小波变换,而不仅仅是一步变换。

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

如果需要应用2D内核在XZ或YZ方向上操作,可以导出类比算法。

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