exponenta event banner

Инвариантный вейвлет-деноизинг с циклическим вращением

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

Существует 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 сдвигами уменьшило погрешность аппроксимации.

См. также

Функции

Приложения