• Tidak ada hasil yang ditemukan

외곽선 검출

Dalam dokumen 저작자표시 (Halaman 31-34)

3.2 마커 외곽선 추출

3.2.2 외곽선 검출

외곽선(contour)이란 영상 내 곡선을 나타내는 점들의 리스트로 정의된다. 외 곽선를 얻기 위해서는 Edge Tracking 또는 Boundary Flowing 알고리즘을 수행한 다. ARToolKit의 경우 얻어진 외곽선 정보를 이용하여 그림 18의 방법으로 레이블 링 이미지의 형상이 사각형인지 아닌지를 판별한다.

그림 18. ARToolKit의 corner point 추출 방법

외곽선의 한 점()에서 거리가 가장 먼 점()을 구하고, 시계 방향으로 외곽 선의 구역을 둘로 나눈다. 이후 각 구역에서 두 점을 잇는 직선()과의 거리가 가장 먼 점(와 )를 구하는 방법이다. 이 방법은 단순히 일회성을 띄는 것이 아 니라 재귀적 알고리즘으로 형상에 대한 모든 꼭지점을 찾는다. 여기에서 얻어진 점 의 개수가 4개 또는 5개 일 경우 이 형상을 사각형으로 인식하며, 만약 이 조건에 맞지 않을 경우 마커 후보군 집합에서 탈락된다. 이러한 이유로 본 논문에서 다각 형의 외곽선을 얻기 위해 cvFindContours() 함수를 이용한다. cvFindContours()함 수는 이진 이미지(binary image)상으로부터 외곽선을 검출하며, 그림 19는 함수의 동작 방식을 보여준다.

그림 19. 검출된 외부 외곽선(파선)과 내부 외곽선(점선)[2]

상단의 원본 영상의 어두운 배경위에 5개의 한얀 색 영역들을 포함하고 있다.

외곽선들은  또는  형태의 레이블이 매겨졌으며, 여기서 는 외곽선을, 는 홀(hole), 는 구분을 위한 숫자를 타나낸다. 파선은 흰색 영역들의 외부 경계

(exterior boundary)를 나타내며, 점선들은 내부 경계선(interior boundary) 또는 홀 들의 외부 경계선을 나타낸다. 얻어진 외곽선의 정보는 storage라는 공간에 저장이 되는데 그 쓰임에 따라 저장되는 방법이 다르다[2]. 그림 20은 저장되어지는 구조 를 표현하고 있다.

그림 20. cvFindContours() 함수를 통해 발견된 외곽선 저장 방법[2]

가장 바깥쪽에 나타나는 외곽선들만 검출하는 경우 CV_RETR_EXTERNAL, 모 든 외곽선을 검색하여 리스트에 넣는 경우 CV_RETR_LIST, 모든 외곽선을 검색하 고 이를 두 개의 계층으로 나누어 관리하는 CV_RETR_CCOMP, 모든 외곽선들을 검색하여 외곽선들의 전체 계층 구조를 생성하는 경우 CV_RETR_TREE을 사용한다 [2]. 본 논문에서는 영상의 모든 외곽선에 대한 정보를 트리(tree)형식을 이용하여 전체 계층 구조를 사용하고, 그 계층의 레벨을 1까지로 설정하였다[2,8]. 그림 21 은 cvFindContours() 함수를 이용하여 얻어진 외곽선을 시각화 한 그림이다.

그림 21. cvFindContours() 함수를 이용한 외곽선 추출

위에서 얻어진 다각형의 외곽선 정보를 cvApproxPoly()함수를 통해 추출된 외곽선 정보를 이용하여 다각형을 근사한다. 그림 22는 cvApproxPoly()함수가

얻어진 외곽선을 이용하여 다각형으로 근사하는 과정이다.

그림 22. cvApproxPoly() 함수의 동작원리

원본 영상(a)에서 얻어진 외곽선(b)의 점들 중 가장 멀리 떨어져있는 두 점을 찾고, (c)과 같이 직선으로 연결한다. 생성된 직선으로부터 가장 멀리 떨어진 점을 찾아 외곽선에 대한 근사화 점으로 추가하고 직선을 생성(d)한다. 계속 위 작업을 반복하여 더 이상 근사화 점이 존재하지 않을 때까지 진행(g)한다. 이때 다각형의 꼭지점 개수가 4~12개 인 다각형에 대하여 고려한다.

Dalam dokumen 저작자표시 (Halaman 31-34)

Dokumen terkait