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方向进行操作,则可以导出类似的算法
最后一句话:由于小波变换转化为可分离滤波器,理论上可以沿不同方向组合不同的小波