영상처리/알고리즘

영상처리에서의 침식과 팽창 - 1 (Erosion and Dilation in Image Processing)

내꿈은자동화 2016. 12. 2. 17:30

블로그를 뒤지다보면 (언젠간 글이 많아져서 뒤질날이 오겠지) 침식과 팽창에 대한 설명, 그리고 픽셀에 대한 설명이 있다.


두 글을 다 읽었다는 전제하에 설명하겠다.


이 글의 순서는 

1. 침식과 팽창을 어떤 용도로 사용하는지 알아보고 

2. 침식팽창 알고리즘에 대해 설명한 뒤 

3. 실제로 그 용도에 맞게 알고리즘을 사용하는 것을 보여줄 것이다.


영상처리에서 침식과 팽창을 하는 이유는 (내 기준에서) 네 가지 정도이다.

ㄱ. 단순히 영상에서 작은 것을 크게 보기 위해 (팽창)

ㄴ. 단순히 영상에서 작은 것들을 무시하기 위해(침식)

ㄷ. 침식 -> 팽창 을 통한 Opening

ㄹ. 팽창 -> 침식 을 통한 Closing



영상처리에서 침식과 팽창은 특정 픽셀의 주위 부분에 대해 커널을 씌우는 것이다.


<그림 1> 침식/팽창에서 사용 될 그림


위 사진의 예로 설명을 하자. 그림을 행렬로 나타냈다고 할 때 위 행렬 성분에서 0이 회색, 1이 검은색을 나타낸다. (여기서 침식/팽창의 기준은 검은색 부분이기 때문에 따로 침식/팽창의 주체를 적지 않겠다.)

이 그림을 가지고 위에서 침식을 하는 4가지 중 1,2 번을 해보겠다.

먼저 위에서 픽셀의 주위 부분에 커널을 씌우는 것이라 했는데 팽창(ㄱ.) 의 경우 아래의 커널을 씌운다. 

이 글에서 침식/팽창을 설명하기 위해 사용될 커널은 해당  형태이며 실제로는 정사각형이 아닌 십자가 형태의 커널 등 여러 커널이 사용된다.

<그림 2> 이번 글에서 사용될 침식/팽창 커널 

(주위 원소를 다 자기자신과 같은 값으로 만들어준다. 침식 시 0에만, 팽창 시 1에서만 발동)


현재 1의 값을 가진 지점의 이웃 성분 값들을 모두 1로 바꿔주는 것이다.

(커널 글을 읽었다면 의아할 수 있는데 여기서 커널을 씌우는 방법이 다른 것 뿐이다.)

<그림 3> 팽창된 결과 (주황색 부분이 팽창된 부분, 1 성분 증가)


결과는 위와 같이 나온다. 위의 주황색 부분이 팽창된 부분이다.


이제 침식(ㄴ.)에 대해 설명하겠다.

침식은 아까와 달리 0 성분의 이웃한 성분들을 모두 0으로 바꾸는 것이다.


<그림 4> 침식된 결과 (주황색 부분이 침식된 부분, 1 성분 감소)


결과는 위와 같이 나오고 주황색 부분은 원래 그림에서 침식된 부분이다.



생각보다 글이 길어져 이번 글에서는 단순 침식/팽창에 대해 알아보고 다음 글에서 Opening/Closing 에 대해 알아보겠다.



<참고 문헌>


<그림>