Main Content

위너 필터(Wiener Filter)를 사용하여 영상 디블러 처리하기

이 예제에서는 위너 디컨벌루션을 사용하여 영상을 디블러 처리하는 방법을 보여줍니다. 영상의 주파수 특성 및 가산성 잡음이 최소한 어느 정도 알려진 경우에는 위너 디컨벌루션을 효과적으로 사용할 수 있습니다.

원래 그대로의 영상 읽어 들이기

흐릿함(blur) 또는 잡음이 없는 원래 그대로의 영상을 읽어 들여 표시합니다.

Ioriginal = imread('cameraman.tif');
imshow(Ioriginal)
title('Original Image')

Figure contains an axes object. The axes object with title Original Image contains an object of type image.

잡음 없는 모션 블러 시뮬레이션 및 복원하기

카메라 움직임 때문에 생길 수 있는 흐릿한 영상을 시뮬레이션합니다. 먼저 fspecial 함수에 11도 각도로 21개 픽셀을 포괄하는 직선적 움직임을 지정하여 점 확산 함수 PSF를 만듭니다. 그런 다음 imfilter를 사용하여 영상에 점 확산 함수를 컨벌루션합니다.

원본 영상은 uint8 데이터형입니다. uint8형 영상을 imfilter에 전달할 경우 이 함수는 또 다른 uint8형 영상을 반환하기 위해 출력물을 양자화합니다. 양자화 오차를 줄이려면 imfilter 호출에 앞서 영상을 double형으로 변환하십시오.

PSF = fspecial('motion',21,11);
Idouble = im2double(Ioriginal);
blurred = imfilter(Idouble,PSF,'conv','circular');
imshow(blurred)
title('Blurred Image')

Figure contains an axes object. The axes object with title Blurred Image contains an object of type image.

deconvwnr 함수를 사용하여 흐릿한 영상을 복원합니다. 흐릿한 영상에 잡음이 없으므로 NSR(잡음 대 신호비) 입력 인수를 생략해도 됩니다.

wnr1 = deconvwnr(blurred,PSF);
imshow(wnr1)
title('Restored Blurred Image')

Figure contains an axes object. The axes object with title Restored Blurred Image contains an object of type image.

모션 블러와 가우스 잡음 시뮬레이션 및 복원하기

imnoise 함수를 사용하여 흐릿한 영상에 평균 0의 가우스 잡음을 추가합니다.

noise_mean = 0;
noise_var = 0.0001;
blurred_noisy = imnoise(blurred,'gaussian',noise_mean,noise_var);
imshow(blurred_noisy)
title('Blurred and Noisy Image')

Figure contains an axes object. The axes object with title Blurred and Noisy Image contains an object of type image.

잡음 추정값을 제공하지 않고 deconvwnr을 사용하여 잡음 있는 흐릿한 영상의 복원을 시도합니다. 기본적으로 위너 복원 필터는 NSR이 0이라고 가정합니다. 여기서는 위너 복원 필터가 이상적인 역필터와 같으며, 입력 영상의 잡음에 매우 민감할 수 있습니다.

이 예제에서는 이 복원의 잡음이 영상 내용이 사라질 정도로 증폭됩니다.

wnr2 = deconvwnr(blurred_noisy,PSF);
imshow(wnr2)
title('Restoration of Blurred Noisy Image (NSR = 0)')

Figure contains an axes object. The axes object with title Restoration of Blurred Noisy Image (NSR = 0) contains an object of type image.

더 현실적인 잡음 추정값과 함께 deconvwnr을 사용하여 잡음 있는 흐릿한 영상의 복원을 시도합니다.

signal_var = var(Idouble(:));
NSR = noise_var / signal_var;
wnr3 = deconvwnr(blurred_noisy,PSF,NSR);
imshow(wnr3)
title('Restoration of Blurred Noisy Image (Estimated NSR)')

Figure contains an axes object. The axes object with title Restoration of Blurred Noisy Image (Estimated NSR) contains an object of type image.

모션 블러와 8비트 양자화 잡음 시뮬레이션 및 복원하기

눈으로 확인할 수 없는 정도의 잡음이라도 결과에 영향을 줄 수 있습니다. 잡음의 원인 중 하나는 uint8 표현의 영상을 사용할 경우에 생기는 양자화 오차입니다. 앞서 이 예제에서는 양자화 오차를 예방하기 위해 double 데이터형의 원래 그대로의 영상을 흐릿하게 만든 영상을 시뮬레이션했습니다. 이제 양자화 오차가 복원에 미치는 영향을 확인하기 위해 원본인 uint8 데이터형의 원래 그대로의 영상을 흐릿하게 만든 영상을 시뮬레이션합니다.

blurred_quantized = imfilter(Ioriginal,PSF,'conv','circular');
imshow(blurred_quantized)
title('Blurred Quantized Image')

Figure contains an axes object. The axes object with title Blurred Quantized Image contains an object of type image.

잡음 추정값을 제공하지 않은 채로 deconvwnr을 사용하여 흐릿한 양자화 영상의 복원을 시도합니다. 어떤 잡음도 추가되지 않았지만, 이 복원은 double 데이터형의 흐릿한 영상을 복원한 것보다 질이 떨어집니다.

wnr4 = deconvwnr(blurred_quantized,PSF);
imshow(wnr4)
title('Restoration of Blurred Quantized Image (NSR = 0)');

Figure contains an axes object. The axes object with title Restoration of Blurred Quantized Image (NSR = 0) contains an object of type image.

더 현실적인 잡음 추정값과 함께 deconvwnr을 사용하여 흐릿한 양자화 영상의 복원을 시도합니다.

uniform_quantization_var = (1/256)^2 / 12;
signal_var = var(Idouble(:));
NSR = uniform_quantization_var / signal_var;
wnr5 = deconvwnr(blurred_quantized,PSF,NSR);
imshow(wnr5)
title('Restoration of Blurred Quantized Image (Estimated NSR)');

Figure contains an axes object. The axes object with title Restoration of Blurred Quantized Image (Estimated NSR) contains an object of type image.

참고 항목

| | |

관련 항목