Matlab을 이용한 영상처리 - 6. 필터링이란?

Programming/Image Processing 2010. 8. 27. 14:28

Filter는 그 단어의 의미대로 특정 픽셀을 거르는 역할을 한다.

마스크에 해당하는 배열을 넘겨주면 그것을 현재 픽셀과 그 주변 픽셀과의 계산을 통해 적절한 결과를 낸다.

그 계산 과정을 c 언어로 표현하자면, 

for(int i = 1 ; i < N; i ++ ){
  for( int j = 0; j < M; j++){
    for(int offset_I = -3; offset_I < 3 ;  offset_I ++){
       for(int offset_j = -3; offset_j < 3; offset_j++){
           product =  마스크배열[offset_i][offset_j] * 주변픽셀[offset_i][offset_j];
           sum += product;
       }    
    }//주변 픽셀 검색
     image[i][j] = sum;
  }
}//전체 이미지 픽셀
와 같은 형태다. 

주어지는 마스크 배열에 따라 이 결과는 천차만별인데 , 이를 이용해 이미지에 다양한 변화를 줄 수가 있다.

이번 포스팅에서는 평균필터링과 고주파 필터링에 대해 살펴본다.

평균필터의 형태는 다음과 같다. ( 3 X 3 일때 )

1/9 * [ 1 1 1 ; 1 1 1 ; 1 1 1] 

위의 알고리즘과 연계해서 생각해보면, 현재 수정하고 있는 픽셀의 값은 주변 픽셀들과 자신을 평균내어 결정 된다는 것이다.

평균을 낸다면 이미지는 ? 경계선뿐만아니라 이미지가 전체적으로 흐려지게 될것이다. 
(모든 픽셀이 주변픽셀들의 값과 비슷해진다는 얘기니까.)

이해를 돕기위해 간단한 예를 들어보자.

255    0   255
250    0   250
150   10  150

와 같은 3 X 3 의 원본 이미지가 있다. 
원본이미지는 중앙에 선명한 검은 선이 있다.
현재 정중앙의 픽셀을 검색하고 있다고 할 때 이 이미지에 평균 필터링을 적용하면,

255 * 1/9 + 255 * 1/9 + 250 * 1/9 + 250 * 1/9 + 150 * 1/9 + 150 * 1/9 = 146.6666...

이미지는 

255  0   255
250 146 250
150  10 150

이 된다. 한 픽셀에만 적용해보았지만 중앙의 경계선이 뭉개졌다.
이와 같은 과정이 전체 이미지에 적용된다면 전체 이미지가 흐려질 것이라고 이해할 수 있다.

Matlab에서는 필터를 만들때 fspecial이라는 함수를, 
필터를 적용할때 filter2(filter,image, shape)의 함수를 이용한다.

직접 저렇게 필터배열을 넘겨주어도 되지만 자주 이용되는 필터는 Matlab에 이미 배열로 저장되어 있다.

평균필터링은 'average'로 호출할수있으며, fspecial 첫번째 인자로 지정가능하며 두번째 인자로 마스크의 크기를 지정할 수 있다.

평균필터링의 실행 결과를 보자.



확연한 차이를 보이기위해 마스크의 크기를 11 X 11로 처리했다.
원영상과 비교해 확실히 흐리게 나타났다.