lardon3d/include/lardon3d/sparse_sfm_model.h

262 lines
8.5 KiB
C

#ifndef LARDON3D_SPARSE_SFM_MODEL_H
#define LARDON3D_SPARSE_SFM_MODEL_H
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <lardon3d/project_db.h>
#ifdef __cplusplus
extern "C" {
#endif
enum {
LARDON3D_SPARSE_SFM_SHA256_SIZE = 32,
LARDON3D_SPARSE_SFM_PAGE_MAX = 64,
LARDON3D_SPARSE_SFM_CALIBRATION_KIND_PINHOLE = 1,
LARDON3D_SPARSE_SFM_CALIBRATION_VERSION = 1,
LARDON3D_SPARSE_SFM_PROVENANCE_USER_EXPLICIT = 1,
LARDON3D_SPARSE_SFM_PROVENANCE_IMPORTED_TRUSTED = 2,
LARDON3D_SPARSE_SFM_KIND_INCREMENTAL = 1,
LARDON3D_SPARSE_SFM_VERSION = 1,
};
typedef struct {
uint64_t calibration_id;
unsigned char scientific_hash[32];
uint32_t model_kind;
uint32_t model_version;
uint32_t width;
uint32_t height;
double fx;
double fy;
double cx;
double cy;
double k1;
double k2;
double p1;
double p2;
uint32_t provenance_kind;
unsigned char provenance_fingerprint[32];
} Lardon3DSparseCalibration;
typedef struct {
uint64_t image_id;
uint64_t calibration_id;
unsigned char calibration_hash[32];
} Lardon3DSparseCalibrationMember;
typedef struct {
uint64_t scope_id;
unsigned char scientific_hash[32];
uint64_t member_count;
} Lardon3DSparseCalibrationScope;
typedef struct {
uint64_t reconstruction_id;
uint64_t track_set_id;
uint64_t calibration_scope_id;
uint32_t sfm_kind;
uint32_t sfm_version;
unsigned char parameter_fingerprint[32];
bool has_derivation_identity;
unsigned char derivation_identity[32];
uint64_t component_count;
uint64_t registered_image_count;
uint64_t landmark_count;
double reprojection_rmse_px;
double reprojection_median_px;
} Lardon3DSparseReconstruction;
typedef struct {
uint64_t component_id;
uint64_t component_key;
uint64_t registered_image_count;
uint64_t landmark_count;
} Lardon3DSparseComponent;
typedef struct {
uint64_t image_id;
uint64_t component_key;
double rotation_cw[9];
double translation_cw[3];
} Lardon3DSparseRegisteredImage;
typedef struct {
uint64_t landmark_id;
uint64_t track_id;
uint64_t component_key;
double x;
double y;
double z;
double reprojection_rmse_px;
double reprojection_median_px;
uint64_t observation_count;
} Lardon3DSparseLandmark;
typedef struct {
uint64_t landmark_id;
uint64_t track_id;
uint64_t feature_set_id;
uint32_t feature_index;
uint32_t position_in_track;
} Lardon3DSparseLandmarkObservation;
typedef struct {
uint64_t track_set_id;
uint64_t calibration_scope_id;
uint32_t sfm_kind;
uint32_t sfm_version;
unsigned char parameter_fingerprint[32];
const Lardon3DSparseComponent *components;
size_t component_count;
const Lardon3DSparseRegisteredImage *registered_images;
size_t registered_image_count;
const Lardon3DSparseLandmark *landmarks;
size_t landmark_count;
const Lardon3DSparseLandmarkObservation *observations;
size_t observation_count;
double reprojection_rmse_px;
double reprojection_median_px;
int64_t created_at;
} Lardon3DSparsePublication;
typedef struct {
uint64_t reconstruction_id;
uint64_t base_reconstruction_id;
uint64_t extension_track_set_id;
uint64_t calibration_scope_id;
uint32_t incremental_kind;
uint32_t incremental_version;
unsigned char parameter_fingerprint[32];
unsigned char scientific_identity[32];
} Lardon3DIncrementalReconstructionMetadata;
typedef struct {
uint64_t after_id;
size_t capacity;
size_t count;
uint64_t next_after_id;
Lardon3DSparseCalibration *items;
} Lardon3DSparseCalibrationPage;
typedef struct {
uint64_t after_id;
size_t capacity;
size_t count;
uint64_t next_after_id;
Lardon3DSparseReconstruction *items;
} Lardon3DSparseReconstructionPage;
typedef struct {
uint64_t after_component_key;
size_t capacity;
size_t count;
uint64_t next_component_key;
Lardon3DSparseComponent *items;
} Lardon3DSparseComponentPage;
typedef struct {
uint64_t after_image_id;
size_t capacity;
size_t count;
uint64_t next_image_id;
Lardon3DSparseRegisteredImage *items;
} Lardon3DSparseRegisteredImagePage;
typedef struct {
uint64_t after_track_id;
size_t capacity;
size_t count;
uint64_t next_track_id;
Lardon3DSparseLandmark *items;
} Lardon3DSparseLandmarkPage;
typedef struct {
uint64_t after_landmark_id;
uint32_t after_position_in_track;
size_t capacity;
size_t count;
uint64_t next_landmark_id;
uint32_t next_position_in_track;
Lardon3DSparseLandmarkObservation *items;
} Lardon3DSparseObservationPage;
Lardon3DProjectDbResult
lardon3d_sparse_calibration_create(Lardon3DProjectDb *database,
const Lardon3DSparseCalibration *input,
Lardon3DSparseCalibration *output);
Lardon3DProjectDbResult
lardon3d_sparse_calibration_load(Lardon3DProjectDb *database,
uint64_t calibration_id,
Lardon3DSparseCalibration *output);
Lardon3DProjectDbResult lardon3d_sparse_calibration_find_by_hash(
Lardon3DProjectDb *database, const unsigned char scientific_hash[32],
Lardon3DSparseCalibration *output);
Lardon3DProjectDbResult lardon3d_sparse_calibration_scope_create(
Lardon3DProjectDb *database, const Lardon3DSparseCalibrationMember *members,
size_t member_count, Lardon3DSparseCalibrationScope *output);
Lardon3DProjectDbResult
lardon3d_sparse_calibration_scope_load(Lardon3DProjectDb *database,
uint64_t scope_id,
Lardon3DSparseCalibrationScope *output);
Lardon3DProjectDbResult lardon3d_sparse_calibration_scope_find_by_hash(
Lardon3DProjectDb *database, const unsigned char scientific_hash[32],
Lardon3DSparseCalibrationScope *output);
Lardon3DProjectDbResult lardon3d_sparse_calibration_scope_list_members(
Lardon3DProjectDb *database, uint64_t scope_id, uint64_t after_image_id,
Lardon3DSparseCalibrationMember *items, size_t capacity, size_t *count,
uint64_t *next_after_image_id);
Lardon3DProjectDbResult lardon3d_sparse_reconstruction_publish(
Lardon3DProjectDb *database, const Lardon3DSparsePublication *publication,
Lardon3DSparseReconstruction *output);
Lardon3DProjectDbResult lardon3d_incremental_reconstruction_publish(
Lardon3DProjectDb *database, const Lardon3DSparsePublication *publication,
const Lardon3DIncrementalReconstructionMetadata *metadata,
Lardon3DSparseReconstruction *output);
Lardon3DProjectDbResult lardon3d_incremental_reconstruction_find_exact(
Lardon3DProjectDb *database, const unsigned char scientific_identity[32],
Lardon3DIncrementalReconstructionMetadata *metadata,
Lardon3DSparseReconstruction *reconstruction);
Lardon3DProjectDbResult lardon3d_incremental_reconstruction_load_metadata(
Lardon3DProjectDb *database, uint64_t reconstruction_id,
Lardon3DIncrementalReconstructionMetadata *metadata);
Lardon3DProjectDbResult lardon3d_sparse_reconstruction_find_exact(
Lardon3DProjectDb *database, uint64_t track_set_id,
uint64_t calibration_scope_id, uint32_t sfm_kind, uint32_t sfm_version,
const unsigned char parameter_fingerprint[32],
Lardon3DSparseReconstruction *output);
Lardon3DProjectDbResult
lardon3d_sparse_reconstruction_load(Lardon3DProjectDb *database,
uint64_t reconstruction_id,
Lardon3DSparseReconstruction *output);
Lardon3DProjectDbResult
lardon3d_sparse_reconstruction_list(Lardon3DProjectDb *database,
uint64_t after_id, size_t capacity,
Lardon3DSparseReconstructionPage *page);
Lardon3DProjectDbResult
lardon3d_sparse_component_list(Lardon3DProjectDb *database,
uint64_t reconstruction_id,
uint64_t after_component_key, size_t capacity,
Lardon3DSparseComponentPage *page);
Lardon3DProjectDbResult
lardon3d_sparse_registered_image_list(Lardon3DProjectDb *database,
uint64_t reconstruction_id,
uint64_t after_image_id, size_t capacity,
Lardon3DSparseRegisteredImagePage *page);
Lardon3DProjectDbResult lardon3d_sparse_landmark_list(
Lardon3DProjectDb *database, uint64_t reconstruction_id,
uint64_t after_track_id, size_t capacity, Lardon3DSparseLandmarkPage *page);
Lardon3DProjectDbResult lardon3d_sparse_observation_list(
Lardon3DProjectDb *database, uint64_t reconstruction_id,
uint64_t after_landmark_id, uint32_t after_position_in_track,
size_t capacity, Lardon3DSparseObservationPage *page);
#ifdef __cplusplus
}
#endif
#endif