|
이미지에서 여러 처리과정을 거쳐서 물체의 영역이 얻을 수 있다. 많은 경우에 물체영역의 경계정보만을 가지고도 여러가지 형태적인 정보를 추정해 낼 수 있다. 물체의 경계선을 얻기 위해서는 경계에 있는 점에서 출발하여서 영영을 4방향 또는 8방향 연결성을 이용하여서 추적해 나가면 된다. 이렇게 얻은 경계선은 각각 좌표로 표현이 되는데, 이것 보다도 보다 간단한 표현방법이 있다. 경계의 인접점간의 관계는 거리와 방향으로 주어지는데, 사용한 연결성이 정해지면 거리관계는 방향에 의존해서 고정이 되므로, 초기의 위치에서 출발하여 인접경계점의 방향만을 기술하면 되어서, 경계선을 저장하는데 필요한 메모리 공간을 줄일 수 있다(8방향연결성을 고려하는 경우에 3비트만 있으면 된다). 이렇게 경계선을 포현하는데 있어서 인접경계점간의 방향정보만(처음 출발좌표포함)를 이용하여 표현하는 것을 chain code라고 한다. 체인코드는 좌표의 평행이동이 불변인 특성을 가진다.
아래의 예제에서는 8방향 연결성을 이용하고, 체인코드는 양의 x축에서 시작하여서 시계방향으로 돌도록 작성이 된 것이다. #define RANGE(x,y) ((x)>=0 && (y)>=0 && (x)<width && (y)<height)
int chainCode(BYTE *image, int width, int height, int startX, int startY, return vecCode.size()>0; /* 해당 chain_code로 기술이 되는 영역의 둘레길이를 얻는다;*/ /* 8방향연결이므로 chain_code가 홀수인 경우에는 길이가 sqrt(2)로 주어진다;*/ double ccPerimeter(int ccode[], int N){ double perimeter=0.; for(int i=0; i<N; ++i){ if(ccode[i]&1) perimeter+= SQRT2; //sqrt(2); else perimeter+= 1.; } return perimeter; } |
'Programming > Image Processing' 카테고리의 다른 글
| Chain Code (0) | 2009/03/03 |
|---|---|
| Watershed 알고리즘 적용 예 (0) | 2009/03/03 |
| GDI함수 BitBlt사용예제 (0) | 2009/03/03 |
| 크로마키 기법 (0) | 2009/03/03 |



댓글을 달아 주세요