【发布时间】:2016-02-04 07:24:21
【问题描述】:
我有 1D Wavelets 和 2D Waveletsdecompositions 的 MATLAB 代码。如何使用 1D 和 2D 小波创建3D Wavelets?
我不想使用 MATLAB 的内置函数wavedec3。
【问题讨论】:
标签: 3d decomposition wavelet-transform
我有 1D Wavelets 和 2D Waveletsdecompositions 的 MATLAB 代码。如何使用 1D 和 2D 小波创建3D Wavelets?
我不想使用 MATLAB 的内置函数wavedec3。
【问题讨论】:
标签: 3d decomposition wavelet-transform
小波变换可以表示为separable filters。 利用一维和二维小波变换的可分离性,可以直接组合一维和二维小波变换。
具体来说: 假设您有一个 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 小波变换编写的, 即它应该允许直接重用您的内核而无需修改代码。 备注:我假设您的内核实现了全小波变换,而不仅仅是一步变换。
如果您不喜欢转置,这很公平 :-),您应该修改一维变换以允许数据的非单位步长访问沿 z 方向跳转。
如果您需要应用 2D 内核在 XZ 或 YZ 方向上操作,可以推导出类似的算法。
最后一点:由于小波变换转换为可分离滤波器,理论上您可以沿不同方向组合不同的小波。
【讨论】: