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

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

Денуазируйте сигнал

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

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.

Денуризируйте сигнал до уровня 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.

Можно также обнулить сигнал, используя неопределенное вейвлет. Денуризируйте сигнал снова до уровня 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 сглаживает их.

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

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 определить оптимальное количество интервалов для денуизации и денуизации сигнала. В этом примере используйте вейвлет '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.

Постройте график деноизмененного сигнала.

plot(SIGDEN)
title('Denoised Signal')

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

Денуазируйте изображение

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

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

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.

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

См. также

|