Program Listing for File stereo_camera_model.h
↰ Return to documentation for file (/tmp/ws/src/vision_opencv/image_geometry/include/image_geometry/stereo_camera_model.h
)
#ifndef IMAGE_GEOMETRY__STEREO_CAMERA_MODEL_H
#define IMAGE_GEOMETRY__STEREO_CAMERA_MODEL_H
#include "image_geometry/pinhole_camera_model.h"
#include "image_geometry/visibility_control.hpp"
namespace image_geometry {
class StereoCameraModel
{
public:
IMAGE_GEOMETRY_PUBLIC
StereoCameraModel();
IMAGE_GEOMETRY_PUBLIC
StereoCameraModel(const StereoCameraModel& other);
IMAGE_GEOMETRY_PUBLIC
StereoCameraModel& operator=(const StereoCameraModel& other);
IMAGE_GEOMETRY_PUBLIC
bool fromCameraInfo(const sensor_msgs::msg::CameraInfo& left,
const sensor_msgs::msg::CameraInfo& right);
IMAGE_GEOMETRY_PUBLIC
bool fromCameraInfo(const sensor_msgs::msg::CameraInfo::ConstSharedPtr& left,
const sensor_msgs::msg::CameraInfo::ConstSharedPtr& right);
IMAGE_GEOMETRY_PUBLIC
const PinholeCameraModel& left() const;
IMAGE_GEOMETRY_PUBLIC
const PinholeCameraModel& right() const;
IMAGE_GEOMETRY_PUBLIC
std::string tfFrame() const;
IMAGE_GEOMETRY_PUBLIC
void projectDisparityTo3d(const cv::Point2d& left_uv_rect, float disparity, cv::Point3d& xyz) const;
IMAGE_GEOMETRY_PUBLIC
void projectDisparityImageTo3d(const cv::Mat& disparity, cv::Mat& point_cloud,
bool handleMissingValues = false) const;
static const double MISSING_Z;
IMAGE_GEOMETRY_PUBLIC
const cv::Matx44d& reprojectionMatrix() const;
IMAGE_GEOMETRY_PUBLIC
double baseline() const;
IMAGE_GEOMETRY_PUBLIC
double getZ(double disparity) const;
IMAGE_GEOMETRY_PUBLIC
double getDisparity(double Z) const;
IMAGE_GEOMETRY_PUBLIC
bool initialized() const { return left_.initialized() && right_.initialized(); }
protected:
PinholeCameraModel left_, right_;
cv::Matx44d Q_;
IMAGE_GEOMETRY_PUBLIC
void updateQ();
};
/* Trivial inline functions */
IMAGE_GEOMETRY_PUBLIC
inline const PinholeCameraModel& StereoCameraModel::left() const { return left_; }
IMAGE_GEOMETRY_PUBLIC
inline const PinholeCameraModel& StereoCameraModel::right() const { return right_; }
IMAGE_GEOMETRY_PUBLIC
inline std::string StereoCameraModel::tfFrame() const { return left_.tfFrame(); }
IMAGE_GEOMETRY_PUBLIC
inline const cv::Matx44d& StereoCameraModel::reprojectionMatrix() const { return Q_; }
IMAGE_GEOMETRY_PUBLIC
inline double StereoCameraModel::baseline() const
{
return -right_.Tx() / right_.fx();
}
IMAGE_GEOMETRY_PUBLIC
inline double StereoCameraModel::getZ(double disparity) const
{
assert( initialized() );
return -right_.Tx() / (disparity - (left().cx() - right().cx()));
}
IMAGE_GEOMETRY_PUBLIC
inline double StereoCameraModel::getDisparity(double Z) const
{
assert( initialized() );
return -right_.Tx() / Z + (left().cx() - right().cx()); ;
}
} // namespace image_geometry
#endif