Сигналы шумоподавления и изображения

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

  • Разложитесь: Выберите вейвлет, выберите уровень 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. Мягкий пороговый сигнал является sign(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 objects. Axes object 1 with title Original contains an object of type line. Axes object 2 with title Hard Thresholding contains an object of type line. Axes object 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: Выбор с помощью минимаксного принципа

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

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

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

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

Первый denoise сигнал с помощью 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 objects. Axes object 1 with title Original Signal contains an object of type line. Axes object 2 with title Noisy Signal contains an object of type line. Axes object 3 with title Denoised Signal - Signal to Noise Ratio = 4 contains an object of type line.

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

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 objects. Axes object 1 with title Original Signal contains an object of type line. Axes object 2 with title First Denoised Signal: Default Settings contains an object of type line. Axes object 3 with title Second Denoised Signal contains an object of type line.

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

Контакт с цветным шумом

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

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

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

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 objects. Axes object 1 with title Original Signal contains an object of type line. Axes object 2 with title Denoised Signal contains an object of type line.

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

Отобразите шумоподавление

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

Сгенерируйте шумное изображение.

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

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

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

Изображение Denoise с помощью глобальной опции пороговой обработки.

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 object. The axes object 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 object. The axes object with title Noisy Image contains an object of type image.

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

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

Сводные данные

Методы шумоподавления на основе разложения вейвлета являются одним из старших значащих приложений вейвлетов. Смотрите wdenoise и Wavelet Signal Denoiser для получения дополнительной информации.

Смотрите также

|

Похожие темы