이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

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

이 예제에서는 위너 디컨벌루션을 사용하여 영상을 디블러 처리하는 방법을 보여줍니다. 위너 디컨벌루션은 점 확산 함수(Point-Spread Function, PSF)와 잡음 수준을 알고 있거나 추정한 경우에 유용할 수 있습니다.

영상 읽어 들이기

I = im2double(imread('cameraman.tif'));
imshow(I);
title('Original Image (courtesy of MIT)');

모션 블러 시뮬레이션하기

카메라 모션으로 인해 흐려지는(블러 처리되는) 영상을 시뮬레이션해 보겠습니다. 21개 픽셀(LEN=21)을 가로질러 11도의 각도(THETA=11)로 기울어진 선형 모션을 나타내는 점 확산 함수 PSF를 생성합니다. 블러 처리를 시뮬레이션하려면 imfilter를 사용하여 영상에 필터를 컨벌루션하십시오.

LEN = 21;
THETA = 11;
PSF = fspecial('motion', LEN, THETA);
blurred = imfilter(I, PSF, 'conv', 'circular');
imshow(blurred);
title('Blurred Image');

블러 처리된 영상 복원하기

deconvwnr의 가장 간단한 구문은 deconvwnr(A, PSF, NSR)입니다. 여기서 A는 블러 처리된 영상이고, PSF는 점 확산 함수이며, NSR은 잡음 대 신호 전력비입니다. 2단계에서 생성되는 블러 처리된 영상에는 잡음이 없기 때문에, NSR에 0을 사용하겠습니다.

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

블러 처리와 잡음 시뮬레이션하기

이제 잡음을 추가해 보겠습니다.

noise_mean = 0;
noise_var = 0.0001;
blurred_noisy = imnoise(blurred, 'gaussian', ...
                        noise_mean, noise_var);
imshow(blurred_noisy)
title('Simulate Blur and Noise')

블러 처리되고 잡음이 있는 영상 복원하기: 첫 번째 시도

이 첫 번째 복원 시도에서는 deconvwnr에 잡음이 없음(NSR = 0)을 지정할 것입니다. NSR = 0인 경우, 위너(Wiener) 복원 필터는 이상적인 역필터에 해당합니다. 다음 영상에서 볼 수 있듯이, 이상적인 역필터는 입력 영상의 잡음에 매우 민감할 수 있습니다.

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

잡음이 역필터에 의해 증폭되어, 사람 형상을 알아보기 힘든 정도가 되었습니다.

블러 처리되고 잡음이 있는 영상 복원하기: 두 번째 시도

이 두 번째 시도에서는 잡음 대 신호 전력비의 추정값을 제공합니다.

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

블러 처리와 8비트 양자화 잡음 시뮬레이션하기

눈으로 확인할 수 없는 정도의 잡음이라도 결과에 영향을 줄 수 있습니다. 입력 영상을 double형으로 변환하는 대신 uint8형 표현으로 유지해 보겠습니다.

I = imread('cameraman.tif');
class(I)
ans = 
'uint8'

uint8형 영상을 imfilter에 전달할 경우 이 함수는 또 다른 uint8형 영상을 반환하기 위해 출력물을 양자화합니다.

blurred_quantized = imfilter(I, PSF, 'conv', 'circular');
class(blurred_quantized)
ans = 
'uint8'

블러 처리되고 양자화된 영상 복원하기: 첫 번째 시도

이번에도, 먼저 deconvwnr에 잡음이 없음을 지정해 보겠습니다.

wnr4 = deconvwnr(blurred_quantized, PSF, 0);
imshow(wnr4)
title('Restoration of blurred, quantized image - NSR = 0');

블러 처리되고 양자화된 영상 복원하기: 두 번째 시도

다음으로, deconvwnr에 NSR 추정값을 제공합니다.

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

참고 항목

| | |

관련 항목