Main Content

웨이블릿 잡음 제거

이 예제에서는 웨이블릿을 사용하여 신호와 영상의 잡음을 제거하는 방법을 보여줍니다. 웨이블릿은 사용자 데이터의 특징들을 서로 다른 스케일로 국소화하기 때문에 잡음을 제거하면서도 중요한 신호 또는 영상 특징을 보존할 수 있습니다. 웨이블릿 잡음 제거 또는 웨이블릿 임계값 적용의 이면을 생각해 보면 많은 실제 신호와 영상에 대해 웨이블릿 변환이 희소 표현을 만들어 냅니다. 즉, 크기가 큰 웨이블릿 계수의 신호와 영상 특징이 많이 보이지 않는데도 웨이블릿 변환이 소수의 그러한 특징에 집중한다는 것입니다. 값이 작은 웨이블릿 계수는 일반적으로 잡음이며 사용자는 신호 또는 영상 품질에 영향을 주지 않으면서 해당 계수를 "축소"하거나 제거할 수 있습니다. 계수에 임계값을 적용한 후 웨이블릿 역변환을 사용하여 데이터를 복원합니다.

신호의 잡음 제거하기

웨이블릿 잡음 제거를 보여주기 위해 잡음이 있는 "bumps" 신호를 만듭니다. 이 경우 원래 신호와 잡음이 있는 신호, 두 가지 버전이 모두 있습니다.

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 objects. Axes object 1 with title Original Signal contains an object of type line. Axes object 2 with title Noisy Signal contains an object of type line.

wdenoise를 디폴트 설정과 함께 사용하여 신호를 레벨 4까지 잡음 제거합니다. 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 object. The axes object 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 object. The axes object contains 2 objects of type line. These objects represent Original Signal, Denoised Signal.

두 경우 모두 신호의 선명한 특징을 보존하면서도 웨이블릿 잡음 제거가 엄청난 양의 잡음을 제거했다는 것을 확인할 수 있습니다. 이러한 결과는 푸리에 기반 잡음 제거의 경우 매우 어려운 문제입니다. 푸리에 기반 잡음 제거 또는 필터링에서는 잡음을 제거하기 위해 저역통과 필터를 적용합니다. 그러나 데이터가 신호의 스파이크 또는 영상의 가장자리와 같은 높은 주파수 특징을 포함하는 경우, 저역통과 필터가 이들을 평활화합니다.

또한 웨이블릿을 사용하여 잡음이 불균일한 신호의 잡음을 제거할 수도 있습니다. 시간이 지남에 따른 전기 소비량을 보여주는 신호의 일부를 가져와서 검토합니다.

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

Figure contains an axes object. The axes object 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 object. The axes object contains 2 objects of type line.

잡음 제거된 신호를 플로팅합니다.

plot(SIGDEN)
title('Denoised Signal')

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

영상의 잡음 제거하기

웨이블릿을 사용하여 영상의 잡음을 제거할 수도 있습니다. 영상에서 가장자리는 영상 밝기가 급격히 변하는 위치입니다. 영상의 잡음을 제거하면서도 가장자리를 유지하는 것은 지각 품질을 위해 중요합니다. 고전적인 저역통과 필터링은 잡음을 제거하는 반면 종종 가장자리를 평활화하고 영상 품질에 부정적인 영향을 미칩니다. 웨이블릿은 지각상 중요한 특징을 보존하면서 잡음을 제거할 수 있습니다.

잡음이 있는 영상을 불러옵니다. 디폴트 설정과 함께 wdenoise2를 사용하여 영상의 잡음을 제거합니다. 기본적으로 wdenoise2는 쌍직교 웨이블릿 bior4.4를 사용합니다. 원래 영상과 잡음 제거된 영상을 표시하려면 출력 인수를 제공하지 마십시오.

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

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

영상의 가장자리는 잡음 제거 과정에 의해 평활화되지 않습니다.

참고 항목

|