1

我一直在 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将前 10000 个最大(绝对)值之外的所有内容都视为一维向量,它仅将所有内容归零。

4

0 回答 0