Коэффициент вейвлет-порога - PullRequest
1 голос
/ 08 июня 2011

Я проводил некоторые эксперименты с использованием вейвлетов данных изображения в 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 сотен самых больших (абсолютных) значений.

...