Перевод Инвариантный Вейвлет Шумоподавление с циклическим вращением

Вращение цикла компенсирует отсутствие инвариантности сдвига в критически дискретизированном преобразовании вейвлета путем усреднения по деноизированным циклически сдвинутым версиям сигнала или изображения. Соответствующий оператор обратного сдвига циркулянта применяется к деноизованному сигналу/изображению, и результаты усредняются вместе, чтобы получить конечный деноизованный сигнал/изображение.

Существует N уникальных циклически сдвинутых версий сигнала длины, N. Для M -by - N изображения существует MN версий. Это делает использование всех возможных сдвинутых версий компьютерно запретительными. Однако на практике хорошие результаты могут быть получены при помощи небольшого подмножества возможных круговых сдвигов.

Следующий пример показывает, как вы используете wdenoise и circshift денуазировать сигнал 1-D с помощью вращающегося цикла. Для шумоподавления изображений в полутоновом и RGB, wdenoise2 поддерживает вращение цикла.

1-D вращение цикла

Этот пример показывает, как деноцировать сигнал 1-D, используя вращение цикла и ортогональное нерезервированное вейвлет со сдвигом. Пример сравнивает результаты двух методов шумоподавления.

Создайте сигнал шумного 1-D с отношением сигнал/шум 6. Отношение сигнал-шум задано как N||X||22σ где N - длина сигнала, ||X||22 является квадратной L2 нормой, и σ2 - отклонение шума.

rng default
[X,XN] = wnoise('bumps',10,sqrt(6));
subplot(2,1,1)
plot(X)
title('Original Signal')
subplot(2,1,2)
plot(XN)
title('Noisy Signal')

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.

Денуризируйте сигнал с помощью вращающегося цикла с 15 сдвигами, 7 слева и 7 справа, включая сигнал с нулевым смещением. Использование wdenoise с настройками по умолчанию. По умолчанию wdenoise использует наименее асимметричный вейвлет Daubechies с четырьмя исчезающими моментами, sym4. Шумоподавлением сведено к минимуму floor(log2(N)) и wmaxlev(N,'sym4') где N количество выборок в данных.

ydenoise = zeros(length(XN),15);
for nn = -7:7
    yshift = circshift(XN,[0 nn]);
    [yd,cyd] = wdenoise(yshift);
    ydenoise(:,nn+8) = circshift(yd,[0, -nn]);
end
ydenoise = mean(ydenoise,2);

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

xd = wdenoise(XN);
subplot(2,1,1)
plot(ydenoise,'b','linewidth',2)
hold on
plot(X,'r')
axis([1 1024 -10 10])
legend('Denoised Signal','Original Signal','Location','SouthEast')
ylabel('Amplitude')
title('Cycle Spinning Denoising')
hold off
subplot(2,1,2)
plot(xd,'b','linewidth',2)
hold on
plot(X,'r')
axis([1 1024 -10 10])
legend('Denoised Signal','Original Signal','Location','SouthEast')
xlabel('Sample')
ylabel('Amplitude')
title('Standard Orthogonal Denoising')
hold off

Figure contains 2 axes. Axes 1 with title Cycle Spinning Denoising contains 2 objects of type line. These objects represent Denoised Signal, Original Signal. Axes 2 with title Standard Orthogonal Denoising contains 2 objects of type line. These objects represent Denoised Signal, Original Signal.

absDiffDWT = norm(X-xd,2)
absDiffDWT = 12.4248
absDiffCycleSpin = norm(X-ydenoise',2)
absDiffCycleSpin = 10.6124

Вращение цикла только с 15 сдвигами уменьшило ошибку приближения.

См. также

Функции

Приложения