8#ifndef META_OCEAN_GEOMETRY_NON_LINEAR_OPTIMIZATION_CAMERA_H
9#define META_OCEAN_GEOMETRY_NON_LINEAR_OPTIMIZATION_CAMERA_H
57 class CameraOrientationsBaseData;
63 template <
unsigned int tParameters>
69 class CameraOrientationsFovData;
75 template <PinholeCamera::OptimizationStrategy tOptimizationStrategy>
82 template <
unsigned int tParameters>
88 class CameraPosesOptimizationProvider;
94 template <
unsigned int tParameters>
119 static bool findInitialFieldOfView(
const PinholeCamera& pinholeCamera,
const ConstIndexedAccessor<SquareMatrix3>& world_R_cameras,
const PoseGroupsAccessor& correspondenceGroups,
PinholeCamera& optimizedCamera,
NonconstIndexedAccessor<SquareMatrix3>* world_R_optimizedOrientations,
const Scalar lowerFovX = Numeric::deg2rad(40),
const Scalar upperFovX = Numeric::deg2rad(90),
const unsigned int steps = 10u,
const unsigned int recursiveIterations = 3u,
const bool onlyFrontObjectPoints =
true,
bool* significantResult =
nullptr,
Scalar* finalError =
nullptr,
Worker* worker =
nullptr,
bool* abort =
nullptr);
143 static bool findInitialFieldOfView(
const PinholeCamera& pinholeCamera,
const ConstIndexedAccessor<HomogenousMatrix4>& world_T_cameras,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ObjectPointGroupsAccessor& correspondenceGroups,
PinholeCamera& optimizedCamera,
NonconstIndexedAccessor<HomogenousMatrix4>* world_T_optimizedCameras,
NonconstIndexedAccessor<Vector3>* optimizedObjectPoints,
const Scalar lowerFovX = Numeric::deg2rad(40),
const Scalar upperFovX = Numeric::deg2rad(90),
const unsigned int steps = 10u,
const unsigned int recursiveIterations = 3u,
const bool onlyFrontObjectPoints =
true,
bool* significantResult =
nullptr,
Scalar* finalError =
nullptr,
Worker* worker =
nullptr,
bool* abort =
nullptr);
161 static bool optimizeCamera(
const PinholeCamera& pinholeCamera,
const ConstIndexedAccessor<Vector2>& normalizedObjectPoints,
const ConstIndexedAccessor<Vector2>& imagePoints,
const PinholeCamera::OptimizationStrategy optimizationStrategy,
PinholeCamera& optimizedCamera,
const unsigned int iterations = 20u,
const Estimator::EstimatorType estimator = Estimator::ET_SQUARE,
Scalar lambda =
Scalar(0.001),
const Scalar lambdaFactor =
Scalar(5),
Scalar* initialError =
nullptr,
Scalar* finalError =
nullptr);
183 static bool optimizeCameraOrientations(
const PinholeCamera& pinholeCamera,
const ConstIndexedAccessor<SquareMatrix3>& world_R_cameras,
const PoseGroupsAccessor& correspondenceGroups,
const PinholeCamera::OptimizationStrategy optimizationStrategy,
PinholeCamera& optimizedCamera,
NonconstIndexedAccessor<SquareMatrix3>* world_R_optimizedCameras,
const unsigned int iterations,
const Geometry::Estimator::EstimatorType estimator = Geometry::Estimator::ET_SQUARE,
const Scalar lambda =
Scalar(0.001),
const Scalar lambdaFactor =
Scalar(5),
const bool onlyFrontObjectPoints =
true,
Scalar* initialError =
nullptr,
Scalar* finalError =
nullptr,
Scalars* intermediateErrors =
nullptr);
206 static bool optimizeCameraPoses(
const AnyCamera& camera,
const ConstIndexedAccessor<HomogenousMatrix4>& world_T_cameras,
const ConstIndexedAccessor<Vectors3>& objectPointGroups,
const ConstIndexedAccessor<Vectors2>& imagePointGroups,
SharedAnyCamera& optimizedCamera,
NonconstIndexedAccessor<HomogenousMatrix4>* world_T_optimizedCameras,
const unsigned int iterations,
const OptimizationStrategy optimizationStrategy = OS_ALL_PARAMETERS_AFTER_ANOTHER,
const Estimator::EstimatorType estimator = Estimator::ET_SQUARE,
Scalar lambda =
Scalar(0.001),
const Scalar lambdaFactor =
Scalar(5),
const bool onlyFrontObjectPoints =
true,
Scalar* initialError =
nullptr,
Scalar* finalError =
nullptr,
Scalars* intermediateErrors =
nullptr);
213 static bool optimizeCameraPosesIF(
const AnyCamera& camera,
const ConstIndexedAccessor<HomogenousMatrix4>& flippedCameras_T_world,
const ConstIndexedAccessor<Vectors3>& objectPointGroups,
const ConstIndexedAccessor<Vectors2>& imagePointGroups,
SharedAnyCamera& optimizedCamera,
NonconstIndexedAccessor<HomogenousMatrix4>* flippedOptimizedCameras_T_world,
const unsigned int iterations,
const OptimizationStrategy optimizationStrategy = OS_ALL_PARAMETERS_AFTER_ANOTHER,
const Estimator::EstimatorType estimator = Estimator::ET_SQUARE,
Scalar lambda =
Scalar(0.001),
const Scalar lambdaFactor =
Scalar(5),
const bool onlyFrontObjectPoints =
true,
Scalar* initialError =
nullptr,
Scalar* finalError =
nullptr,
Scalars* intermediateErrors =
nullptr);
237 static bool optimizeCameraPoses(
const PinholeCamera& pinholeCamera,
const ConstIndexedAccessor<HomogenousMatrix4>& world_T_cameras,
const ConstIndexedAccessor<Vectors3>& objectPointGroups,
const ConstIndexedAccessor<Vectors2>& imagePointGroups,
PinholeCamera& optimizedCamera,
NonconstIndexedAccessor<HomogenousMatrix4>* world_T_optimizedCameras,
const unsigned int iterations,
const Estimator::EstimatorType estimator = Estimator::ET_SQUARE,
Scalar lambda =
Scalar(0.001),
const Scalar lambdaFactor =
Scalar(5),
const bool onlyFrontObjectPoints =
true,
Scalar* initialError =
nullptr,
Scalar* finalError =
nullptr,
Scalars* intermediateErrors =
nullptr);
246 static bool optimizeCameraPosesIF(
const PinholeCamera& pinholeCamera,
const ConstIndexedAccessor<HomogenousMatrix4>& flippedCameras_T_world,
const ConstIndexedAccessor<Vectors3>& objectPointGroups,
const ConstIndexedAccessor<Vectors2>& imagePointGroups,
PinholeCamera& optimizedCamera,
NonconstIndexedAccessor<HomogenousMatrix4>* flippedOptimizedCameras_T_world,
const unsigned int iterations,
const Estimator::EstimatorType estimator = Estimator::ET_SQUARE,
Scalar lambda =
Scalar(0.001),
const Scalar lambdaFactor =
Scalar(5),
const bool onlyFrontObjectPoints =
true,
Scalar* initialError =
nullptr,
Scalar* finalError =
nullptr,
Scalars* intermediateErrors =
nullptr);
271 static bool optimizeCameraObjectPointsPoses(
const PinholeCamera& pinholeCamera,
const ConstIndexedAccessor<HomogenousMatrix4>& world_T_cameras,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ObjectPointGroupsAccessor& correspondenceGroups,
const PinholeCamera::OptimizationStrategy optimizationStrategy,
PinholeCamera& optimizedCamera,
NonconstIndexedAccessor<HomogenousMatrix4>* world_T_optimizedCameras,
NonconstIndexedAccessor<Vector3>* optimizedObjectPoints,
const unsigned int iterations,
const Geometry::Estimator::EstimatorType estimator = Geometry::Estimator::ET_SQUARE,
const Scalar lambda =
Scalar(0.001),
const Scalar lambdaFactor =
Scalar(5),
const bool onlyFrontObjectPoints =
true,
Scalar* initialError =
nullptr,
Scalar* finalError =
nullptr,
Scalars* intermediateErrors =
nullptr);
303 static void findInitialFieldOfViewSubset(
const PinholeCamera* pinholeCamera,
const ConstIndexedAccessor<SquareMatrix3>* orientations,
const PoseGroupsAccessor* correspondenceGroups,
PinholeCamera* optimizedCamera,
SquareMatrices3* optimizedOrientations,
const Scalar lowerFovX,
const Scalar upperFovX,
const unsigned int overallSteps,
const bool onlyFrontObjectPoints,
Scalar* bestError,
Scalars* allErrors,
Lock* lock,
bool* abort,
const unsigned int firstStep,
const unsigned int steps);
327 static void findInitialFieldOfViewSubset(
const PinholeCamera* pinholeCamera,
const ConstIndexedAccessor<HomogenousMatrix4>* poses,
const ConstIndexedAccessor<Vector3>* objectPoints,
const ObjectPointGroupsAccessor* correspondenceGroups,
PinholeCamera* optimizedCamera,
HomogenousMatrices4* optimizedPoses,
Vectors3* optimizedObjectPoints,
const Scalar lowerFovX,
const Scalar upperFovX,
const unsigned int overallSteps,
const bool onlyFrontObjectPoints,
Scalar* bestError,
Scalars* allErrors,
Lock* lock,
bool* abort,
const unsigned int firstStep,
const unsigned int steps);
This class implements the abstract base class for all AnyCamera objects.
Definition AnyCamera.h:130
This class implements a base class for all indexed-based accessors allowing a constant reference acce...
Definition Accessor.h:241
EstimatorType
Definition of individual robust estimator types.
Definition Estimator.h:34
This class implements an abstract specialization of the accessor for groups of pairs for object point...
Definition NonLinearOptimization.h:159
This class implements an abstract specialization of the accessor for groups of pairs for poses.
Definition NonLinearOptimization.h:185
Forward declaration of the data class allowing to optimized the camera parameters for unconstrained (...
Definition NonLinearOptimizationCamera.h:95
Forward declaration of the data class allowing to optimized the camera parameters for rotational came...
Definition NonLinearOptimizationCamera.h:83
Forward declaration of a base class allowing to optimized the camera profile.
Definition NonLinearOptimizationCamera.h:64
Forward declaration of an optimization provider allowing to optimize the individual parameters of a c...
Definition NonLinearOptimizationCamera.h:76
This class implements least square or robust optimization algorithms for camera profiles.
Definition NonLinearOptimizationCamera.h:30
static bool findInitialFieldOfView(const PinholeCamera &pinholeCamera, const ConstIndexedAccessor< HomogenousMatrix4 > &world_T_cameras, const ConstIndexedAccessor< Vector3 > &objectPoints, const ObjectPointGroupsAccessor &correspondenceGroups, PinholeCamera &optimizedCamera, NonconstIndexedAccessor< HomogenousMatrix4 > *world_T_optimizedCameras, NonconstIndexedAccessor< Vector3 > *optimizedObjectPoints, const Scalar lowerFovX=Numeric::deg2rad(40), const Scalar upperFovX=Numeric::deg2rad(90), const unsigned int steps=10u, const unsigned int recursiveIterations=3u, const bool onlyFrontObjectPoints=true, bool *significantResult=nullptr, Scalar *finalError=nullptr, Worker *worker=nullptr, bool *abort=nullptr)
Determines the initial field of view for a set of camera frames with known poses and groups of corres...
static bool optimizeCameraObjectPointsPoses(const PinholeCamera &pinholeCamera, const ConstIndexedAccessor< HomogenousMatrix4 > &world_T_cameras, const ConstIndexedAccessor< Vector3 > &objectPoints, const ObjectPointGroupsAccessor &correspondenceGroups, const PinholeCamera::OptimizationStrategy optimizationStrategy, PinholeCamera &optimizedCamera, NonconstIndexedAccessor< HomogenousMatrix4 > *world_T_optimizedCameras, NonconstIndexedAccessor< Vector3 > *optimizedObjectPoints, const unsigned int iterations, const Geometry::Estimator::EstimatorType estimator=Geometry::Estimator::ET_SQUARE, const Scalar lambda=Scalar(0.001), const Scalar lambdaFactor=Scalar(5), const bool onlyFrontObjectPoints=true, Scalar *initialError=nullptr, Scalar *finalError=nullptr, Scalars *intermediateErrors=nullptr)
Optimizes the camera parameters of a given camera profile for a set of given camera poses and a set o...
static bool optimizeCameraOrientations(const PinholeCamera &pinholeCamera, const ConstIndexedAccessor< SquareMatrix3 > &world_R_cameras, const PoseGroupsAccessor &correspondenceGroups, const PinholeCamera::OptimizationStrategy optimizationStrategy, PinholeCamera &optimizedCamera, NonconstIndexedAccessor< SquareMatrix3 > *world_R_optimizedCameras, const unsigned int iterations, const Geometry::Estimator::EstimatorType estimator=Geometry::Estimator::ET_SQUARE, const Scalar lambda=Scalar(0.001), const Scalar lambdaFactor=Scalar(5), const bool onlyFrontObjectPoints=true, Scalar *initialError=nullptr, Scalar *finalError=nullptr, Scalars *intermediateErrors=nullptr)
Optimizes the camera parameters of a given camera profile for a set of camera frames with known orien...
static bool optimizeCameraPoses(const AnyCamera &camera, const ConstIndexedAccessor< HomogenousMatrix4 > &world_T_cameras, const ConstIndexedAccessor< Vectors3 > &objectPointGroups, const ConstIndexedAccessor< Vectors2 > &imagePointGroups, SharedAnyCamera &optimizedCamera, NonconstIndexedAccessor< HomogenousMatrix4 > *world_T_optimizedCameras, const unsigned int iterations, const OptimizationStrategy optimizationStrategy=OS_ALL_PARAMETERS_AFTER_ANOTHER, const Estimator::EstimatorType estimator=Estimator::ET_SQUARE, Scalar lambda=Scalar(0.001), const Scalar lambdaFactor=Scalar(5), const bool onlyFrontObjectPoints=true, Scalar *initialError=nullptr, Scalar *finalError=nullptr, Scalars *intermediateErrors=nullptr)
Minimizes the projection error between the projections of static 3D object points and their correspon...
static std::vector< size_t > cameraParametersPerOptimizationStage(const AnyCamera &camera, const OptimizationStrategy optimizationStrategy)
Returns the number of camera parameters which should be optimized during individual optimization stag...
static bool optimizeCamera(const PinholeCamera &pinholeCamera, const ConstIndexedAccessor< Vector2 > &normalizedObjectPoints, const ConstIndexedAccessor< Vector2 > &imagePoints, const PinholeCamera::OptimizationStrategy optimizationStrategy, PinholeCamera &optimizedCamera, const unsigned int iterations=20u, const Estimator::EstimatorType estimator=Estimator::ET_SQUARE, Scalar lambda=Scalar(0.001), const Scalar lambdaFactor=Scalar(5), Scalar *initialError=nullptr, Scalar *finalError=nullptr)
Optimizes the individual parameters of a camera profile by minimizing the pixel error between normali...
static void findInitialFieldOfViewSubset(const PinholeCamera *pinholeCamera, const ConstIndexedAccessor< HomogenousMatrix4 > *poses, const ConstIndexedAccessor< Vector3 > *objectPoints, const ObjectPointGroupsAccessor *correspondenceGroups, PinholeCamera *optimizedCamera, HomogenousMatrices4 *optimizedPoses, Vectors3 *optimizedObjectPoints, const Scalar lowerFovX, const Scalar upperFovX, const unsigned int overallSteps, const bool onlyFrontObjectPoints, Scalar *bestError, Scalars *allErrors, Lock *lock, bool *abort, const unsigned int firstStep, const unsigned int steps)
Determines the initial field of view for a set of camera frames with known poses and groups of corres...
static bool optimizeCameraPosesIF(const PinholeCamera &pinholeCamera, const ConstIndexedAccessor< HomogenousMatrix4 > &flippedCameras_T_world, const ConstIndexedAccessor< Vectors3 > &objectPointGroups, const ConstIndexedAccessor< Vectors2 > &imagePointGroups, PinholeCamera &optimizedCamera, NonconstIndexedAccessor< HomogenousMatrix4 > *flippedOptimizedCameras_T_world, const unsigned int iterations, const Estimator::EstimatorType estimator=Estimator::ET_SQUARE, Scalar lambda=Scalar(0.001), const Scalar lambdaFactor=Scalar(5), const bool onlyFrontObjectPoints=true, Scalar *initialError=nullptr, Scalar *finalError=nullptr, Scalars *intermediateErrors=nullptr)
Deprecated.
OptimizationStrategy
Definition of individual optimization strategies for how the camera parameters can be optimized.
Definition NonLinearOptimizationCamera.h:37
@ OS_ALL_PARAMETERS_AT_ONCE
Single stage optimization: All parameters of the camera profile will be optimized at once.
Definition NonLinearOptimizationCamera.h:47
@ OS_UP_TO_MAJOR_DISTORTION_AFTER_ANOTHER
Multi-stage optimization: First the focal length parameter(s) will be optimized in a first stage,...
Definition NonLinearOptimizationCamera.h:45
@ OS_ALL_PARAMETERS_AFTER_ANOTHER
Multi-stage optimization: First the focal length parameter(s) will be optimized in a first stage,...
Definition NonLinearOptimizationCamera.h:49
@ OS_ONLY_FOCAL_LENGTH
One stage optimization: Only the focal length parameter(s) of the camera profile will be optimized (a...
Definition NonLinearOptimizationCamera.h:41
@ OS_UP_TO_PRINCIPAL_POINT_AFTER_ANOTHER
Two stage optimization: First the focal length parameter(s) will be optimized in a first stage,...
Definition NonLinearOptimizationCamera.h:43
static bool optimizeCameraPoses(const PinholeCamera &pinholeCamera, const ConstIndexedAccessor< HomogenousMatrix4 > &world_T_cameras, const ConstIndexedAccessor< Vectors3 > &objectPointGroups, const ConstIndexedAccessor< Vectors2 > &imagePointGroups, PinholeCamera &optimizedCamera, NonconstIndexedAccessor< HomogenousMatrix4 > *world_T_optimizedCameras, const unsigned int iterations, const Estimator::EstimatorType estimator=Estimator::ET_SQUARE, Scalar lambda=Scalar(0.001), const Scalar lambdaFactor=Scalar(5), const bool onlyFrontObjectPoints=true, Scalar *initialError=nullptr, Scalar *finalError=nullptr, Scalars *intermediateErrors=nullptr)
Deprecated.
static bool optimizeCameraPosesIF(const AnyCamera &camera, const ConstIndexedAccessor< HomogenousMatrix4 > &flippedCameras_T_world, const ConstIndexedAccessor< Vectors3 > &objectPointGroups, const ConstIndexedAccessor< Vectors2 > &imagePointGroups, SharedAnyCamera &optimizedCamera, NonconstIndexedAccessor< HomogenousMatrix4 > *flippedOptimizedCameras_T_world, const unsigned int iterations, const OptimizationStrategy optimizationStrategy=OS_ALL_PARAMETERS_AFTER_ANOTHER, const Estimator::EstimatorType estimator=Estimator::ET_SQUARE, Scalar lambda=Scalar(0.001), const Scalar lambdaFactor=Scalar(5), const bool onlyFrontObjectPoints=true, Scalar *initialError=nullptr, Scalar *finalError=nullptr, Scalars *intermediateErrors=nullptr)
Minimizes the projection error between the projections of static 3D object points and their correspon...
static void findInitialFieldOfViewSubset(const PinholeCamera *pinholeCamera, const ConstIndexedAccessor< SquareMatrix3 > *orientations, const PoseGroupsAccessor *correspondenceGroups, PinholeCamera *optimizedCamera, SquareMatrices3 *optimizedOrientations, const Scalar lowerFovX, const Scalar upperFovX, const unsigned int overallSteps, const bool onlyFrontObjectPoints, Scalar *bestError, Scalars *allErrors, Lock *lock, bool *abort, const unsigned int firstStep, const unsigned int steps)
Determines the initial field of view for a set of camera frames with known orientations and groups of...
static bool findInitialFieldOfView(const PinholeCamera &pinholeCamera, const ConstIndexedAccessor< SquareMatrix3 > &world_R_cameras, const PoseGroupsAccessor &correspondenceGroups, PinholeCamera &optimizedCamera, NonconstIndexedAccessor< SquareMatrix3 > *world_R_optimizedOrientations, const Scalar lowerFovX=Numeric::deg2rad(40), const Scalar upperFovX=Numeric::deg2rad(90), const unsigned int steps=10u, const unsigned int recursiveIterations=3u, const bool onlyFrontObjectPoints=true, bool *significantResult=nullptr, Scalar *finalError=nullptr, Worker *worker=nullptr, bool *abort=nullptr)
Determines the initial field of view for a set of camera frames with known orientations and groups of...
This class implements the basic functions for least square or robust optimization algorithms for non ...
Definition NonLinearOptimization.h:34
This class implements a recursive lock object.
Definition Lock.h:31
This class implements a base class for all indexed-based accessors allowing a non-constant reference ...
Definition Accessor.h:284
OptimizationStrategy
Definition of individual optimization strategies for camera parameters.
Definition PinholeCamera.h:178
This class implements a worker able to distribute function calls over different threads.
Definition Worker.h:33
float Scalar
Definition of a scalar type.
Definition Math.h:129
std::vector< HomogenousMatrix4 > HomogenousMatrices4
Definition of a vector holding HomogenousMatrix4 objects.
Definition HomogenousMatrix4.h:73
std::shared_ptr< AnyCamera > SharedAnyCamera
Definition of a shared pointer holding an AnyCamera object with Scalar precision.
Definition AnyCamera.h:60
std::vector< Scalar > Scalars
Definition of a vector holding Scalar objects.
Definition Math.h:145
std::vector< SquareMatrix3 > SquareMatrices3
Definition of a vector holding SquareMatrix3 objects.
Definition SquareMatrix3.h:71
std::vector< Vector3 > Vectors3
Definition of a vector holding Vector3 objects.
Definition Vector3.h:65
The namespace covering the entire Ocean framework.
Definition Accessor.h:15