728x90
반응형


OpenCV Watershed를 이용한 영상 분할



워터쉐드 변한은 영상을 빨리 분할하여 동일한 영역으로 만들기 위해 사용하는 영상처리 알고리즘이다. 영상이 위상적 입체감을 보여준다는 아이디어에서 착안하였으며 영상 분할을 위해 정의된 마커 집합을 사용하게 된다. 


워터쉐드 함수는 마커 기반 영상 분할을 수행하게 된다. CV_8UC3인 8비트 3채널 컬러 영상 image에 사용자가 대략적으로 32비트 정수 1-채널 markers에 부분영역을 설정하면 영상을 분할하여 markers 행렬에 저장한다. 초기에 markers에 주어진 영역의 값을 씨앗(seed)으로 하여 나머지 영역을 분할한다. 함수가 반환 될 때 markers에 1 이상의 값을 가지며 markers의 값이 같으면 동일 특성을 갖는 분할 영역이며, 영역의 경게부분은 -1을 갖는다.


다음은 distanceTransform과 watershed 함수에 의한 영상 분할 과정과 결과이다.


1. 테스트 영상 열기 및 GRAY 컬러 변환, 이진화 (자동 임계값, OTSU)





2. distanceTransform() 함수로 거리계산을 하여 distance를 구하고 markers를 생성


(이 때 TH 값은 distanceTransform 함수로 계산한 거리 행렬 distance에 임계값으로 사용됨)





3. markers에 표시된 마커 정보를 이용하여 물체를 분할 (Segmentation)









참고자료 : OpenCV 프로그래밍 - 김동근 저 


728x90
반응형