Main Content

잡음 제거

디지털 영상은 다양한 유형의 잡음이 발생하기 쉽습니다. 잡음은 영상 수집 과정에서 발생한 오류의 결과로, 픽셀 값이 실제 장면의 실제 명암을 반영하지 못하게 됩니다. 영상을 생성하는 방법에 따라 영상에서 잡음이 발생할 수 있는 여러 가지 경우가 있습니다. 예를 들면 다음과 같습니다.

  • 필름으로 만든 사진에서 영상을 스캔하면 필름 입자가 잡음의 원인이 됩니다. 잡음은 필름 손상이나 스캐너 자체로 인해 발생할 수도 있습니다.

  • 디지털 형식에서 직접 영상을 수집할 경우 데이터를 수집하는 메커니즘(예: CCD 검출기)에 의해 잡음이 발생할 수 있습니다.

  • 영상 데이터의 전자 전송으로 인해 잡음이 발생할 수 있습니다.

위에 나열된 일부 문제들의 효과를 시뮬레이션할 수 있도록 툴박스는 imnoise 함수를 제공합니다. 이 함수를 사용하면 영상에 다양한 유형의 잡음을 추가할 수 있습니다. 이 섹션의 예제에서는 이 함수를 사용합니다.

선형 필터링을 사용하여 잡음 제거하기

선형 필터링을 사용하여 특정 유형의 잡음을 제거할 수 있습니다. 평균 필터 또는 가우스 필터 같은 특정 필터가 이러한 용도에 적합합니다. 예를 들어, 평균 필터는 사진에서 입자 잡음을 제거하는 데 유용합니다. 각 픽셀이 이웃 픽셀의 평균으로 설정되기 때문에 입자로 인한 국소적 변화가 줄어듭니다.

imfilter를 사용한 선형 필터링에 대한 자세한 내용은 공간 영역에서의 영상 필터링이란? 항목을 참조하십시오.

평균 필터와 중앙값 필터를 사용하여 잡음 제거하기

이 예제에서는 평균 필터와 중앙값 필터로 영상에서 점잡음(Salt and Pepper Noise)을 제거하여 결과를 비교할 수 있는 방법을 보여줍니다. 두 가지 유형의 필터링 모두 출력 픽셀의 값을 대응하는 입력 픽셀 주변에 있는 이웃 픽셀 값의 평균으로 설정합니다. 그러나 중앙값 필터링을 사용하면 출력 픽셀의 값은 이웃 픽셀의 평균이 아니라 중앙값에 의해 결정됩니다. 중앙값은 평균에 비해 극값(이상값이라고 함)에 훨씬 덜 민감합니다. 따라서 중앙값 필터링은 영상의 선명도를 잃지 않으면서 더 효과적으로 이러한 이상값을 제거할 수 있습니다.

참고: 중앙값 필터링은 순서통계량 필터링(혹은 순위 필터링)에서 사용하는 한 방법입니다. 순서통계량 필터링에 대한 자세한 내용은 ordfilt2 함수 도움말 페이지를 참조하십시오.

영상을 작업 공간으로 읽어 들인 후 이를 표시합니다.

I = imread('eight.tif');
figure
imshow(I)

Figure contains an axes object. The axes object contains an object of type image.

이 예제의 경우, 영상에 점잡음을 추가합니다. 이러한 유형의 잡음은 검은색 또는 흰색(데이터 범위의 극값)으로 설정되는 임의 픽셀로 구성됩니다.

J = imnoise(I,'salt & pepper',0.02);
figure
imshow(J)

Figure contains an axes object. The axes object contains an object of type image.

평균 필터를 사용하여 잡음이 있는 영상 J를 필터링한 후 결과를 표시합니다. 이 예제에서는 3×3 이웃을 사용합니다.

Kaverage = filter2(fspecial('average',3),J)/255;
figure
imshow(Kaverage)

Figure contains an axes object. The axes object contains an object of type image.

이번에는 중앙값 필터를 사용하여 잡음이 있는 영상 J를 필터링합니다. 이 예제에서도 3×3 이웃을 사용합니다. 비교를 위해 필터링된 2개의 영상을 나란히 표시합니다. medfilt2가 잡음 제거에 더 효과적이고 동전의 경계 또한 덜 흐릿함을 알 수 있습니다.

Kmedian = medfilt2(J);
imshowpair(Kaverage,Kmedian,'montage')

Figure contains an axes object. The axes object contains an object of type image.

적응형 필터링을 사용하여 잡음 제거하기

이 예제에서는 wiener2 함수를 사용하여 영상에 위너 필터(선형 필터의 일종)를 적절히 적용하는 방법을 보여줍니다. 위너 필터는 자체적으로 국소 영상 분산에 맞게 조정됩니다. 분산이 큰 경우, wiener2는 평활화를 감소시킵니다. 분산이 작은 경우, wiener2는 평활화를 증가시킵니다.

이러한 접근 방식 덕분에 일반적으로 선형 필터링보다 더 나은 결과를 얻게 됩니다. 적응 필터는 선형 필터보다 더 선택적으로 필터링하여 영상의 경계 및 다른 고주파수 부분을 보존합니다. 또한 설계 작업이 없습니다. wiener2 함수는 모든 예비 계산을 처리한 후 입력 영상에 필터를 적용합니다. 그러나 wiener2는 선형 필터링보다 계산 시간이 오래 걸립니다.

wiener2는 가우스 잡음처럼 전력이 일정한("백색") 가산성 잡음일 때 가장 효과적입니다. 아래 예제에서는 가우스 잡음이 추가된 토성 영상에 wiener2를 적용합니다.

영상을 작업 공간으로 읽어 들입니다.

RGB = imread('saturn.png');

트루컬러 영상을 회색조 영상으로 변환합니다.

I = im2gray(RGB);

영상에 가우스 잡음을 추가합니다.

J = imnoise(I,'gaussian',0,0.025);

잡음이 있는 영상을 표시합니다. 영상이 매우 크기 때문에 영상의 일부만 표시합니다.

imshow(J(600:1000,1:600));
title('Portion of the Image with Added Gaussian Noise');

Figure contains an axes object. The axes object with title Portion of the Image with Added Gaussian Noise contains an object of type image.

wiener2 함수를 사용하여 잡음을 제거합니다.

K = wiener2(J,[5 5]);

처리된 영상을 표시합니다. 영상이 매우 크기 때문에 영상의 일부만 표시합니다.

figure
imshow(K(600:1000,1:600));
title('Portion of the Image with Noise Removed by Wiener Filter');

Figure contains an axes object. The axes object with title Portion of the Image with Noise Removed by Wiener Filter contains an object of type image.

참고 항목

| | | | |

관련 항목