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);
509 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,
const bool applyAbsolutePoseAlignment =
false);
535 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,
const bool applyAbsolutePoseAlignment =
false);
560 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,
const bool applyAbsolutePoseAlignment =
false);
586 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,
const bool applyAbsolutePoseAlignment =
false);
611 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);
636 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);
663 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);
688 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);
716 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);
744 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);
764 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);
767inline 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)
771 return optimizeObjectPointForFixedPosesIF(anyCamera,
ConstArrayAccessor<HomogenousMatrix4>(flippedCameras_T_world), worldObjectPoint, imagePoints, optimizedWorldObjectPoint, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, initialRobustError, finalRobustError, intermediateRobustErrors);
774inline 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)
778 return optimizeObjectPointForFixedPosesIF(cameras,
ConstArrayAccessor<HomogenousMatrix4>(flippedCameras_T_world), worldObjectPoint, imagePoints, optimizedWorldObjectPoint, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, initialRobustError, finalRobustError, intermediateRobustErrors);
781inline 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)
786 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);
789inline 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)
792 ocean_assert(objectPoints.
size() == correspondenceGroups.
groups());
794 ocean_assert(lambda >= 0);
795 ocean_assert(lambdaFactor >= 1);
798 invertedFlippedPoses.reserve(poseAccessor.
size());
800 for (
size_t n = 0; n < poseAccessor.
size(); ++n)
805 return optimizeObjectPointsForFixedPosesIF(pinholeCamera,
ConstArrayAccessor<HomogenousMatrix4>(invertedFlippedPoses), objectPoints, correspondenceGroups, distortImagePoints, optimizedObjectPoints, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, worker);
808inline 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)
811 flippedCameras_R_world.reserve(world_R_cameras.
size());
813 for (
size_t n = 0; n < world_R_cameras.
size(); ++n)
818 return optimizeObjectPointForFixedOrientationsIF(camera,
ConstArrayAccessor<SquareMatrix3>(flippedCameras_R_world), imagePoints, objectPoint, objectPointDistance, optimizedObjectPoint, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoint, initialError, finalError, intermediateErrors);
821inline 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)
826 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))
831 if (world_T_optimizedSecondCamera !=
nullptr)
839inline 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)
844 if (!
optimizeObjectPointsAndTwoPosesIF(pinholeCamera, firstPoseIF, secondPoseIF, objectPoints, firstImagePoints, secondImagePoints, useDistortionParameters, optimizedFirstPose, optimizedSecondPose, optimizedObjectPoints, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, initialError, finalError, invertedFirstCovariances, invertedSecondCovariances, intermediateErrors))
849 if (optimizedFirstPose)
854 if (optimizedSecondPose)
862inline 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,
const bool applyAbsolutePoseAlignment)
866 const AnyCamera* cameraPointer = &camera;
877 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, applyAbsolutePoseAlignment))
882 if (world_T_optimizedCameras !=
nullptr)
884 for (
size_t n = 0; n < flippedOptimizedCameras_T_world.size(); ++n)
893inline 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,
const bool applyAbsolutePoseAlignment)
897 const AnyCamera* cameraPointer = &camera;
903 return optimizeObjectPointsAndPosesIF(cameraAccessor, flippedCameras_T_world, objectPoints, correspondenceGroups, flippedOptimizedCameras_T_world, optimizedObjectPoints, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, initialError, finalError, intermediateErrors, gravityConstraints, applyAbsolutePoseAlignment);
906inline 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)
910 return slowOptimizeObjectPointsAndPoses(anyCameraPinhole, poses, objectPoints, correspondenceGroups, optimizedPoses, optimizedObjectPoints, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, initialError, finalError, intermediateErrors);
913inline 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)
917 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:131
This class implements a specialized AnyCamera object wrapping the actual camera model.
Definition AnyCamera.h:630
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:778
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:801
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:789
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:821
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:839
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:781
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 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 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, const bool applyAbsolutePoseAlignment=false)
Optimizes the locations of 3D object points visible in individual camera poses by minimizing the proj...
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, const bool applyAbsolutePoseAlignment=false)
Optimizes the locations of 3D object points visible in individual camera poses by minimizing the proj...
Definition NonLinearOptimizationObjectPoint.h:862
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:767
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, const bool applyAbsolutePoseAlignment=false)
Optimizes the locations of 3D object points visible in individual (inverted and flipped) camera poses...
Definition NonLinearOptimizationObjectPoint.h:893
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:808
std::vector< StaticMatrix3x3 > StaticMatrices3x3
Definition of a vector holding 3x3 matrices.
Definition NonLinearOptimizationObjectPoint.h:59
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, const bool applyAbsolutePoseAlignment=false)
Optimizes the locations of 3D object points visible in individual (inverted and flipped) camera poses...
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
PinholeCameraT< Scalar > PinholeCamera
Definition of an pinhole camera object with Scalar precision.
Definition PinholeCamera.h:39
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< SquareMatrix3 > SquareMatrices3
Definition of a vector holding SquareMatrix3 objects.
Definition SquareMatrix3.h:72
std::vector< Scalar > Scalars
Definition of a vector holding Scalar objects.
Definition Math.h:145
The namespace covering the entire Ocean framework.
Definition Accessor.h:15