#ifndef LARDON3D_SPARSE_SFM_MODEL_H #define LARDON3D_SPARSE_SFM_MODEL_H #include #include #include #include #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