我一直在使用Mathematica和Matlab中的图像数据进行一些小波实验 . 我已经在Mathematica中找到了一些代码,看起来基本上做了我想要的,如下所示:

dwd = DiscreteWaveletTransform[imagedata, HaarWavelet[]];
thr = WaveletThreshold[dwd, {"LargestCoefficients", 100}, Automatic];
out = InverseWaveletTransform[thr];

以上仅通过保持100个最大系数来执行小波阈值处理 . 然而,我更喜欢Matlab代码做同样的事情(或多或少相同的事情) .

我一直在尝试使用Wavelet工具箱,但到目前为止还没有取得多大成功 . 我似乎到目前为止最接近的是使用 wavedec2 . 我一直在修补这样的东西:

[c,s] = wavedec2(imagedata, level, 'haar');
c1 = threshold(c, 100)  % a function that zeros everything but the 100 biggest coefficients in c.
out = waverec2(c1, s, 'haar');

结果有点类似,但似乎这不是正确的方法 . 我想让我困惑的是这里的不同类型的系数(细节和近似),我不知道在哪里(以及如何)进行阈值处理是合适的 .

我应该指出小波对我来说是一个非常新的东西,因此任何指导都会非常感激 .

编辑:应该注意的是,上面的代码片段中的 threshold(c,100) 只会将 c 视为单维向量而只是将除了前100个最大(绝对)值之外的所有内容都归零 .