728x90
반응형
안녕하세요. 지난 포스팅의 디지털 영상 처리 - 최소 평균 오차(Wiener) 필터링에서는 Wiener 필터링과 영상 내 노이즈의 정도를 측정하는 SNR(Signal-to-Noise Ratio)에 대해서 알아보았습니다. 오늘은 실제로 Wiener 필터링을 구현해보도록 하겠습니다. 오늘은 MATLAB에 구현되어 있는 wiener 필터링을 활용하겠습니다. wiener 필터링 예제는 아래의 MATLAB 공식 홈페이지 문서를 참조하였습니다.
기본적으로 MATLAB에서는 카메라맨이라는 예제 영상을 제공해줍니다. 그래서 아래와 같이 입력하면 그냥 영상이 튀어나오죠.
%% Load Cameraman image
Ioriginal = imread('cameraman.tif');
imshow(Ioriginal); title('Original Image');
다음으로 모션 블러를 적용하기 위해서 fspecial 함수를 이용해서 모션 블러를 위한 커널을 생성한 뒤 카메라맨 영상에 컨볼루션을 취해줍니다.
%% Apply Motion Blur to original image
PSF = fspecial('motion', 21, 11);
Idouble = im2double(Ioriginal);
blurred = imfilter(Idouble, PSF, 'conv', 'circular');
imshow(blurred); title('Blurred Image');
이제 복원을 해보도록 하겠습니다. MATLAB에서는 wiener 필터링을 위해서 deconvwnr 함수를 제공하고 있습니다. 해당 함수에 복원할 함수와 블러링할 때 사용된 커널을 입력해주면 됩니다.
%% Restore Blurred Image using 'deconvwnr'
wnr1 = deconvwnr(blurred, PSF);
imshow(wnr1); title('Restored Image');
기존의 영상과 비교해보시면 거의 차이가 안보임을 알 수 있습니다. 복원 자체가 굉장히 잘 되었다고 볼 수 있죠.
728x90
반응형
'image processing' 카테고리의 다른 글
디지털 영상 처리 - 기하 평균 필터 (0) | 2021.07.07 |
---|---|
디지털 영상 처리 - 제한된 최소 제곱 필터링 (0) | 2021.06.23 |
디지털 영상 처리 - 최소 평균 오차(Wiener) 필터링 (0) | 2021.06.14 |
디지털 영상 처리 - 역 필터링 (0) | 2021.06.03 |
디지털 영상 처리 - 열화 함수 추정 (0) | 2021.06.02 |