본문 바로가기

IT/ARtoolkit

ARToolKit Documentation - Developing your First Application, Part1 (함수 설명 1)


Developing your First Application, Part 1 에 나와있는 함수 정보

 

1. init // 초기화 함수

 

static void init( void )
{
    ARParam  wparam;
 
    /* open the video path */
    if( arVideoOpen( vconf ) < 0 ) exit(0);
    /* find the size of the window */
    if( arVideoInqSize(&xsize, &ysize) < 0 ) exit(0);
    printf("Image size (x,y) = (%d,%d)\n", xsize, ysize);

    /* set the initial camera parameters */
    if( arParamLoad(cparam_name, 1, &wparam) < 0 ) {
        printf("Camera parameter load error !!\n");
        exit(0);
    }
    arParamChangeSize( &wparam, xsize, ysize, &cparam );
    arInitCparam( &cparam );
    printf("*** Camera Parameter ***\n");
    arParamDisp( &cparam );

    if( (patt_id=arLoadPatt(patt_name)) < 0 ) {
        printf("pattern load error !!\n");
        exit(0);
    }

    /* open the graphics window */
    argInit( &cparam, 1.0, 0, 0, 0, 0 );
}

 

①ARParam  wparam;

 

AR 파라미터인 wparam을 정의. pram.h에 정의 되어 있다.

 

/** \struct ARParam
* \brief camera intrinsic parameters.
*
* This structure contains the main parameters for
* the intrinsic parameters of the camera
* representation. The camera used is a pinhole
* camera with standard parameters. User should
* consult a computer vision reference for more
* information. (e.g. Three-Dimensional Computer Vision
* (Artificial Intelligence) by Olivier Faugeras).
* \param xsize length of the image (in pixels).
* \param ysize height of the image (in pixels).
* \param mat perspective matrix (K).
* \param dist_factor radial distortions factor
*          dist_factor[0]=x center of distortion
*          dist_factor[1]=y center of distortion
*          dist_factor[2]=distortion factor
*          dist_factor[3]=scale factor
*/

typedef struct {
    int      xsize, ysize;
    double   mat[3][4];
    double   dist_factor[4];
} ARParam;

 

 

 

 

② if( arVideoOpen( vconf ) < 0 ) exit(0);

 

  AR_DLL_API  int    arVideoOpen(char *config);

    

   video.h에 보면 자세한 arVideoOpen에 대한 설명이 나와있다.

 

/**
 * \brief open a video source.
 *
 * This function opens a video input path with the
 * driver (and device) present on your platform.
 * According to your operating system and the
 * hardware the initialization will be different : a
 * generic string structure is used for this issue.
 * This function prepares the video stream for capture,
 * but capture will not actually begin until arVideoCapStart
 * is called.

 * \param config string of the selected video configuration.
 * See the <a href="video/">video configuration documentation</a>
 * for more information on this parameter.
 * \return 0 if successful, -1 if a video path couldn't be opened
 */ 

int arVideoOpen( char *config ) {
   if( gVid != NULL ) {
        printf("Device has been opened!!\n");
        return -1;
    }
    gVid = ar2VideoOpen( config );
    if( gVid == NULL ) return -1;
}


 캡쳐 화면 오픈에 실패하면 -1을 리턴하므로 if( arVideoOpen( vconf ) < 0 ) exit(0);는 캡쳐 화면 오픈에 실패하였을때 종료하게 만드는 문장이다.

 

 

③ if( arVideoInqSize(&xsize, &ysize) < 0 ) exit(0);

 

arVideoInqSize역시 video.h에 함수에 대한 자세한 설명이 나와있다.

/**
 * \
brief get the video image size, in pixels.
 *
 * This function returns the size of the captured video frame, in
 * pixels.
 * \param x a pointer to the length of the captured image
 * \param y a pointer to the width of the captured image
 * \return 0 if the dimensions are found successfully, otherwise -1

 */

AR_DLL_API  int    arVideoInqSize(int *x, int *y);

 

소스는

 

int arVideoInqSize( int *x, int *y )
{
    if( open_flag == 0 ) return(-1);

    *x = image.Width();
    *y = image.Height();

    return(0);
}

 

if( arVideoInqSize(&xsize, &ysize) < 0 ) exit(0);

 

arVideoInqSize(&xsize, &ysize) 함수를 통해 사진의 사이즈를 입력받고 입력 받지 못했을 경우 프로그램을 종료(성공시 0, 실패시 -1을 리턴하므로) 시키는 문장.

 

 

④printf("Image size (x,y) = (%d,%d)\n", xsize, ysize);

 

앞서 입력 받은 이미지 사이즈를 콘솔창에 출력해준다.

 

 

/* set the initial camera parameters */
    if( arParamLoad(cparam_name, 1, &wparam) < 0 ) {
        printf("Camera parameter load error !!\n");
        exit(0);
    }
    arParamChangeSize( &wparam, xsize, ysize, &cparam );
    arInitCparam( &cparam );
    printf("*** Camera Parameter ***\n");
    arParamDisp( &cparam );

 

 

주석에 달린 내용 대로 카메라 매개변수들을 초기화 해주는 내용일 것이다. 하지만 한 번 자세히 살펴보자.

 

arParamLoad(cparam_name, 1, &wparam)

 

역시 param.h에 보면 함수에 대한 자세한 설명이 나온다.

 

/** \fn int arParamLoad( const char *filename, int num, ARParam *param, ...)
* \brief load the camera intrinsic parameters.
*
* Load camera intrinsic parameters in the ARToolkit Library from
* a file (itself, an output of the calibration step).
* \param filename name of the parameters file.
* \param num number of variable arguments
* \param param result of the loaded parameters
* \return 0 if success, -1 if Error (file not found, file structure problem)
*/

int    arParamLoad( const char *filename, int num, ARParam *param, ...);

 

자세한 소스는 paramFile.c(152) 에 있는데 소스 내용이.. -_-; 내 수준을 넘어섰다;; 라이브러리 만세!

 

헤더 파일에 있는 내용을 바탕으로 보면, cparam_name이 가르키는 곳에 저장된 정보를  num의 숫자 만큼 wparam에 복사해서 wparam을 설정해 주는듯!?

히밤 다 썼는데 다 날아가고 여기부터 다시 시작이군 -_-;;;;;

 

ⓑ    arParamChangeSize( &wparam, xsize, ysize, &cparam );

 

/** \fn int arParamChangeSize( ARParam *source, int xsize, int ysize, ARParam *newparam )
* \brief change the camera size parameters.
*
* Change the size variable in camera intrinsic parameters.
* \param source name of the source parameters structure
* \param xsize new length size
* \param ysize new height size
* \param newparam name of the destination parameters structure.
* \return 0

*/

int arParamChangeSize( ARParam *source, int xsize, int ysize, ARParam *newparam );

 

wparam에 저장된 정보를 읽어와 xsize, ysize를 바꾸어서 cparam에 저장한다. xsize와 ysize는 콘솔창이 뜨고 나서 뜨는 설정창에서 설정한 값을 읽어오는듯 하며 cparam은 전역 변수로 잡혀있는 ARparam형식의 변수이다.

 

ARParam         cparam; (32)


ⓒ   arInitCparam( &cparam );

 

ar.h에 함수에 대한 자세한 설명이 나와있다.

 

/**
* \brief initialize camera parameters.
*
* set the camera parameters specified in the camera parameters structure
* *param to static memory in the AR library. These camera parameters are 
* typically read from a data file at program startup. In the video-see through
* AR applications, the default camera parameters are sufficient, no camera
* calibration is needed.
* \param param the camera parameter structure
* \return always 0
*/
int arInitCparam( ARParam *param );

 

아래는 소스.

 

int arInitCparam( ARParam *param )
{
    arImXsize = param->xsize;
    arImYsize = param->ysize;
    arParam = *param;

    return(0);
}

cparam에 저장된 정보로 카메라 정보를 초기화한다.


ⓓ    arParamDisp( &cparam );

 

 /** \fn int arParamDisp( ARParam *param )
* \brief display parameters.
*
* Display the structure of the camera instrinsic parameters argument.
* \param param structure to display
* \return 0
*/

int    arParamDisp( ARParam *param );

 

cparam에 저장된 정보를 콘솔창에 출력한다.

 

⑥ 

    if( (patt_id=arLoadPatt(patt_name)) < 0 ) {
        printf("pattern load error !!\n");
        exit(0);
    }

 

patt_id : int형 전역 변수

 

int             patt_id;

 

arLoadPatt(patt_name)

 

ar.h에 함수에 대한 정보가 나와있다.

/**
* \brief load markers description from a file
*
* load the bitmap pattern specified in the file filename into the pattern
* matching array for later use by the marker detection routines.
* \param filename name of the file containing the pattern bitmap to be loaded
* \return the identity number of the pattern loaded or -1 if the pattern load failed.
*/

int arLoadPatt( const char *filename );

 

패턴 정보를 읽어오는 함수. 패턴 정보를 읽는데 성공한다면 읽어온 패턴의 ID를 반환하고 만약 읽어오는데 실패하거나 저장된 패턴 정보가 없다면 -1을 반환한다.

  

 

 

    /* open the graphics window */
    argInit( &cparam, 1.0, 0, 0, 0, 0 );

 

gsub.h에 함수에 대한 자세한 정보가 나와있음.

 

 /** \fn argInit( ARParam *cparam, double zoom, int fullFlag, int xwin, int ywin, int hmd_flag )
* \brief Initialise the gsub library
*
*  This function performs required initialisation of the gsub library.
*  It must be called before any other argl*() functions are called.
* \param cparam the intrinsics parameters of the camera (used to defined openGL perspective matrix)
* \param zoom defined a zoom parameter for the final result.
* \param fullFlag full screen mode (1 enable, 0 disable).
* \param xwin XXXBK. 0 if indifferent.
* \param ywin XXXBK. 0 if indifferent.
* \param hmd_flag enable stereo display mode (only interleaved configuration)
*/
void argInit( ARParam *cparam, double zoom, int fullFlag, int xwin, int ywin, int hmd_flag );

 

캡쳐 화면 출력창을 띄워주는 함수인듯

 

argl*() 함수를 미리 불러야 사용할 수 있다고 한다.

 

소스는 gsub.c(120)에 있는데 읽어봐도 모르겠다 -_-;;