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、1 次元のベクトルとして処理し、上位 100 個の最大 (絶対) 値以外のすべてをゼロにするだけであることに注意してください。

4

0 に答える 0