exponenta event banner

Деноизирующие сигналы и изображения

В этом примере рассматривается проблема восстановления сигнала из шумных данных. Общая процедура обезвреживания включает три этапа. Базовая версия процедуры выполняется следующим образом:

  • Разложение: выберите вейвлет, выберите уровень N. Вычислите вейвлет-разложение сигнала на уровне N.

  • Пороговые коэффициенты детализации: для каждого уровня от 1 до N выберите порог и примените мягкое пороговое значение к коэффициентам детализации.

  • Реконструкция: Вычислить вейвлет-реконструкцию с использованием исходных коэффициентов аппроксимации уровня N и модифицированных коэффициентов детализации уровней от 1 до N.

В частности, необходимо рассмотреть два вопроса:

  • как выбрать порог,

  • и как выполнить пороговое значение.

Мягкое или жесткое пороговое значение?

Пороговое значение может быть выполнено с помощью функции wthresh который возвращает мягкое или жесткое пороговое значение входного сигнала. Жесткое пороговое значение является самым простым методом, но мягкое пороговое значение имеет хорошие математические свойства. Давайте thr обозначают пороговое значение.

thr = 0.4;

Жесткое пороговое значение может быть описано как обычный процесс установки в нуль элементов, абсолютные значения которых ниже порогового значения. Жесткий пороговый сигнал x, если x > thr, и равно 0, если x thr.

y = linspace(-1,1,100); 
ythard = wthresh(y,'h',thr);

Мягкое пороговое значение является расширением жесткого порогового значения, сначала устанавливая нулевое значение для элементов, абсолютные значения которых ниже порогового значения, а затем уменьшая ненулевые коэффициенты до 0. Мягким пороговым сигналом является знак (x) (x-thr), если x > thr и равен 0, если x thr.

ytsoft = wthresh(y,'s',thr);
subplot(1,3,1)
plot(y)
title('Original')
subplot(1,3,2)
plot(ythard)
title('Hard Thresholding')
subplot(1,3,3)
plot(ytsoft)
title('Soft Thresholding')

Figure contains 3 axes. Axes 1 with title Original contains an object of type line. Axes 2 with title Hard Thresholding contains an object of type line. Axes 3 with title Soft Thresholding contains an object of type line.

Как можно видеть на рисунке выше, жесткая процедура создает разрывы при x = ± t, в то время как мягкая процедура не создает.

Правила выбора пороговых значений

Вызов шага 2 процедуры denoise, функции thselect выполняет выбор порога, а затем каждый уровень устанавливается пороговым значением. Этот второй шаг можно выполнить с помощью wthcoeff, непосредственно обрабатывая структуру вейвлет-разложения исходного сигнала. В функции реализованы четыре правила выбора пороговых значений thselect. Обычно интересно показывать их в действии, когда входной сигнал является гауссовым белым шумом.

rng default
y = randn(1,1000);

Правило 1: Выбор с использованием принципа объективной оценки риска Штайна (SURE)

thr = thselect(y,'rigrsure')
thr = 2.0518

Правило 2: Порог фиксированной формы равен sqrt (2 * log (длина (y)))

thr = thselect(y,'sqtwolog')
thr = 3.7169

Правило 3: Выбор с использованием смеси первых двух вариантов

thr = thselect(y,'heursure')
thr = 3.7169

Правило 4: Выбор с использованием принципа minimax

thr = thselect(y,'minimaxi')
thr = 2.2163

Правила выбора порога Minimax и SURE являются более консервативными и были бы более удобными, когда мелкие детали сигнала лежат вблизи диапазона шума. Два других правила устраняют шум более эффективно.

Давайте используем в качестве первого примера «блочные» тестовые данные, приписанные Донохо и Джонстоуну. Создайте исходную ссылку на сигнал и шумную версию x, добавив стандартный гауссовский белый шум.

sqrt_snr = 4;      % Set signal to noise ratio
init = 2055615866; % Set rand seed
[xref,x] = wnoise(1,11,sqrt_snr,init);

Сначала отключите сигнал с помощью wdenoise с настройками по умолчанию. Сравните результат с исходными и шумными сигналами.

xd = wdenoise(x);
subplot(3,1,1)
plot(xref)
axis tight
title('Original Signal')
subplot(3,1,2)
plot(x)
axis tight
title('Noisy Signal')
subplot(3,1,3)
plot(xd)
axis tight
title('Denoised Signal - Signal to Noise Ratio = 4')

Figure contains 3 axes. Axes 1 with title Original Signal contains an object of type line. Axes 2 with title Noisy Signal contains an object of type line. Axes 3 with title Denoised Signal - Signal to Noise Ratio = 4 contains an object of type line.

Денуазировать шумный сигнал второй раз, на этот раз с использованием мягкого эвристического порогового значения SURE для коэффициентов детализации, полученных из разложения x, на уровне 3 на sym8 вейвлет. Сравните с предыдущим преобразованным сигналом.

xd2 = wdenoise(x,3,'Wavelet','sym8',...
    'DenoisingMethod','SURE',...
    'ThresholdRule','Soft');
figure
subplot(3,1,1)
plot(xref)
axis tight
title('Original Signal')
subplot(3,1,2)
plot(xd)
axis tight
title('First Denoised Signal: Default Settings')
subplot(3,1,3)
plot(xd2)
axis tight
title('Second Denoised Signal')

Figure contains 3 axes. Axes 1 with title Original Signal contains an object of type line. Axes 2 with title First Denoised Signal: Default Settings contains an object of type line. Axes 3 with title Second Denoised Signal contains an object of type line.

Поскольку только небольшое количество больших коэффициентов характеризует исходный сигнал, оба деноизированных сигнала хорошо сравниваются с исходным сигналом. Можно использовать Vavelet Signal Denoiser для изучения влияния других деноизирующих параметров на шумный сигнал.

Работа с небелым шумом

При подозрении на небелый шум пороговые значения должны быть масштабированы посредством оценки уровня шума. В качестве второго примера рассмотрим метод на сильно возмущенной части электрического сигнала. Давайте использовать db3 вейвлет и разложение на уровне 3. Для решения проблемы составного шума попробуем оценить размер шума, зависящий от уровня.

load leleccum
indx = 2000:3450; 
x = leleccum(indx); % Load electrical signal and select part of it.

Денуазировать сигнал с использованием мягкого порогового значения фиксированной формы и оценки размера шума, зависящего от уровня.

xd = wdenoise(x,3,'Wavelet','db3',...
    'DenoisingMethod','UniversalThreshold',...
    'ThresholdRule','Soft',...
    'NoiseEstimate','LevelDependent');
Nx = length(x);
figure
subplot(2,1,1)
plot(indx,x)
axis tight
title('Original Signal')
subplot(2,1,2)
plot(indx,xd)
axis tight
title('Denoised Signal')

Figure contains 2 axes. Axes 1 with title Original Signal contains an object of type line. Axes 2 with title Denoised Signal contains an object of type line.

Результат довольно хороший, несмотря на временную неоднородность характера шума после и до начала отказа датчика в течение времени 2410.

Обличение изображения

Способ деноизирования, описанный для одномерного случая, применяется также к изображениям и хорошо применяется к геометрическим изображениям. Двухмерная процедура деноизирования имеет те же три шага и использует двумерные вейвлет-инструменты вместо одномерных. Для выбора порога вместо длины (y) используется параметр (size (y)), если используется фиксированный порог формы.

Создание шумного изображения.

load  woman 
init = 2055615866;
rng(init); 
x = X + 15*randn(size(X));

При этом используют порог фиксированной формы с оценкой уровня шума, режим пороговой обработки мягкий и сохраняют коэффициенты аппроксимации.

[thr,sorh,keepapp] = ddencmp('den','wv',x);
thr
thr = 107.9838

Осквернение изображения с помощью опции глобального порогового значения.

xd = wdencmp('gbl',x,'sym4',2,thr,sorh,keepapp);
figure('Color','white')
colormap(pink(255))
sm = size(map,1);
image(wcodemat(X,sm))
title('Original Image')

Figure contains an axes. The axes with title Original Image contains an object of type image.

figure('Color','white')
colormap(pink(255))
image(wcodemat(x,sm))
title('Noisy Image')

Figure contains an axes. The axes with title Noisy Image contains an object of type image.

image(wcodemat(xd,sm))
title('Denoised Image')

Figure contains an axes. The axes with title Denoised Image contains an object of type image.

Резюме

Методы деноизирования, основанные на вейвлет-разложении, являются одним из наиболее значимых применений вейвлетов. Посмотрите wdenoise и Vavelet Signal Denoiser для получения дополнительной информации.

См. также

|

Связанные темы