Contour Tracing

Image Recognition 2008. 5. 22. 22:51

이진이미지에서 전경의 경계를 따라서 저장하는 프로시져이다. 전경의 최외각을 8방향연결성을 체크하면서 추적하는 알고리즘이다(체인코드를 참조하면 된다). 만약에 전경의 두께가 1픽셀이더라도 항상 닫힌 컨투어를 형성하도록 되어있다(이것은 다르게 행동하도록 바꿀 수 있다) 연결되지 않은 blob가 여러개 있는 경우를 쉽게 처리하도록 벡터 컨테이너를 사용했다.

사용자 삽입 이미지



struct Cntr {
   int x, y ; //position;
   int idirn ;//chain-code;
   Cntr() {}
   Cntr(int x_, int y_, int idirn_)  : x(x_), y(y_), idirn(idirn_){}
};
typedef std::vector<Cntr> CntrVector;

#define FGVAL   255
#define BGVAL   0
#define VISITED 33          /* pixel value on accepted contour */

int GetNextCntr (BYTE** image, int *x, int *y, int *idirn) ;
int ContourTrace (BYTE** image/*binary image(FGVAL,BGVAL)*/, int width, int height,
                 std::vector<CntrVector*>& CntList) 
               
{
    /* CAUTION:: one-pixel border should have BGVAL!!!!*/
    /* initialize */
    int endY = height - 1;
    int endX = width - 1;
    for (int y = 1; y < endY; y++)
    {
        for (int x = 1; x < endX; x++)
        {
            if (image[y][x] == FGVAL && image[y][x - 1] == BGVAL)
            {
                CntrVector *pCntrVec = new CntrVector ;
                int idirn = 2;
                int xStart = x;
                int yStart = y;
                pCntrVec->push_back(Cntr(x, y, idirn));
                do
                {
                    image[y][x] = VISITED;  /* set the default value to VISITED */
                    GetNextCntr (image, &x, &y, &idirn);
                    pCntrVec->push_back(Cntr(x, y, idirn));
                }
                while (!(x == xStart && y == yStart));
                CntList.push_back(pCntrVec);
            }
        }
    }
    return (1);
}
/* 다음 픽셀을 검사.체인코드.
*/
int GetNextCntr (BYTE** image, int *x, int *y, int *idirn)
                /*idirn::direction from last pixel on contour */  

{


'Image Recognition' 카테고리의 다른 글

Gaussian Mixture Model  (2) 2008.06.07
Rasterizing Voronoi Diagram  (0) 2008.05.26
RANSAC Algorithm  (0) 2008.05.24
Contour Tracing  (0) 2008.05.22
Gausssian Scale Space  (0) 2008.05.22
Watershed Algorithm 적용의 예  (2) 2008.05.21
Posted by helloktk

댓글을 달아 주세요