В этом примере показано, как использовать вейвлеты для сигналов 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];
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;
Вы можете также 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;
Вы видите, что в обоих случаях, шумоподавление вейвлета удалило значительную сумму шума при сохранении изогнутых деталей в сигнале. Это - проблема для основанного на Фурье шумоподавления. В основанном на Фурье шумоподавлении или фильтрации, вы применяете фильтр lowpass, чтобы удалить шум. Однако, когда данные имеют высокочастотные функции, такие как скачки в сигнале или ребра в изображении, фильтр lowpass сглаживает их.
Можно также использовать вейвлеты для сигналов denoise, в которых шум неоднороден. Импортируйте и исследуйте фрагмент сигнала, показывающего потребление электричества в зависимости от времени.
load leleccum; indx = 2000:3450; x = leleccum(indx); plot(x) grid on;
Сигнал, кажется, имеет больше шума после приблизительно демонстрационные 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;
Постройте сигнал denoised.
plot(SIGDEN)
title('Denoised Signal')
Можно также использовать вейвлеты для изображений denoise. В изображениях ребра являются местами, где яркость изображения изменяется быстро. Поддержание ребер, в то время как шумоподавление изображение критически важно для перцепционного качества. В то время как традиционная фильтрация lowpass удаляет шум, она часто сглаживает ребра и оказывает негативное влияние на качество изображения. Вейвлеты могут удалить шум при сохранении перцепционно важных функций.
Загрузите шумное изображение. Denoise изображение с помощью wdenoise2
с настройками по умолчанию. По умолчанию, wdenoise2
использует биоортогональный вейвлет bior4.4
. Чтобы отобразить оригинал и изображения denoised, не обеспечивайте выходные аргументы.
load(fullfile(matlabroot,'examples','wavelet', 'jump.mat')) wdenoise2(jump)
Обратите внимание на то, что ребра в изображении не сглаживаются процессом шумоподавления.