위너 필터(Wiener Filter)를 사용하여 영상 디블러 처리하기
이 예제에서는 위너 디컨벌루션을 사용하여 영상을 디블러 처리하는 방법을 보여줍니다. 영상의 주파수 특성 및 가산성 잡음이 최소한 어느 정도 알려진 경우에는 위너 디컨벌루션을 효과적으로 사용할 수 있습니다.
원래 그대로의 영상 읽어 들이기
흐릿함(blur) 또는 잡음이 없는 원래 그대로의 영상을 읽어 들여 표시합니다.
Ioriginal = imread("cameraman.tif"); imshow(Ioriginal) title("Original 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")
deconvwnr
함수를 사용하여 흐릿한 영상을 복원합니다. 흐릿한 영상에 잡음이 없으므로 NSR(잡음 대 신호비) 입력 인수를 생략해도 됩니다.
wnr1 = deconvwnr(blurred,PSF);
imshow(wnr1)
title("Restored Blurred 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")
잡음 추정값을 제공하지 않고 deconvwnr
을 사용하여 잡음 있는 흐릿한 영상의 복원을 시도합니다. 기본적으로 위너 복원 필터는 NSR이 0이라고 가정합니다. 여기서는 위너 복원 필터가 이상적인 역필터와 같으며, 입력 영상의 잡음에 매우 민감할 수 있습니다.
이 예제에서는 이 복원의 잡음이 영상 내용이 사라질 정도로 증폭됩니다.
wnr2 = deconvwnr(blurred_noisy,PSF);
imshow(wnr2)
title("Restoration of Blurred Noisy Image (NSR = 0)")
더 현실적인 잡음 추정값과 함께 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)")
모션 블러와 8비트 양자화 잡음 시뮬레이션 및 복원하기
눈으로 확인할 수 없는 정도의 잡음이라도 결과에 영향을 줄 수 있습니다. 잡음의 원인 중 하나는 uint8
표현의 영상을 사용할 경우에 생기는 양자화 오차입니다. 앞서 이 예제에서는 양자화 오차를 예방하기 위해 double
데이터형의 원래 그대로의 영상을 흐릿하게 만든 영상을 시뮬레이션했습니다. 이제 양자화 오차가 복원에 미치는 영향을 확인하기 위해 원본인 uint8
데이터형의 원래 그대로의 영상을 흐릿하게 만든 영상을 시뮬레이션합니다.
blurred_quantized = imfilter(Ioriginal,PSF,"conv","circular"); imshow(blurred_quantized) title("Blurred Quantized Image")
잡음 추정값을 제공하지 않은 채로 deconvwnr
을 사용하여 흐릿한 양자화 영상의 복원을 시도합니다. 어떤 잡음도 추가되지 않았지만, 이 복원은 double
데이터형의 흐릿한 영상을 복원한 것보다 질이 떨어집니다.
wnr4 = deconvwnr(blurred_quantized,PSF);
imshow(wnr4)
title("Restoration of Blurred Quantized Image (NSR = 0)");
더 현실적인 잡음 추정값과 함께 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)");
참고 항목
deconvwnr
| fspecial
| imfilter
| imnoise