8#ifndef META_OCEAN_CV_CALIBRATION_CAMERA_CALIBRATOR_H
9#define META_OCEAN_CV_CALIBRATION_CAMERA_CALIBRATOR_H
77 inline Scalar minFovX()
const;
83 inline Scalar maxFovX()
const;
91 Scalar minFovX_ = Numeric::deg2rad(20);
94 Scalar maxFovX_ = Numeric::deg2rad(175);
120 IR_BOARD_WAS_DETECTED
181 inline bool hasObservations()
const;
316 Scalar cameraProjectionError_ = Numeric::maxValue();
325 anyCameraType_(anyCameraType)
331 anyCameraType_(anyCameraType),
340 return anyCameraType_;
345 ocean_assert(minFovX_ <= maxFovX_);
351 ocean_assert(minFovX_ <= maxFovX_);
367 if (projectionError !=
nullptr)
This class implements the abstract base class for all AnyCamera objects.
Definition AnyCamera.h:130
std::vector< ObjectPointId > ObjectPointIds
Definition of a vector holding object point ids.
Definition CalibrationBoard.h:219
This class implements an observation of a calibration board.
Definition CalibrationBoardObservation.h:45
This class holds the properties of the initial camera used during the calibration.
Definition CameraCalibrator.h:45
Scalar maxFovX() const
Returns the maximal horizontal field of view of the initial camera.
Definition CameraCalibrator.h:349
AnyCameraType anyCameraType() const
Returns the type of the initial camera to be used.
Definition CameraCalibrator.h:338
Scalar minFovX() const
Returns the minimal horizontal field of view of the initial camera.
Definition CameraCalibrator.h:343
InitialCameraProperties()
Creates initial camera properties with default parameters.
Definition CameraCalibrator.h:319
This class implements a camera calibrator using a couple of images of a calibration board.
Definition CameraCalibrator.h:38
size_t numberCorrespondences() const
Returns the overall number of correspondences which have been gathered so far.
CalibrationStage calibrationStage() const
Returns the current calibration stage.
Definition CameraCalibrator.h:355
CameraCalibrator()=default
Default constructor creating an invalid camera calibrator.
SharedAnyCamera optimizeCamera(const AnyCamera &camera, const HomogenousMatrix4 &board_T_camera, const Points &points, const Indices32 &validMarkerCandidateIndices, const OptimizationStrategy optimizationStrategy, HomogenousMatrix4 *board_T_optimizedCamera=nullptr, const Geometry::Estimator::EstimatorType estimatorType=Geometry::Estimator::ET_SQUARE, Scalar *initialError=nullptr, Scalar *finalError=nullptr) const
Optimizes the camera profile based on all marker points from known valid marker candidates with known...
ImageResult handleImage(const size_t imageId, const Frame &frame, Worker *worker=nullptr)
Handles a new image.
CalibrationStage calibrationStage_
The current calibration stage.
Definition CameraCalibrator.h:286
InitialCameraProperties initialCameraProperties_
The initial camera properties which can be used to jump start the calibration.
Definition CameraCalibrator.h:292
const MetricCalibrationBoard & metricCalibrationBoard() const
Returns the metric calibration board of this calibrator.
Definition CameraCalibrator.h:360
Frame yFrame_
The current frame with pixel format FORMAT_Y8.
Definition CameraCalibrator.h:295
SharedAnyCamera camera_
The final camera profile.
Definition CameraCalibrator.h:313
ImageResult
Definition of individual image results.
Definition CameraCalibrator.h:114
@ IR_BOARD_WAS_NOT_DETECTED
The image was handled but the calibration board was not detected.
Definition CameraCalibrator.h:118
CameraCalibrator(const MetricCalibrationBoard &metricCalibrationBoard, const InitialCameraProperties &initialCameraProperties=InitialCameraProperties())
Creates a new camera calibrator.
bool determineInitialPoseWithValidMarkerCandidates(const AnyCamera &camera, const Points &points, HomogenousMatrix4 &board_T_camera, Indices32 &usedMarkerCandidateIndices) const
Determines the initial camera pose based on marker candidates with known marker coordinate.
bool determineAdditionalCorrespondences(const MetricCalibrationBoard &calibrationBoard, const CalibrationBoardObservation &observation, const Points &points, const Geometry::SpatialDistribution::DistributionArray &pointsDistributionArray, CalibrationBoard::ObjectPointIds &additionalObjectPointIds, Vectors3 &additionalObjectPoints, Vectors2 &additionalImagePoints, const Scalar maximalProjectionError)
Determines additional 2D/3D correspondences for a valid observation of a calibration board which has ...
PointDetector pointDetector_
The point detector which is used to detect the marker points of the calibration board.
Definition CameraCalibrator.h:298
CalibrationBoardObservations observations_
The observations which have been made so far.
Definition CameraCalibrator.h:310
static SharedAnyCamera determineInitialCameraFieldOfView(const unsigned int width, const unsigned int height, const Points &points, const MarkerCandidates &markerCandidates, const InitialCameraProperties &initialCameraProperties)
Determines the initial field of view of the camera for a single image of a calibration board.
RandomGenerator randomGenerator_
The random generator to be used.
Definition CameraCalibrator.h:304
bool optimizeCameraPoseWithAdditionalPointsFromMarkerCandidates(const AnyCamera &camera, const HomogenousMatrix4 &board_T_camera, const Points &points, const Geometry::SpatialDistribution::DistributionArray &pointsDistributionArray, const Indices32 &validMarkerCandidateIndices, const Scalar maximalProjectionError, HomogenousMatrix4 &board_T_optimizedCamera, CalibrationBoard::ObjectPointIds &objectPointIds, Vectors3 &objectPoints, Vectors2 &imagePoints) const
Optimizes the camera pose using known valid marker candidates with known marker coordinates and itera...
CalibrationStage
Definition of individual calibration stages, TODO not yet used.
Definition CameraCalibrator.h:101
@ CS_DETERMINE_INITIAL_CAMERA_FOV
The calibration stage is determining the initial camera field of view.
Definition CameraCalibrator.h:105
Frame reusableMarkerCoordinateUsageFrame_
Reusable frame object to avoid memory re-allocations.
Definition CameraCalibrator.h:307
Scalar cameraProjectionError_
The resulting projection error of the final camera profile, with range [0, infinity)
Definition CameraCalibrator.h:316
SharedAnyCamera camera(Scalar *projectionError=nullptr) const
Returns the calibrator's current camera profile.
Definition CameraCalibrator.h:365
const CalibrationBoardObservation & latestObservation() const
Returns the latest observation which has been made.
Definition CameraCalibrator.h:385
const CalibrationBoardObservations & observations() const
Returns all observations which have been made so far.
Definition CameraCalibrator.h:380
bool hasObservations() const
Returns whether this calibrator holds at least one valid observation.
Definition CameraCalibrator.h:375
MetricCalibrationBoard metricCalibrationBoard_
The metric calibration board which is used for calibration.
Definition CameraCalibrator.h:289
static SharedAnyCamera determinePreciseCamera(const CalibrationBoardObservation *observations, const size_t numberObservations, const OptimizationStrategy optimizationStrategy, HomogenousMatrices4 *board_T_optimizedCameras=nullptr, const Geometry::Estimator::EstimatorType estimatorType=Geometry::Estimator::ET_SQUARE, Scalar *initialError=nullptr, Scalar *finalError=nullptr)
Determines the precise camera profile based on several observations of a calibration board.
bool finalize()
Finalizes the calibration and determines the precise camera profile.
MarkerCandidates markerCandidates_
The marker candidates which have been detected in the current image.
Definition CameraCalibrator.h:301
This class extends the calibration board with metric information.
Definition MetricCalibrationBoard.h:39
This class implements a point detector for marker points.
Definition PointDetector.h:39
This class implements Ocean's image class.
Definition Frame.h:1808
EstimatorType
Definition of individual robust estimator types.
Definition Estimator.h:34
OptimizationStrategy
Definition of individual optimization strategies for how the camera parameters can be optimized.
Definition NonLinearOptimizationCamera.h:37
This class implements a distribution array.
Definition SpatialDistribution.h:228
This class implements a generator for random numbers.
Definition RandomGenerator.h:42
This class implements a worker able to distribute function calls over different threads.
Definition Worker.h:33
std::vector< Index32 > Indices32
Definition of a vector holding 32 bit index values.
Definition Base.h:96
std::vector< Point > Points
Definition of a vector holding points.
Definition cv/calibration/Point.h:31
std::vector< MarkerCandidate > MarkerCandidates
Definition of a vector holding marker candidates.
Definition MarkerCandidate.h:33
std::vector< CalibrationBoardObservation > CalibrationBoardObservations
Definition of a vector holding CalibrationBoardObservation objects.
Definition CalibrationBoardObservation.h:37
float Scalar
Definition of a scalar type.
Definition Math.h:129
std::vector< HomogenousMatrix4 > HomogenousMatrices4
Definition of a vector holding HomogenousMatrix4 objects.
Definition HomogenousMatrix4.h:73
std::shared_ptr< AnyCamera > SharedAnyCamera
Definition of a shared pointer holding an AnyCamera object with Scalar precision.
Definition AnyCamera.h:60
std::vector< Vector2 > Vectors2
Definition of a vector holding Vector2 objects.
Definition Vector2.h:64
AnyCameraType
Definition of individual camera types.
Definition AnyCamera.h:111
std::vector< Vector3 > Vectors3
Definition of a vector holding Vector3 objects.
Definition Vector3.h:65
The namespace covering the entire Ocean framework.
Definition Accessor.h:15