ARX  1.0
The next-generation open source augmented reality toolkit.
Loading...
Searching...
No Matches
kpm.h
Go to the documentation of this file.
1/*
2 * kpm.h
3 * artoolkitX
4 *
5 * This file is part of artoolkitX.
6 *
7 * artoolkitX is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU Lesser General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * artoolkitX is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public License
18 * along with artoolkitX. If not, see <http://www.gnu.org/licenses/>.
19 *
20 * As a special exception, the copyright holders of this library give you
21 * permission to link this library with independent modules to produce an
22 * executable, regardless of the license terms of these independent modules, and to
23 * copy and distribute the resulting executable under terms of your choice,
24 * provided that you also meet, for each linked independent module, the terms and
25 * conditions of the license of that module. An independent module is a module
26 * which is neither derived from nor based on this library. If you modify this
27 * library, you may extend this exception to your version of the library, but you
28 * are not obligated to do so. If you do not wish to do so, delete this exception
29 * statement from your version.
30 *
31 * Copyright 2015 Daqri, LLC. All rights reserved.
32 * Copyright 2006-2015 ARToolworks, Inc. All rights reserved.
33 * Author(s): Hirokazu Kato, Philip Lamb
34 *
35 */
36
47#ifndef KPM_H
48#define KPM_H
49
50#define BINARY_FEATURE 1
51
52#include <ARX/AR/ar.h>
53#include <ARX/KPM/kpmType.h>
54
55#ifdef __cplusplus
56extern "C" {
57#endif
58
59#ifdef _WIN32
60# ifdef KPM_STATIC
61# define KPM_EXTERN
62# else
63# ifdef ARX_EXPORTS
64# define KPM_EXTERN __declspec(dllexport)
65# else
66# define KPM_EXTERN __declspec(dllimport)
67# endif
68# endif
69#else
70# define KPM_EXTERN
71#endif
72
73#define KpmPose6DOF 1
74#define KpmPoseHomography 2
75
76typedef enum {
83#define KpmDefaultProcMode KpmProcFullSize
84
85#define KpmCompNull 0
86#define KpmCompX 1
87#define KpmCompY 2
88#define KpmDefaultComp KpmCompNull
89
90#define KpmChangePageNoAllPages (-1)
91
92typedef struct {
93 float x;
94 float y;
96
97typedef struct {
98 int width;
99 int height;
102
103typedef struct {
108
109typedef struct _KpmRefData {
111 KpmCoord2D coord3D; // millimetres.
112#if BINARY_FEATURE
113 FreakFeature featureVec;
114#else
116#endif
120
131typedef struct {
133 int num;
137
148typedef struct {
150 int num;
152
153#if !BINARY_FEATURE
154typedef struct {
155 int refIndex;
156 int inIndex;
157} KpmMatchData;
158
159typedef struct {
160 KpmMatchData *match;
161 int num;
162} KpmMatchResult;
163#endif
164
165typedef struct {
166 float camPose[3][4];
168 float error;
171 int skipF;
172} KpmResult;
173
174typedef struct _KpmHandle KpmHandle;
175
176
190#define kpmCreatHandle kpmCreateHandle
191
193#define kpmCreatHandle2 kpmCreateHandle2
194
209#define kpmCreatHandleHomography kpmCreateHandleHomography
210
222KPM_EXTERN int kpmDeleteHandle( KpmHandle **kpmHandle );
223
224KPM_EXTERN int kpmHandleGetXSize(const KpmHandle *kpmHandle);
225KPM_EXTERN int kpmHandleGetYSize(const KpmHandle *kpmHandle);
226
232
249
267KPM_EXTERN int kpmSetRefDataSetFile( KpmHandle *kpmHandle, const char *filename, const char *ext );
268
269KPM_EXTERN int kpmSetRefDataSetFileOld( KpmHandle *kpmHandle, const char *filename, const char *ext );
270
281KPM_EXTERN int kpmMatching(KpmHandle *kpmHandle, ARUint8 *inImageLuma);
282
283KPM_EXTERN int kpmSetMatchingSkipPage( KpmHandle *kpmHandle, int *skipPages, int num );
284#if !BINARY_FEATURE
285KPM_EXTERN int kpmSetMatchingSkipRegion( KpmHandle *kpmHandle, SurfSubRect *skipRegion, int regionNum);
286#endif
287
290#if !BINARY_FEATURE
291KPM_EXTERN int kpmGetMatchingResult( KpmHandle *kpmHandle, KpmMatchResult **preRANSAC, KpmMatchResult **aftRANSAC );
292#endif
293KPM_EXTERN int kpmGetPose( KpmHandle *kpmHandle, float pose[3][4], int *pageNo, float *error );
294KPM_EXTERN int kpmGetResult( KpmHandle *kpmHandle, KpmResult **result, int *resultNum );
295
296
297KPM_EXTERN int kpmGenRefDataSet ( ARUint8 *refImage, int xsize, int ysize, float dpi, int procMode, int compMode, int maxFeatureNum,
298 int pageNo, int imageNo, KpmRefDataSet **refDataSet );
299KPM_EXTERN int kpmAddRefDataSet ( ARUint8 *refImage, int xsize, int ysize, float dpi, int procMode, int compMode, int maxFeatureNum,
300 int pageNo, int imageNo, KpmRefDataSet **refDataSet );
301
314KPM_EXTERN int kpmMergeRefDataSet ( KpmRefDataSet **refDataSetPtr1, KpmRefDataSet **refDataSetPtr2 );
315#define kpmMargeRefDataSet kpmMergeRefDataSet
316
328KPM_EXTERN int kpmDeleteRefDataSet ( KpmRefDataSet **refDataSetPtr );
329
337KPM_EXTERN int kpmSaveRefDataSet ( const char *filename, const char *ext, KpmRefDataSet *refDataSet );
338
358KPM_EXTERN int kpmLoadRefDataSet ( const char *filename, const char *ext, KpmRefDataSet **refDataSetPtr );
359
360KPM_EXTERN int kpmLoadRefDataSetOld( const char *filename, const char *ext, KpmRefDataSet **refDataSetPtr );
361
369KPM_EXTERN int kpmChangePageNoOfRefDataSet ( KpmRefDataSet *refDataSet, int oldPageNo, int newPageNo );
370
371
380KPM_EXTERN ARUint8 *kpmUtilResizeImage( ARUint8 *imageLuma, int xsize, int ysize, int procMode, int *newXsize, int *newYsize );
381
382#if !BINARY_FEATURE
383KPM_EXTERN int kpmUtilGetPose ( ARParamLT *cparamLT, KpmMatchResult *matchData, KpmRefDataSet *refDataSet, KpmInputDataSet *inputDataSet, float camPose[3][4], float *err );
384
385KPM_EXTERN int kpmUtilGetPose2( ARParamLT *cparamLT, KpmMatchResult *matchData, KpmRefDataSet *refDataSet, int *redDataIndex, KpmInputDataSet *inputDataSet, float camPose[3][4], float *error );
386KPM_EXTERN int kpmUtilGetPoseHomography( KpmMatchResult *matchData, KpmRefDataSet *refDataSet, KpmInputDataSet *inputDataSet, float camPose[3][4], float *err );
387#endif
388KPM_EXTERN int kpmUtilGetCorner( ARUint8 *inImagePtr, int xsize, int ysize, int procMode, int maxPointNum, CornerPoints *cornerPoints );
389
390
391double wallclock(void);
392
393KPM_EXTERN int kpmLoadImageDb(const char *filename);
394
395#ifdef __cplusplus
396}
397#endif
398#endif
artoolkitX core routines.
unsigned char ARUint8
Definition: ar.h:92
KPM_EXTERN int kpmSetProcMode(KpmHandle *kpmHandle, KPM_PROC_MODE procMode)
Definition: kpmHandle.cpp:150
KPM_EXTERN int kpmAddRefDataSet(ARUint8 *refImage, int xsize, int ysize, float dpi, int procMode, int compMode, int maxFeatureNum, int pageNo, int imageNo, KpmRefDataSet **refDataSet)
Definition: kpmRefDataSet.cpp:287
KPM_EXTERN int kpmGetRefDataSet(KpmHandle *kpmHandle, KpmRefDataSet **refDataSet)
Definition: kpmResult.cpp:42
KPM_EXTERN int kpmDeleteHandle(KpmHandle **kpmHandle)
Finalise and dispose of structures for KPM tracking.
Definition: kpmHandle.cpp:228
KPM_EXTERN int kpmGetProcMode(KpmHandle *kpmHandle, KPM_PROC_MODE *procMode)
Definition: kpmHandle.cpp:195
KPM_PROC_MODE
Definition: kpm.h:76
@ KpmProcOneThirdSize
Definition: kpm.h:80
@ KpmProcTwoThirdSize
Definition: kpm.h:81
@ KpmProcQuatSize
Definition: kpm.h:79
@ KpmProcFullSize
Definition: kpm.h:77
@ KpmProcHalfSize
Definition: kpm.h:78
KPM_EXTERN int kpmGetInDataSet(KpmHandle *kpmHandle, KpmInputDataSet **inDataSet)
Definition: kpmResult.cpp:52
KPM_EXTERN int kpmSetRefDataSet(KpmHandle *kpmHandle, KpmRefDataSet *refDataSet)
Load a reference data set into the key point matcher for tracking.
Definition: kpmMatching.cpp:171
KPM_EXTERN int kpmChangePageNoOfRefDataSet(KpmRefDataSet *refDataSet, int oldPageNo, int newPageNo)
Definition: kpmRefDataSet.cpp:639
KPM_EXTERN int kpmLoadImageDb(const char *filename)
KPM_EXTERN int kpmSaveRefDataSet(const char *filename, const char *ext, KpmRefDataSet *refDataSet)
Definition: kpmRefDataSet.cpp:444
KPM_EXTERN int kpmSetSurfThreadNum(KpmHandle *kpmHandle, int surfThreadNum)
Definition: kpmHandle.cpp:217
struct _KpmRefData KpmRefData
KPM_EXTERN int kpmSetMatchingSkipPage(KpmHandle *kpmHandle, int *skipPages, int num)
KPM_EXTERN int kpmHandleGetXSize(const KpmHandle *kpmHandle)
Definition: kpmHandle.cpp:138
KPM_EXTERN int kpmSetRefDataSetFileOld(KpmHandle *kpmHandle, const char *filename, const char *ext)
Definition: kpmMatching.cpp:321
KPM_EXTERN int kpmGetPose(KpmHandle *kpmHandle, float pose[3][4], int *pageNo, float *error)
Definition: kpmResult.cpp:76
KPM_EXTERN KpmHandle * kpmCreateHandle(ARParamLT *cparamLT)
Allocate and initialise essential structures for KPM tracking, using full six degree-of-freedom track...
Definition: kpmHandle.cpp:48
KPM_EXTERN int kpmUtilGetCorner(ARUint8 *inImagePtr, int xsize, int ysize, int procMode, int maxPointNum, CornerPoints *cornerPoints)
Definition: kpmUtil.cpp:62
KPM_EXTERN KpmHandle * kpmCreateHandleHomography(int xsize, int ysize)
Allocate and initialise essential structures for KPM tracking, using homography-only tracking.
Definition: kpmHandle.cpp:53
KPM_EXTERN int kpmSetRefDataSetFile(KpmHandle *kpmHandle, const char *filename, const char *ext)
Loads a reference data set from a file into the KPM tracker.
Definition: kpmMatching.cpp:302
KPM_EXTERN int kpmLoadRefDataSetOld(const char *filename, const char *ext, KpmRefDataSet **refDataSetPtr)
Definition: kpmRefDataSet.cpp:560
KPM_EXTERN int kpmMatching(KpmHandle *kpmHandle, ARUint8 *inImageLuma)
Perform key-point matching on an image.
Definition: kpmMatching.cpp:381
KPM_EXTERN KpmHandle * kpmCreateHandle2(int xsize, int ysize)
Definition: kpmHandle.cpp:58
KPM_EXTERN int kpmGenRefDataSet(ARUint8 *refImage, int xsize, int ysize, float dpi, int procMode, int compMode, int maxFeatureNum, int pageNo, int imageNo, KpmRefDataSet **refDataSet)
Definition: kpmRefDataSet.cpp:54
KPM_EXTERN ARUint8 * kpmUtilResizeImage(ARUint8 *imageLuma, int xsize, int ysize, int procMode, int *newXsize, int *newYsize)
Definition: kpmUtil.cpp:164
KPM_EXTERN int kpmGetDetectedFeatureMax(KpmHandle *kpmHandle, int *detectedMaxFeature)
Definition: kpmHandle.cpp:211
#define KPM_EXTERN
Definition: kpm.h:70
KPM_EXTERN int kpmGetResult(KpmHandle *kpmHandle, KpmResult **result, int *resultNum)
Definition: kpmResult.cpp:95
KPM_EXTERN int kpmMergeRefDataSet(KpmRefDataSet **refDataSetPtr1, KpmRefDataSet **refDataSetPtr2)
Merge a second KPM dataset into the first, and dispose of second.
Definition: kpmRefDataSet.cpp:308
KPM_EXTERN int kpmLoadRefDataSet(const char *filename, const char *ext, KpmRefDataSet **refDataSetPtr)
Load a reference data set from the filesystem into memory.
Definition: kpmRefDataSet.cpp:493
KPM_EXTERN int kpmHandleGetYSize(const KpmHandle *kpmHandle)
Definition: kpmHandle.cpp:144
double wallclock(void)
KPM_EXTERN int kpmDeleteRefDataSet(KpmRefDataSet **refDataSetPtr)
Dispose of a reference data set and its allocated memory.
Definition: kpmRefDataSet.cpp:423
KPM_EXTERN int kpmSetDetectedFeatureMax(KpmHandle *kpmHandle, int detectedMaxFeature)
Definition: kpmHandle.cpp:202
int kpmSetMatchingSkipRegion(KpmHandle *kpmHandle, SurfSubRect *skipRegion, int regionNum)
Definition: kpmMatching.cpp:360
int kpmGetMatchingResult(KpmHandle *kpmHandle, KpmMatchResult **preRANSAC, KpmMatchResult **aftRANSAC)
Definition: kpmResult.cpp:62
int kpmUtilGetPose2(ARParamLT *cparamLT, KpmMatchResult *matchData, KpmRefDataSet *refDataSet, int *redDataIndex, KpmInputDataSet *inputDataSet, float camPose[3][4], float *error)
Definition: kpmUtil.cpp:297
int kpmUtilGetPose(ARParamLT *cparamLT, KpmMatchResult *matchData, KpmRefDataSet *refDataSet, KpmInputDataSet *inputDataSet, float camPose[3][4], float *error)
Definition: kpmUtil.cpp:184
int kpmUtilGetPoseHomography(KpmMatchResult *matchData, KpmRefDataSet *refDataSet, KpmInputDataSet *inputDataSet, float camPose[3][4], float *error)
Definition: kpmUtil.cpp:408
Definition: kpmType.h:59
Definition: kpmPrivate.h:60
int ysize
Definition: kpmPrivate.h:70
KpmResult * result
Definition: kpmPrivate.h:88
KPM_PROC_MODE procMode
Definition: kpmPrivate.h:71
ARParamLT * cparamLT
Definition: kpmPrivate.h:68
KpmSkipRegionSet skipRegion
Definition: kpmPrivate.h:85
int surfThreadNum
Definition: kpmPrivate.h:74
KpmRefDataSet refDataSet
Definition: kpmPrivate.h:77
KpmMatchResult preRANSAC
Definition: kpmPrivate.h:80
int xsize
Definition: kpmPrivate.h:70
KpmMatchResult aftRANSAC
Definition: kpmPrivate.h:81
int detectedMaxFeature
Definition: kpmPrivate.h:72
KpmInputDataSet inDataSet
Definition: kpmPrivate.h:78
int resultNum
Definition: kpmPrivate.h:89
Definition: kpm.h:109
FreakFeature featureVec
Definition: kpm.h:113
KpmCoord2D coord2D
Definition: kpm.h:110
int pageNo
Definition: kpm.h:117
KpmCoord2D coord3D
Definition: kpm.h:111
int refImageNo
Definition: kpm.h:118
Definition: kpmType.h:94
Structure holding camera parameters, in lookup table form.
Definition: param.h:151
Definition: kpm.h:92
float y
Definition: kpm.h:94
float x
Definition: kpm.h:93
Definition: kpm.h:97
int width
Definition: kpm.h:98
int height
Definition: kpm.h:99
int imageNo
Definition: kpm.h:100
Definition: kpm.h:148
int num
Definition: kpm.h:150
KpmCoord2D * coord
Definition: kpm.h:149
Definition: kpm.h:103
KpmImageInfo * imageInfo
Definition: kpm.h:104
int imageNum
Definition: kpm.h:105
int pageNo
Definition: kpm.h:106
Definition: kpm.h:131
int pageNum
Definition: kpm.h:135
KpmRefData * refPoint
Definition: kpm.h:132
int num
Definition: kpm.h:133
KpmPageInfo * pageInfo
Definition: kpm.h:134
Definition: kpm.h:165
float error
Definition: kpm.h:168
int camPoseF
Definition: kpm.h:170
int skipF
Definition: kpm.h:171
int pageNo
Definition: kpm.h:167
int inlierNum
Definition: kpm.h:169