我有 MATLAB 代码1D Wavelets
和2D Wavelets
分解。如何3D Wavelets
使用 1D 和 2D 小波创建?我不想使用 MATLAB 的内置函数wavedec3
。
问问题
609 次
1 回答
2
小波变换可以表示为可分离的滤波器。结合 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 小波变换编写的,即它应该允许直接重用您的内核而无需修改代码。备注:我假设您的内核实现了完整的小波变换,而不仅仅是一步变换。
如果您不喜欢转置,很公平:-),您应该修改一维变换以允许数据的非单位步长访问沿 z 方向跳跃。
如果您需要应用 2D 内核在 XZ 或 YZ 方向上操作,则可以推导出类似的算法。
最后一点:由于小波变换转换为可分离滤波器,理论上您可以沿不同方向组合不同的小波。
于 2016-02-11T13:34:47.733 回答