我有1D Wavelets
和2D Wavelets
分解的MATLAB代码。如何使用1D和2D小波创建3D Wavelets
?
我不想使用MATLAB的内置函数wavedec3
。
答案 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方向上操作,可以导出类比算法。
最后一句话:由于小波变换转换为可分离的滤波器,理论上你可以在不同的方向上组合不同的小波。