【问题标题】:How to create 3D Wavelets using 1D and/or 2D Wavelets?如何使用 1D 和/或 2D 小波创建 3D 小波?
【发布时间】:2016-02-04 07:24:21
【问题描述】:

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

【问题讨论】:

    标签: 3d decomposition wavelet-transform


    【解决方案1】:

    小波变换可以表示为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 方向上操作,可以推导出类似的算法。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-18
      • 2019-08-22
      • 1970-01-01
      • 2016-02-18
      • 2016-05-25
      • 1970-01-01
      • 2019-07-04
      相关资源
      最近更新 更多