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);
712 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);
737 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);
765 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);
793 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);
813 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);
816inline 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)
820 return optimizeObjectPointForFixedPosesIF(anyCamera,
ConstArrayAccessor<HomogenousMatrix4>(flippedCameras_T_world), worldObjectPoint, imagePoints, optimizedWorldObjectPoint, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, initialRobustError, finalRobustError, intermediateRobustErrors);
823inline 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)
827 return optimizeObjectPointForFixedPosesIF(cameras,
ConstArrayAccessor<HomogenousMatrix4>(flippedCameras_T_world), worldObjectPoint, imagePoints, optimizedWorldObjectPoint, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, initialRobustError, finalRobustError, intermediateRobustErrors);
830inline 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)
835 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);
838inline 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)
841 ocean_assert(objectPoints.
size() == correspondenceGroups.
groups());
843 ocean_assert(lambda >= 0);
844 ocean_assert(lambdaFactor >= 1);
847 invertedFlippedPoses.reserve(poseAccessor.
size());
849 for (
size_t n = 0; n < poseAccessor.
size(); ++n)
854 return optimizeObjectPointsForFixedPosesIF(pinholeCamera,
ConstArrayAccessor<HomogenousMatrix4>(invertedFlippedPoses), objectPoints, correspondenceGroups, distortImagePoints, optimizedObjectPoints, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, worker);
857inline 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)
860 flippedCameras_R_world.reserve(world_R_cameras.
size());
862 for (
size_t n = 0; n < world_R_cameras.
size(); ++n)
867 return optimizeObjectPointForFixedOrientationsIF(camera,
ConstArrayAccessor<SquareMatrix3>(flippedCameras_R_world), imagePoints, objectPoint, objectPointDistance, optimizedObjectPoint, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoint, initialError, finalError, intermediateErrors);
870inline 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)
875 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))
880 if (world_T_optimizedSecondCamera !=
nullptr)
888inline 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)
893 if (!
optimizeObjectPointsAndTwoPosesIF(pinholeCamera, firstPoseIF, secondPoseIF, objectPoints, firstImagePoints, secondImagePoints, useDistortionParameters, optimizedFirstPose, optimizedSecondPose, optimizedObjectPoints, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, initialError, finalError, invertedFirstCovariances, invertedSecondCovariances, intermediateErrors))
898 if (optimizedFirstPose)
903 if (optimizedSecondPose)
911inline 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)
915 const AnyCamera* cameraPointer = &camera;
926 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))
931 if (world_T_optimizedCameras !=
nullptr)
933 for (
size_t n = 0; n < flippedOptimizedCameras_T_world.size(); ++n)
942inline 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)
946 const AnyCamera* cameraPointer = &camera;
952 return optimizeObjectPointsAndPosesIF(cameraAccessor, flippedCameras_T_world, objectPoints, correspondenceGroups, flippedOptimizedCameras_T_world, optimizedObjectPoints, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, initialError, finalError, intermediateErrors, gravityConstraints, applyAbsolutePoseAlignment);
955inline 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)
959 return slowOptimizeObjectPointsAndPoses(anyCameraPinhole, poses, objectPoints, correspondenceGroups, optimizedPoses, optimizedObjectPoints, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, initialError, finalError, intermediateErrors);
962inline 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)
966 return slowOptimizeObjectPointsAndPosesIF(anyCameraPinhole, posesIF, objectPoints, correspondenceGroups, optimizedPosesIF, optimizedObjectPoints, iterations, estimator, lambda, lambdaFactor, onlyFrontObjectPoints, initialError, finalError, intermediateErrors);
971 return clampDistantObjectPoints(world_T_cameras.data(), world_T_cameras.size(), objectPoints.data(), objectPoints.size(), maximalDistanceFactor);
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:838
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 size_t clampDistantObjectPoints(const HomogenousMatrix4 *world_T_cameras, const size_t numberCameras, Vector3 *objectPoints, const size_t numberObjectPoints, const Scalar maximalDistanceFactor)
Clamps object points that are too far from the camera baseline.
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:870
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:888
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 size_t clampDistantObjectPoints(const Box3 &cameraBoundingBox, Vector3 *objectPoints, const size_t numberObjectPoints, const Scalar maximalDistanceFactor)
Clamps object points that are too far from a given bounding box.
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:830
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:911
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 size_t clampDistantObjectPointsIF(const HomogenousMatrix4 *flippedCameras_T_world, const size_t numberCameras, Vector3 *objectPoints, const size_t numberObjectPoints, const Scalar maximalDistanceFactor)
Clamps object points that are too far from the camera baseline.
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:816
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:942
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:857
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< Vector3 > Vectors3
Definition of a vector holding Vector3 objects.
Definition Vector3.h:65
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