8#ifndef META_OCEAN_GEOMETRY_NON_LINEAR_OPTIMIZATION_OBJECT_POINT_H
9#define META_OCEAN_GEOMETRY_NON_LINEAR_OPTIMIZATION_OBJECT_POINT_H
74 class CameraObjectPointProvider;
79 class CamerasObjectPointProvider;
84 class StereoCameraObjectPointProvider;
89 class SphericalObjectPointProvider;
94 class ObjectPointsOrientationsData;
100 template <Estimator::EstimatorType tEstimator>
106 class ObjectPointsTwoPosesProvider;
113 template <Estimator::EstimatorType tEstimator>
121 template <Estimator::EstimatorType tEstimator>
130 class SlowObjectPointsPosesProvider;
152 static inline bool optimizeObjectPointForFixedPoses(
const AnyCamera& camera,
const ConstIndexedAccessor<HomogenousMatrix4>& world_T_cameras,
const Vector3& worldObjectPoint,
const ConstIndexedAccessor<Vector2>& imagePoints,
Vector3& optimizedWorldObjectPoint,
const unsigned int iterations = 5u,
const Estimator::EstimatorType estimator = Estimator::ET_SQUARE,
Scalar lambda =
Scalar(0.001),
const Scalar lambdaFactor = 10,
const bool onlyFrontObjectPoints =
true,
Scalar* initialRobustError =
nullptr,
Scalar* finalRobustError =
nullptr,
Scalars* intermediateRobustErrors =
nullptr);
173 static bool optimizeObjectPointForFixedPosesIF(
const AnyCamera& camera,
const ConstIndexedAccessor<HomogenousMatrix4>& flippedCameras_T_world,
const Vector3& worldObjectPoint,
const ConstIndexedAccessor<Vector2>& imagePoints,
Vector3& optimizedWorldObjectPoint,
const unsigned int iterations = 5u,
const Estimator::EstimatorType estimator = Estimator::ET_SQUARE,
Scalar lambda =
Scalar(0.001),
const Scalar lambdaFactor = 10,
const bool onlyFrontObjectPoints =
true,
Scalar* initialRobustError =
nullptr,
Scalar* finalRobustError =
nullptr,
Scalars* intermediateRobustErrors =
nullptr);
193 static inline bool optimizeObjectPointForFixedPoses(
const ConstIndexedAccessor<const AnyCamera*>& cameras,
const ConstIndexedAccessor<HomogenousMatrix4>& world_T_cameras,
const Vector3& worldObjectPoint,
const ConstIndexedAccessor<Vector2>& imagePoints,
Vector3& optimizedWorldObjectPoint,
const unsigned int iterations = 5u,
const Estimator::EstimatorType estimator = Estimator::ET_SQUARE,
Scalar lambda =
Scalar(0.001),
const Scalar lambdaFactor = 10,
const bool onlyFrontObjectPoints =
true,
Scalar* initialRobustError =
nullptr,
Scalar* finalRobustError =
nullptr,
Scalars* intermediateRobustErrors =
nullptr);
214 static bool optimizeObjectPointForFixedPosesIF(
const ConstIndexedAccessor<const AnyCamera*>& cameras,
const ConstIndexedAccessor<HomogenousMatrix4>& flippedCameras_T_world,
const Vector3& worldObjectPoint,
const ConstIndexedAccessor<Vector2>& imagePoints,
Vector3& optimizedWorldObjectPoint,
const unsigned int iterations = 5u,
const Estimator::EstimatorType estimator = Estimator::ET_SQUARE,
Scalar lambda =
Scalar(0.001),
const Scalar lambdaFactor = 10,
const bool onlyFrontObjectPoints =
true,
Scalar* initialRobustError =
nullptr,
Scalar* finalRobustError =
nullptr,
Scalars* intermediateRobustErrors =
nullptr);
238 static inline bool optimizeObjectPointForFixedStereoPoses(
const AnyCamera& anyCameraA,
const AnyCamera& anyCameraB,
const ConstIndexedAccessor<HomogenousMatrix4>& world_T_camerasA,
const ConstIndexedAccessor<HomogenousMatrix4>& world_T_camerasB,
const Vector3& worldObjectPoint,
const ConstIndexedAccessor<Vector2>& imagePointAccessorA,
const ConstIndexedAccessor<Vector2>& imagePointAccessorB,
Vector3& optimizedWorldObjectPoint,
const unsigned int iterations = 5u,
const Estimator::EstimatorType estimator = Estimator::ET_SQUARE,
Scalar lambda =
Scalar(0.001),
const Scalar lambdaFactor = 10,
const bool onlyFrontObjectPoints =
true,
Scalar* initialRobustError =
nullptr,
Scalar* finalRobustError =
nullptr,
Scalars* intermediateRobustErrors =
nullptr);
263 static bool optimizeObjectPointForFixedStereoPosesIF(
const AnyCamera& anyCameraA,
const AnyCamera& anyCameraB,
const ConstIndexedAccessor<HomogenousMatrix4>& flippedCamerasA_T_world,
const ConstIndexedAccessor<HomogenousMatrix4>& flippedCamerasB_T_world,
const Vector3& worldObjectPoint,
const ConstIndexedAccessor<Vector2>& imagePointAccessorA,
const ConstIndexedAccessor<Vector2>& imagePointAccessorB,
Vector3& optimizedWorldObjectPoint,
const unsigned int iterations = 5u,
const Estimator::EstimatorType estimator = Estimator::ET_SQUARE,
Scalar lambda =
Scalar(0.001),
const Scalar lambdaFactor = 10,
const bool onlyFrontObjectPoints =
true,
Scalar* initialRobustError =
nullptr,
Scalar* finalRobustError =
nullptr,
Scalars* intermediateRobustErrors =
nullptr);
285 static inline bool optimizeObjectPointsForFixedPoses(
const PinholeCamera& pinholeCamera,
const ConstIndexedAccessor<HomogenousMatrix4>& poseAccessor,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ObjectPointGroupsAccessor& correspondenceGroups,
const bool distortImagePoints,
NonconstIndexedAccessor<Vector3>& optimizedObjectPoints,
const unsigned int iterations = 5u,
const Estimator::EstimatorType estimator = Estimator::ET_SQUARE,
Scalar lambda =
Scalar(0.001),
const Scalar lambdaFactor = 10,
const bool onlyFrontObjectPoints =
true,
Worker* worker =
nullptr);
307 static bool optimizeObjectPointsForFixedPosesIF(
const PinholeCamera& pinholeCamera,
const ConstIndexedAccessor<HomogenousMatrix4>& invertedFlippedPoses,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ObjectPointGroupsAccessor& correspondenceGroups,
const bool distortImagePoints,
NonconstIndexedAccessor<Vector3>& optimizedObjectPoints,
const unsigned int iterations = 5u,
const Estimator::EstimatorType estimator = Estimator::ET_SQUARE,
Scalar lambda =
Scalar(0.001),
const Scalar lambdaFactor = 10,
const bool onlyFrontObjectPoints =
true,
Worker* worker =
nullptr);
328 static inline bool optimizeObjectPointForFixedOrientations(
const AnyCamera& camera,
const ConstIndexedAccessor<SquareMatrix3>& world_R_cameras,
const ConstIndexedAccessor<Vector2>& imagePoints,
const Vector3& objectPoint,
const Scalar objectPointDistance,
Vector3& optimizedObjectPoint,
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 onlyFrontObjectPoint =
true,
Scalar* initialError =
nullptr,
Scalar* finalError =
nullptr,
Scalars* intermediateErrors =
nullptr);
349 static bool optimizeObjectPointForFixedOrientationsIF(
const AnyCamera& camera,
const ConstIndexedAccessor<SquareMatrix3>& flippedCameras_R_world,
const ConstIndexedAccessor<Vector2>& imagePoints,
const Vector3& objectPoint,
const Scalar objectPointDistance,
Vector3& optimizedObjectPoint,
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 onlyFrontObjectPoint =
true,
Scalar* initialError =
nullptr,
Scalar* finalError =
nullptr,
Scalars* intermediateErrors =
nullptr);
373 static bool optimizeObjectPointsAndOrientations(
const PinholeCamera& pinholeCamera,
const ConstIndexedAccessor<SquareMatrix3>& orientations,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ObjectPointGroupsAccessor& correspondenceGroups,
const Scalar objectPointDistance,
NonconstIndexedAccessor<SquareMatrix3>* optimizedOrientations,
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);
399 static inline bool optimizeObjectPointsAndOnePose(
const AnyCamera& camera,
const HomogenousMatrix4& world_T_firstCamera,
const HomogenousMatrix4& world_T_secondCamera,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ConstIndexedAccessor<Vector2>& firstImagePoints,
const ConstIndexedAccessor<Vector2>& secondImagePoints,
HomogenousMatrix4* world_T_optimizedSecondCamera,
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,
const GravityConstraints* gravityConstraints =
nullptr);
425 static bool optimizeObjectPointsAndOnePoseIF(
const AnyCamera& camera,
const HomogenousMatrix4& firstFlippedCamera_T_world,
const HomogenousMatrix4& secondFlippedCamera_T_world,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ConstIndexedAccessor<Vector2>& firstImagePoints,
const ConstIndexedAccessor<Vector2>& secondImagePoints,
HomogenousMatrix4* optimizedSecondFlippedCamera_T_world,
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,
const GravityConstraints* gravityConstraints =
nullptr);
454 static inline bool optimizeObjectPointsAndTwoPoses(
const PinholeCamera& pinholeCamera,
const HomogenousMatrix4& firstPose,
const HomogenousMatrix4& secondPose,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ConstIndexedAccessor<Vector2>& firstImagePoints,
const ConstIndexedAccessor<Vector2>& secondImagePoints,
const bool useDistortionParameters,
HomogenousMatrix4* optimizedFirstPose,
HomogenousMatrix4* optimizedSecondPose,
NonconstIndexedAccessor<Vector3>* optimizedObjectPoints,
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,
const Matrix* invertedFirstCovariances =
nullptr,
const Matrix* invertedSecondCovariances =
nullptr,
Scalars* intermediateErrors =
nullptr);
483 static bool optimizeObjectPointsAndTwoPosesIF(
const PinholeCamera& pinholeCamera,
const HomogenousMatrix4& firstPoseIF,
const HomogenousMatrix4& secondPoseIF,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ConstIndexedAccessor<Vector2>& firstImagePoints,
const ConstIndexedAccessor<Vector2>& secondImagePoints,
const bool useDistortionParameters,
HomogenousMatrix4* optimizedFirstPoseIF,
HomogenousMatrix4* optimizedSecondPoseIF,
NonconstIndexedAccessor<Vector3>* optimizedObjectPoints,
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,
const Matrix* invertedFirstCovariances =
nullptr,
const Matrix* invertedSecondCovariances =
nullptr,
Scalars* intermediateErrors =
nullptr);
508 static inline bool optimizeObjectPointsAndPoses(
const AnyCamera& camera,
const ConstIndexedAccessor<HomogenousMatrix4>& world_T_cameras,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ObjectPointGroupsAccessor& correspondenceGroups,
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,
const GravityConstraints* gravityConstraints =
nullptr);
533 static inline bool optimizeObjectPointsAndPosesIF(
const AnyCamera& camera,
const ConstIndexedAccessor<HomogenousMatrix4>& flippedCameras_T_world,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ObjectPointGroupsAccessor& correspondenceGroups,
NonconstIndexedAccessor<HomogenousMatrix4>* flippedOptimizedCameras_T_world,
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,
const GravityConstraints* gravityConstraints =
nullptr);
557 static bool optimizeObjectPointsAndPoses(
const ConstIndexedAccessor<const AnyCamera*>& cameras,
const ConstIndexedAccessor<HomogenousMatrix4>& world_T_cameras,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ObjectPointGroupsAccessor& correspondenceGroups,
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);
582 static bool optimizeObjectPointsAndPosesIF(
const ConstIndexedAccessor<const AnyCamera*>& cameras,
const ConstIndexedAccessor<HomogenousMatrix4>& flippedCameras_T_world,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ObjectPointGroupsAccessor& correspondenceGroups,
NonconstIndexedAccessor<HomogenousMatrix4>* flippedOptimizedCameras_T_world,
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,
const GravityConstraints* gravityConstraints =
nullptr);
607 static bool optimizeObjectPointsAndOrientationalPoses(
const ConstIndexedAccessor<const AnyCamera*>& cameras,
const ConstIndexedAccessor<HomogenousMatrix4>& world_T_cameras,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ObjectPointGroupsAccessor& correspondenceGroups,
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);
632 static bool optimizeObjectPointsAndOrientationalPosesIF(
const ConstIndexedAccessor<const AnyCamera*>& cameras,
const ConstIndexedAccessor<HomogenousMatrix4>& flippedCameras_T_world,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ObjectPointGroupsAccessor& correspondenceGroups,
NonconstIndexedAccessor<HomogenousMatrix4>* flippedOptimizedCameras_T_world,
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);
659 static bool slowOptimizeObjectPointsAndPoses(
const AnyCamera& camera,
const ConstIndexedAccessor<HomogenousMatrix4>& world_T_cameras,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ObjectPointGroupsAccessor& correspondenceGroups,
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);
684 static bool slowOptimizeObjectPointsAndPosesIF(
const AnyCamera& camera,
const ConstIndexedAccessor<HomogenousMatrix4>& flippedCameras_T_world,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ObjectPointGroupsAccessor& correspondenceGroups,
NonconstIndexedAccessor<HomogenousMatrix4>* flippedOptimizedCameras_T_world,
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);
712 static inline bool slowOptimizeObjectPointsAndPoses(
const PinholeCamera& pinholeCamera,
const ConstIndexedAccessor<HomogenousMatrix4>& poses,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ObjectPointGroupsAccessor& correspondenceGroups,
const bool useDistortionParameters,
NonconstIndexedAccessor<HomogenousMatrix4>* optimizedPoses,
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);
740 static inline bool slowOptimizeObjectPointsAndPosesIF(
const PinholeCamera& pinholeCamera,
const ConstIndexedAccessor<HomogenousMatrix4>& posesIF,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ObjectPointGroupsAccessor& correspondenceGroups,
const bool useDistortionParameters,
NonconstIndexedAccessor<HomogenousMatrix4>* optimizedPosesIF,
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);
760 static void optimizeObjectPointsForFixedPosesIFSubset(
const PinholeCamera* pinholeCamera,
const ConstIndexedAccessor<HomogenousMatrix4>* invertedFlippedPoses,
const ConstIndexedAccessor<Vector3>* objectPoints,
const ObjectPointGroupsAccessor* correspondenceGroups,
const bool distortImagePoints,
NonconstIndexedAccessor<Vector3>* optimizedObjectPoints,
const unsigned int iterations,
const Estimator::EstimatorType estimator,
Scalar lambda,
const Scalar lambdaFactor,
const bool onlyFrontObjectPoints,
const unsigned int firstObjectPoint,
const unsigned int numberObjectPoints);
763inline bool NonLinearOptimizationObjectPoint::optimizeObjectPointForFixedPoses(
const AnyCamera& anyCamera,
const ConstIndexedAccessor<HomogenousMatrix4>& world_T_cameras,
const Vector3& worldObjectPoint,
const ConstIndexedAccessor<Vector2>& imagePoints,
Vector3& optimizedWorldObjectPoint,
const unsigned int iterations,
const Estimator::EstimatorType estimator,
Scalar lambda,
const Scalar lambdaFactor,
const bool onlyFrontObjectPoints,
Scalar* initialRobustError,
Scalar* finalRobustError,
Scalars* intermediateRobustErrors)
767 return optimizeObjectPointForFixedPosesIF(anyCamera,
ConstArrayAccessor<HomogenousMatrix4>(flippedCameras_T_world), worldObjectPoint, imagePoints, optimizedWorldObjectPoint, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, initialRobustError, finalRobustError, intermediateRobustErrors);
770inline bool NonLinearOptimizationObjectPoint::optimizeObjectPointForFixedPoses(
const ConstIndexedAccessor<const AnyCamera*>& cameras,
const ConstIndexedAccessor<HomogenousMatrix4>& world_T_cameras,
const Vector3& worldObjectPoint,
const ConstIndexedAccessor<Vector2>& imagePoints,
Vector3& optimizedWorldObjectPoint,
const unsigned int iterations,
const Estimator::EstimatorType estimator,
Scalar lambda,
const Scalar lambdaFactor,
const bool onlyFrontObjectPoints,
Scalar* initialRobustError,
Scalar* finalRobustError,
Scalars* intermediateRobustErrors)
774 return optimizeObjectPointForFixedPosesIF(cameras,
ConstArrayAccessor<HomogenousMatrix4>(flippedCameras_T_world), worldObjectPoint, imagePoints, optimizedWorldObjectPoint, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, initialRobustError, finalRobustError, intermediateRobustErrors);
777inline bool NonLinearOptimizationObjectPoint::optimizeObjectPointForFixedStereoPoses(
const AnyCamera& anyCameraA,
const AnyCamera& anyCameraB,
const ConstIndexedAccessor<HomogenousMatrix4>& world_T_camerasA,
const ConstIndexedAccessor<HomogenousMatrix4>& world_T_camerasB,
const Vector3& worldObjectPoint,
const ConstIndexedAccessor<Vector2>& imagePointAccessorA,
const ConstIndexedAccessor<Vector2>& imagePointAccessorB,
Vector3& optimizedWorldObjectPoint,
const unsigned int iterations,
const Estimator::EstimatorType estimator,
Scalar lambda,
const Scalar lambdaFactor,
const bool onlyFrontObjectPoints,
Scalar* initialRobustError,
Scalar* finalRobustError,
Scalars* intermediateRobustErrors)
782 return optimizeObjectPointForFixedStereoPosesIF(anyCameraA, anyCameraB,
ConstArrayAccessor<HomogenousMatrix4>(flippedCamerasA_T_world),
ConstArrayAccessor<HomogenousMatrix4>(flippedCamerasB_T_world), worldObjectPoint, imagePointAccessorA, imagePointAccessorB, optimizedWorldObjectPoint, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, initialRobustError, finalRobustError, intermediateRobustErrors);
785inline bool NonLinearOptimizationObjectPoint::optimizeObjectPointsForFixedPoses(
const PinholeCamera& pinholeCamera,
const ConstIndexedAccessor<HomogenousMatrix4>& poseAccessor,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ObjectPointGroupsAccessor& correspondenceGroups,
const bool distortImagePoints,
NonconstIndexedAccessor<Vector3>& optimizedObjectPoints,
const unsigned int iterations,
const Estimator::EstimatorType estimator,
Scalar lambda,
const Scalar lambdaFactor,
const bool onlyFrontObjectPoints,
Worker* worker)
788 ocean_assert(objectPoints.
size() == correspondenceGroups.
groups());
790 ocean_assert(lambda >= 0);
791 ocean_assert(lambdaFactor >= 1);
794 invertedFlippedPoses.reserve(poseAccessor.
size());
796 for (
size_t n = 0; n < poseAccessor.
size(); ++n)
801 return optimizeObjectPointsForFixedPosesIF(pinholeCamera,
ConstArrayAccessor<HomogenousMatrix4>(invertedFlippedPoses), objectPoints, correspondenceGroups, distortImagePoints, optimizedObjectPoints, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, worker);
804inline bool NonLinearOptimizationObjectPoint::optimizeObjectPointForFixedOrientations(
const AnyCamera& camera,
const ConstIndexedAccessor<SquareMatrix3>& world_R_cameras,
const ConstIndexedAccessor<Vector2>& imagePoints,
const Vector3& objectPoint,
const Scalar objectPointDistance,
Vector3& optimizedObjectPoint,
const unsigned int iterations,
const Geometry::Estimator::EstimatorType estimator,
const Scalar lambda,
const Scalar lambdaFactor,
const bool onlyFrontObjectPoint,
Scalar* initialError,
Scalar* finalError,
Scalars* intermediateErrors)
807 flippedCameras_R_world.reserve(world_R_cameras.
size());
809 for (
size_t n = 0; n < world_R_cameras.
size(); ++n)
814 return optimizeObjectPointForFixedOrientationsIF(camera,
ConstArrayAccessor<SquareMatrix3>(flippedCameras_R_world), imagePoints, objectPoint, objectPointDistance, optimizedObjectPoint, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoint, initialError, finalError, intermediateErrors);
817inline bool NonLinearOptimizationObjectPoint::optimizeObjectPointsAndOnePose(
const AnyCamera& camera,
const HomogenousMatrix4& world_T_firstCamera,
const HomogenousMatrix4& world_T_secondCamera,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ConstIndexedAccessor<Vector2>& firstImagePoints,
const ConstIndexedAccessor<Vector2>& secondImagePoints,
HomogenousMatrix4* world_T_optimizedSecondCamera,
NonconstIndexedAccessor<Vector3>* optimizedObjectPoints,
const unsigned int iterations,
const Geometry::Estimator::EstimatorType estimator,
const Scalar lambda,
const Scalar lambdaFactor,
const bool onlyFrontObjectPoints,
Scalar* initialError,
Scalar* finalError,
Scalars* intermediateErrors,
const GravityConstraints* gravityConstraints)
822 if (!
optimizeObjectPointsAndOnePoseIF(camera, firstFlippedCamera_T_world, secondFlippedCamera_T_world, objectPoints, firstImagePoints, secondImagePoints, world_T_optimizedSecondCamera, optimizedObjectPoints, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, initialError, finalError, intermediateErrors, gravityConstraints))
827 if (world_T_optimizedSecondCamera !=
nullptr)
835inline bool NonLinearOptimizationObjectPoint::optimizeObjectPointsAndTwoPoses(
const PinholeCamera& pinholeCamera,
const HomogenousMatrix4& firstPose,
const HomogenousMatrix4& secondPose,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ConstIndexedAccessor<Vector2>& firstImagePoints,
const ConstIndexedAccessor<Vector2>& secondImagePoints,
const bool useDistortionParameters,
HomogenousMatrix4* optimizedFirstPose,
HomogenousMatrix4* optimizedSecondPose,
NonconstIndexedAccessor<Vector3>* optimizedObjectPoints,
const unsigned int iterations,
const Geometry::Estimator::EstimatorType estimator,
const Scalar lambda,
const Scalar lambdaFactor,
const bool onlyFrontObjectPoints,
Scalar* initialError,
Scalar* finalError,
const Matrix* invertedFirstCovariances,
const Matrix* invertedSecondCovariances,
Scalars* intermediateErrors)
840 if (!
optimizeObjectPointsAndTwoPosesIF(pinholeCamera, firstPoseIF, secondPoseIF, objectPoints, firstImagePoints, secondImagePoints, useDistortionParameters, optimizedFirstPose, optimizedSecondPose, optimizedObjectPoints, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, initialError, finalError, invertedFirstCovariances, invertedSecondCovariances, intermediateErrors))
845 if (optimizedFirstPose)
850 if (optimizedSecondPose)
858inline bool NonLinearOptimizationObjectPoint::optimizeObjectPointsAndPoses(
const AnyCamera& camera,
const ConstIndexedAccessor<HomogenousMatrix4>& world_T_cameras,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ObjectPointGroupsAccessor& correspondenceGroups,
NonconstIndexedAccessor<HomogenousMatrix4>* world_T_optimizedCameras,
NonconstIndexedAccessor<Vector3>* optimizedObjectPoints,
const unsigned int iterations,
const Geometry::Estimator::EstimatorType estimator,
const Scalar lambda,
const Scalar lambdaFactor,
const bool onlyFrontObjectPoints,
Scalar* initialError,
Scalar* finalError,
Scalars* intermediateErrors,
const GravityConstraints* gravityConstraints)
862 const AnyCamera* cameraPointer = &camera;
873 if (!
optimizeObjectPointsAndPosesIF(cameraAccessor,
ConstArrayAccessor<HomogenousMatrix4>(flippedCameras_T_world), objectPoints, correspondenceGroups, accessor_flippedOptimizedCameras_T_world.pointer(), optimizedObjectPoints, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, initialError, finalError, intermediateErrors, gravityConstraints))
878 if (world_T_optimizedCameras !=
nullptr)
880 for (
size_t n = 0; n < flippedOptimizedCameras_T_world.size(); ++n)
889inline bool NonLinearOptimizationObjectPoint::optimizeObjectPointsAndPosesIF(
const AnyCamera& camera,
const ConstIndexedAccessor<HomogenousMatrix4>& flippedCameras_T_world,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ObjectPointGroupsAccessor& correspondenceGroups,
NonconstIndexedAccessor<HomogenousMatrix4>* flippedOptimizedCameras_T_world,
NonconstIndexedAccessor<Vector3>* optimizedObjectPoints,
const unsigned int iterations,
const Geometry::Estimator::EstimatorType estimator,
const Scalar lambda,
const Scalar lambdaFactor,
const bool onlyFrontObjectPoints,
Scalar* initialError,
Scalar* finalError,
Scalars* intermediateErrors,
const GravityConstraints* gravityConstraints)
893 const AnyCamera* cameraPointer = &camera;
899 return optimizeObjectPointsAndPosesIF(cameraAccessor, flippedCameras_T_world, objectPoints, correspondenceGroups, flippedOptimizedCameras_T_world, optimizedObjectPoints, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, initialError, finalError, intermediateErrors, gravityConstraints);
902inline bool NonLinearOptimizationObjectPoint::slowOptimizeObjectPointsAndPoses(
const PinholeCamera& camera,
const ConstIndexedAccessor<HomogenousMatrix4>& poses,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ObjectPointGroupsAccessor& correspondenceGroups,
const bool useDistortionParameters,
NonconstIndexedAccessor<HomogenousMatrix4>* optimizedPoses,
NonconstIndexedAccessor<Vector3>* optimizedObjectPoints,
const unsigned int iterations,
const Geometry::Estimator::EstimatorType estimator,
const Scalar lambda,
const Scalar lambdaFactor,
const bool onlyFrontObjectPoints,
Scalar* initialError,
Scalar* finalError,
Scalars* intermediateErrors)
906 return slowOptimizeObjectPointsAndPoses(anyCameraPinhole, poses, objectPoints, correspondenceGroups, optimizedPoses, optimizedObjectPoints, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, initialError, finalError, intermediateErrors);
909inline bool NonLinearOptimizationObjectPoint::slowOptimizeObjectPointsAndPosesIF(
const PinholeCamera& camera,
const ConstIndexedAccessor<HomogenousMatrix4>& posesIF,
const ConstIndexedAccessor<Vector3>& objectPoints,
const ObjectPointGroupsAccessor& correspondenceGroups,
const bool useDistortionParameters,
NonconstIndexedAccessor<HomogenousMatrix4>* optimizedPosesIF,
NonconstIndexedAccessor<Vector3>* optimizedObjectPoints,
const unsigned int iterations,
const Geometry::Estimator::EstimatorType estimator,
const Scalar lambda,
const Scalar lambdaFactor,
const bool onlyFrontObjectPoints,
Scalar* initialError,
Scalar* finalError,
Scalars* intermediateErrors)
913 return slowOptimizeObjectPointsAndPosesIF(anyCameraPinhole, posesIF, objectPoints, correspondenceGroups, optimizedPosesIF, optimizedObjectPoints, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, initialError, finalError, intermediateErrors);
virtual size_t size() const =0
Returns the number of accessible elements of this accessor object.
bool isEmpty() const
Returns whether this accessor provides no elements.
Definition Accessor.h:1578
static std::vector< typename TAccessor::Type > accessor2elements(const TAccessor &accessor)
Returns all elements of a given accessor (as a block).
Definition Accessor.h:1584
This class implements the abstract base class for all AnyCamera objects.
Definition AnyCamera.h:130
This class implements a specialized AnyCamera object wrapping the actual camera model.
Definition AnyCamera.h:597
static HomogenousMatrixT4< U > standard2InvertedFlipped(const HomogenousMatrixT4< U > &world_T_camera)
Transforms a standard homogenous 4x4 viewing (extrinsic camera) matrix into an inverted and flipped c...
Definition Camera.h:734
static HomogenousMatrixT4< U > invertedFlipped2Standard(const HomogenousMatrixT4< U > &flippedCamera_T_world)
Transforms an inverted and flipped camera pose into a standard camera pose.
Definition Camera.h:757
This class implements an accessor providing direct access to a constant array of elements.
Definition Accessor.h:400
This class implements an accessor providing direct access to a constant array of elements while all e...
Definition Accessor.h:942
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 a container allowing to define gravity constraints during e....
Definition GravityConstraints.h:63
size_t groups() const
Returns the number of groups of this accessor.
Definition NonLinearOptimization.h:667
This class implements an abstract specialization of the accessor for groups of pairs for object point...
Definition NonLinearOptimization.h:158
This class implements the basic functions for least square or robust optimization algorithms for non ...
Definition NonLinearOptimization.h:33
Forward declaration of a highly optimized provider object allowing to optimize one camera pose and se...
Definition NonLinearOptimizationObjectPoint.h:101
Forward declaration of a highly optimized provider object allowing to optimize the orientations of se...
Definition NonLinearOptimizationObjectPoint.h:122
Forward declaration of a highly optimized provider object allowing to optimize several camera pose an...
Definition NonLinearOptimizationObjectPoint.h:114
This class implements least square or robust optimization algorithms optimizing the locations of 3D o...
Definition NonLinearOptimizationObjectPoint.h:33
static bool optimizeObjectPointsForFixedPoses(const PinholeCamera &pinholeCamera, const ConstIndexedAccessor< HomogenousMatrix4 > &poseAccessor, const ConstIndexedAccessor< Vector3 > &objectPoints, const ObjectPointGroupsAccessor &correspondenceGroups, const bool distortImagePoints, NonconstIndexedAccessor< Vector3 > &optimizedObjectPoints, const unsigned int iterations=5u, const Estimator::EstimatorType estimator=Estimator::ET_SQUARE, Scalar lambda=Scalar(0.001), const Scalar lambdaFactor=10, const bool onlyFrontObjectPoints=true, Worker *worker=nullptr)
Minimizes the projection errors of given 3D object points, visible in several individual (fixed) came...
Definition NonLinearOptimizationObjectPoint.h:785
static bool optimizeObjectPointsAndOrientationalPosesIF(const ConstIndexedAccessor< const AnyCamera * > &cameras, const ConstIndexedAccessor< HomogenousMatrix4 > &flippedCameras_T_world, const ConstIndexedAccessor< Vector3 > &objectPoints, const ObjectPointGroupsAccessor &correspondenceGroups, NonconstIndexedAccessor< HomogenousMatrix4 > *flippedOptimizedCameras_T_world, 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 locations of 3D object points visible in individual (inverted and flipped) camera poses...
std::vector< StaticMatrix6x6 > StaticMatrices6x6
Definition of a vector holding 6x6 matrices.
Definition NonLinearOptimizationObjectPoint.h:69
static bool optimizeObjectPointForFixedOrientationsIF(const AnyCamera &camera, const ConstIndexedAccessor< SquareMatrix3 > &flippedCameras_R_world, const ConstIndexedAccessor< Vector2 > &imagePoints, const Vector3 &objectPoint, const Scalar objectPointDistance, Vector3 &optimizedObjectPoint, 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 onlyFrontObjectPoint=true, Scalar *initialError=nullptr, Scalar *finalError=nullptr, Scalars *intermediateErrors=nullptr)
Optimizes the locations of one 3D object point visible in individual (fixed) camera poses all located...
static bool optimizeObjectPointsAndOnePose(const AnyCamera &camera, const HomogenousMatrix4 &world_T_firstCamera, const HomogenousMatrix4 &world_T_secondCamera, const ConstIndexedAccessor< Vector3 > &objectPoints, const ConstIndexedAccessor< Vector2 > &firstImagePoints, const ConstIndexedAccessor< Vector2 > &secondImagePoints, HomogenousMatrix4 *world_T_optimizedSecondCamera, 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, const GravityConstraints *gravityConstraints=nullptr)
Optimizes the locations of 3D object points visible in two individual camera poses by minimizing the ...
Definition NonLinearOptimizationObjectPoint.h:817
static bool slowOptimizeObjectPointsAndPosesIF(const AnyCamera &camera, const ConstIndexedAccessor< HomogenousMatrix4 > &flippedCameras_T_world, const ConstIndexedAccessor< Vector3 > &objectPoints, const ObjectPointGroupsAccessor &correspondenceGroups, NonconstIndexedAccessor< HomogenousMatrix4 > *flippedOptimizedCameras_T_world, 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)
This function is a slow implementation and has been replaced by a faster implementation.
std::vector< StaticMatrix6x3 > StaticMatrices6x3
Definition of a vector holding 6x3 matrices.
Definition NonLinearOptimizationObjectPoint.h:64
static bool optimizeObjectPointsAndTwoPoses(const PinholeCamera &pinholeCamera, const HomogenousMatrix4 &firstPose, const HomogenousMatrix4 &secondPose, const ConstIndexedAccessor< Vector3 > &objectPoints, const ConstIndexedAccessor< Vector2 > &firstImagePoints, const ConstIndexedAccessor< Vector2 > &secondImagePoints, const bool useDistortionParameters, HomogenousMatrix4 *optimizedFirstPose, HomogenousMatrix4 *optimizedSecondPose, NonconstIndexedAccessor< Vector3 > *optimizedObjectPoints, 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, const Matrix *invertedFirstCovariances=nullptr, const Matrix *invertedSecondCovariances=nullptr, Scalars *intermediateErrors=nullptr)
Optimizes the locations of 3D object points visible in two individual camera poses by minimizing the ...
Definition NonLinearOptimizationObjectPoint.h:835
static bool optimizeObjectPointsAndOnePoseIF(const AnyCamera &camera, const HomogenousMatrix4 &firstFlippedCamera_T_world, const HomogenousMatrix4 &secondFlippedCamera_T_world, const ConstIndexedAccessor< Vector3 > &objectPoints, const ConstIndexedAccessor< Vector2 > &firstImagePoints, const ConstIndexedAccessor< Vector2 > &secondImagePoints, HomogenousMatrix4 *optimizedSecondFlippedCamera_T_world, 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, const GravityConstraints *gravityConstraints=nullptr)
Optimizes the locations of 3D object points visible in two individual (inverted and flipped) camera p...
static bool optimizeObjectPointForFixedStereoPoses(const AnyCamera &anyCameraA, const AnyCamera &anyCameraB, const ConstIndexedAccessor< HomogenousMatrix4 > &world_T_camerasA, const ConstIndexedAccessor< HomogenousMatrix4 > &world_T_camerasB, const Vector3 &worldObjectPoint, const ConstIndexedAccessor< Vector2 > &imagePointAccessorA, const ConstIndexedAccessor< Vector2 > &imagePointAccessorB, Vector3 &optimizedWorldObjectPoint, const unsigned int iterations=5u, const Estimator::EstimatorType estimator=Estimator::ET_SQUARE, Scalar lambda=Scalar(0.001), const Scalar lambdaFactor=10, const bool onlyFrontObjectPoints=true, Scalar *initialRobustError=nullptr, Scalar *finalRobustError=nullptr, Scalars *intermediateRobustErrors=nullptr)
Minimizes the projection errors for one given 3D object point, visible in several individual (fixed) ...
Definition NonLinearOptimizationObjectPoint.h:777
static bool optimizeObjectPointForFixedStereoPosesIF(const AnyCamera &anyCameraA, const AnyCamera &anyCameraB, const ConstIndexedAccessor< HomogenousMatrix4 > &flippedCamerasA_T_world, const ConstIndexedAccessor< HomogenousMatrix4 > &flippedCamerasB_T_world, const Vector3 &worldObjectPoint, const ConstIndexedAccessor< Vector2 > &imagePointAccessorA, const ConstIndexedAccessor< Vector2 > &imagePointAccessorB, Vector3 &optimizedWorldObjectPoint, const unsigned int iterations=5u, const Estimator::EstimatorType estimator=Estimator::ET_SQUARE, Scalar lambda=Scalar(0.001), const Scalar lambdaFactor=10, const bool onlyFrontObjectPoints=true, Scalar *initialRobustError=nullptr, Scalar *finalRobustError=nullptr, Scalars *intermediateRobustErrors=nullptr)
Minimizes the projection errors for one given 3D object point, visible in several individual (fixed) ...
static bool optimizeObjectPointsAndPosesIF(const ConstIndexedAccessor< const AnyCamera * > &cameras, const ConstIndexedAccessor< HomogenousMatrix4 > &flippedCameras_T_world, const ConstIndexedAccessor< Vector3 > &objectPoints, const ObjectPointGroupsAccessor &correspondenceGroups, NonconstIndexedAccessor< HomogenousMatrix4 > *flippedOptimizedCameras_T_world, 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, const GravityConstraints *gravityConstraints=nullptr)
Optimizes the locations of 3D object points visible in individual (inverted and flipped) camera poses...
static bool optimizeObjectPointsForFixedPosesIF(const PinholeCamera &pinholeCamera, const ConstIndexedAccessor< HomogenousMatrix4 > &invertedFlippedPoses, const ConstIndexedAccessor< Vector3 > &objectPoints, const ObjectPointGroupsAccessor &correspondenceGroups, const bool distortImagePoints, NonconstIndexedAccessor< Vector3 > &optimizedObjectPoints, const unsigned int iterations=5u, const Estimator::EstimatorType estimator=Estimator::ET_SQUARE, Scalar lambda=Scalar(0.001), const Scalar lambdaFactor=10, const bool onlyFrontObjectPoints=true, Worker *worker=nullptr)
Minimizes the projection errors of given 3D object points, visible in several individual (fixed) came...
static bool optimizeObjectPointsAndOrientations(const PinholeCamera &pinholeCamera, const ConstIndexedAccessor< SquareMatrix3 > &orientations, const ConstIndexedAccessor< Vector3 > &objectPoints, const ObjectPointGroupsAccessor &correspondenceGroups, const Scalar objectPointDistance, NonconstIndexedAccessor< SquareMatrix3 > *optimizedOrientations, 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 locations of 3D object points visible in individual camera poses all located at the ori...
static bool optimizeObjectPointsAndTwoPosesIF(const PinholeCamera &pinholeCamera, const HomogenousMatrix4 &firstPoseIF, const HomogenousMatrix4 &secondPoseIF, const ConstIndexedAccessor< Vector3 > &objectPoints, const ConstIndexedAccessor< Vector2 > &firstImagePoints, const ConstIndexedAccessor< Vector2 > &secondImagePoints, const bool useDistortionParameters, HomogenousMatrix4 *optimizedFirstPoseIF, HomogenousMatrix4 *optimizedSecondPoseIF, NonconstIndexedAccessor< Vector3 > *optimizedObjectPoints, 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, const Matrix *invertedFirstCovariances=nullptr, const Matrix *invertedSecondCovariances=nullptr, Scalars *intermediateErrors=nullptr)
Optimizes the locations of 3D object points visible in two individual (inverted and flipped) camera p...
static bool optimizeObjectPointForFixedPosesIF(const AnyCamera &camera, const ConstIndexedAccessor< HomogenousMatrix4 > &flippedCameras_T_world, const Vector3 &worldObjectPoint, const ConstIndexedAccessor< Vector2 > &imagePoints, Vector3 &optimizedWorldObjectPoint, const unsigned int iterations=5u, const Estimator::EstimatorType estimator=Estimator::ET_SQUARE, Scalar lambda=Scalar(0.001), const Scalar lambdaFactor=10, const bool onlyFrontObjectPoints=true, Scalar *initialRobustError=nullptr, Scalar *finalRobustError=nullptr, Scalars *intermediateRobustErrors=nullptr)
Minimizes the projection errors for one given 3D object point, visible in several individual (fixed) ...
static bool slowOptimizeObjectPointsAndPoses(const AnyCamera &camera, const ConstIndexedAccessor< HomogenousMatrix4 > &world_T_cameras, const ConstIndexedAccessor< Vector3 > &objectPoints, const ObjectPointGroupsAccessor &correspondenceGroups, 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)
This function is a slow implementation and has been replaced by a faster implementation.
static bool optimizeObjectPointForFixedPoses(const AnyCamera &camera, const ConstIndexedAccessor< HomogenousMatrix4 > &world_T_cameras, const Vector3 &worldObjectPoint, const ConstIndexedAccessor< Vector2 > &imagePoints, Vector3 &optimizedWorldObjectPoint, const unsigned int iterations=5u, const Estimator::EstimatorType estimator=Estimator::ET_SQUARE, Scalar lambda=Scalar(0.001), const Scalar lambdaFactor=10, const bool onlyFrontObjectPoints=true, Scalar *initialRobustError=nullptr, Scalar *finalRobustError=nullptr, Scalars *intermediateRobustErrors=nullptr)
Minimizes the projection errors for one given 3D object point, visible in several individual (fixed) ...
Definition NonLinearOptimizationObjectPoint.h:763
static bool optimizeObjectPointsAndPoses(const ConstIndexedAccessor< const AnyCamera * > &cameras, const ConstIndexedAccessor< HomogenousMatrix4 > &world_T_cameras, const ConstIndexedAccessor< Vector3 > &objectPoints, const ObjectPointGroupsAccessor &correspondenceGroups, 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 locations of 3D object points visible in individual camera poses by minimizing the proj...
static bool optimizeObjectPointsAndPosesIF(const AnyCamera &camera, const ConstIndexedAccessor< HomogenousMatrix4 > &flippedCameras_T_world, const ConstIndexedAccessor< Vector3 > &objectPoints, const ObjectPointGroupsAccessor &correspondenceGroups, NonconstIndexedAccessor< HomogenousMatrix4 > *flippedOptimizedCameras_T_world, 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, const GravityConstraints *gravityConstraints=nullptr)
Optimizes the locations of 3D object points visible in individual (inverted and flipped) camera poses...
Definition NonLinearOptimizationObjectPoint.h:889
static bool optimizeObjectPointForFixedPosesIF(const ConstIndexedAccessor< const AnyCamera * > &cameras, const ConstIndexedAccessor< HomogenousMatrix4 > &flippedCameras_T_world, const Vector3 &worldObjectPoint, const ConstIndexedAccessor< Vector2 > &imagePoints, Vector3 &optimizedWorldObjectPoint, const unsigned int iterations=5u, const Estimator::EstimatorType estimator=Estimator::ET_SQUARE, Scalar lambda=Scalar(0.001), const Scalar lambdaFactor=10, const bool onlyFrontObjectPoints=true, Scalar *initialRobustError=nullptr, Scalar *finalRobustError=nullptr, Scalars *intermediateRobustErrors=nullptr)
Minimizes the projection errors for one given 3D object point, visible in several individual (fixed) ...
static bool optimizeObjectPointsAndOrientationalPoses(const ConstIndexedAccessor< const AnyCamera * > &cameras, const ConstIndexedAccessor< HomogenousMatrix4 > &world_T_cameras, const ConstIndexedAccessor< Vector3 > &objectPoints, const ObjectPointGroupsAccessor &correspondenceGroups, 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 locations of 3D object points visible in individual camera poses by minimizing the proj...
static bool optimizeObjectPointForFixedOrientations(const AnyCamera &camera, const ConstIndexedAccessor< SquareMatrix3 > &world_R_cameras, const ConstIndexedAccessor< Vector2 > &imagePoints, const Vector3 &objectPoint, const Scalar objectPointDistance, Vector3 &optimizedObjectPoint, 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 onlyFrontObjectPoint=true, Scalar *initialError=nullptr, Scalar *finalError=nullptr, Scalars *intermediateErrors=nullptr)
Optimizes the locations of one 3D object point visible in individual (fixed) camera poses all located...
Definition NonLinearOptimizationObjectPoint.h:804
std::vector< StaticMatrix3x3 > StaticMatrices3x3
Definition of a vector holding 3x3 matrices.
Definition NonLinearOptimizationObjectPoint.h:59
static bool optimizeObjectPointsAndPoses(const AnyCamera &camera, const ConstIndexedAccessor< HomogenousMatrix4 > &world_T_cameras, const ConstIndexedAccessor< Vector3 > &objectPoints, const ObjectPointGroupsAccessor &correspondenceGroups, 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, const GravityConstraints *gravityConstraints=nullptr)
Optimizes the locations of 3D object points visible in individual camera poses by minimizing the proj...
Definition NonLinearOptimizationObjectPoint.h:858
static void optimizeObjectPointsForFixedPosesIFSubset(const PinholeCamera *pinholeCamera, const ConstIndexedAccessor< HomogenousMatrix4 > *invertedFlippedPoses, const ConstIndexedAccessor< Vector3 > *objectPoints, const ObjectPointGroupsAccessor *correspondenceGroups, const bool distortImagePoints, NonconstIndexedAccessor< Vector3 > *optimizedObjectPoints, const unsigned int iterations, const Estimator::EstimatorType estimator, Scalar lambda, const Scalar lambdaFactor, const bool onlyFrontObjectPoints, const unsigned int firstObjectPoint, const unsigned int numberObjectPoints)
Minimizes the projection errors of a subset of given 3D object points, visible in several individual ...
This class implements an accessor providing direct access to an array of elements.
Definition Accessor.h:707
This class implements a base class for all indexed-based accessors allowing a non-constant reference ...
Definition Accessor.h:284
This class implements a matrix with static dimensions.
Definition StaticMatrix.h:34
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::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:72
PinholeCameraT< Scalar > PinholeCamera
Definition of an pinhole camera object with Scalar precision.
Definition PinholeCamera.h:39
The namespace covering the entire Ocean framework.
Definition Accessor.h:15