Шумоподавление вейвлета

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

Denoise сигнал

Чтобы проиллюстрировать шумоподавление вейвлета, создайте шумный сигнал "ударов". В этом случае у вас есть и исходный сигнал и шумная версия.

rng default;
[X,XN] = wnoise('bumps',10,sqrt(6));
subplot(211)
plot(X); title('Original Signal');
AX = gca;
AX.YLim = [0 12];
subplot(212)
plot(XN); title('Noisy Signal');
AX = gca;
AX.YLim = [0 12];

Figure contains 2 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.

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

xd = wdenoise(XN,4);
figure;
plot(X,'r')
hold on;
plot(xd)
legend('Original Signal','Denoised Signal','Location','NorthEastOutside')
axis tight;
hold off;

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original Signal, Denoised Signal.

Вы можете также denoise, сигнал с помощью неподкошенного вейвлета преобразовывают. Denoise сигнал снова вниз к уровню 4 с помощью неподкошенного вейвлета преобразовывают. Постройте результат наряду с исходным сигналом.

xdMODWT = wden(XN,'modwtsqtwolog','s','mln',4,'sym4');
figure;
plot(X,'r')
hold on;
plot(xdMODWT)
legend('Original Signal','Denoised Signal','Location','NorthEastOutside')
axis tight;
hold off;

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original Signal, Denoised Signal.

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

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

load leleccum; 
indx = 2000:3450;
x = leleccum(indx);
plot(x)
grid on;

Figure contains an axes. The axes contains an object of type line.

Сигнал, кажется, имеет больше шума после приблизительно демонстрационные 500. Соответственно, вы хотите использовать различную пороговую обработку в начальной части сигнала. Можно использовать cmddenoise определить оптимальное количество интервалов к denoise и denoise сигнал. В этом примере используйте 'db3' вейвлет и анализируйте данные вниз к уровню 3.

[SIGDEN,~,thrParams,~,BestNbOfInt] = cmddenoise(x,'db3',3);

Отобразите количество интервалов и демонстрационных значений, которые разграничивают интервалы.

BestNbOfInt
BestNbOfInt = 2
thrParams{1}(:,1:2)
ans = 2×2

           1         412
         412        1451

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

plot(x)
hold on;
plot([412 412],[100 550],'r')
hold off;

Figure contains an axes. The axes contains 2 objects of type line.

Постройте сигнал denoised.

plot(SIGDEN)
title('Denoised Signal')

Figure contains an axes. The axes with title Denoised Signal contains an object of type line.

Denoise изображение

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

Загрузите шумное изображение. Denoise изображение с помощью wdenoise2 с настройками по умолчанию. По умолчанию, wdenoise2 использует биоортогональный вейвлет bior4.4. Чтобы отобразить оригинал и изображения denoised, не обеспечивайте выходные аргументы.

load('jump.mat')
wdenoise2(jump)

Figure contains 2 axes. Axes 1 with title Original Image contains an object of type image. Axes 2 with title Denoised Image contains an object of type image.

Обратите внимание на то, что ребра в изображении не сглаживаются процессом шумоподавления.

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

|