34 #ifndef MULTISENSE_ROS_CAMERA_UTILITIES_H    35 #define MULTISENSE_ROS_CAMERA_UTILITIES_H    41 #include <Eigen/Geometry>    43 #include <opencv2/opencv.hpp>    46 #include <sensor_msgs/CameraInfo.h>    48 #include <multisense_lib/MultiSenseChannel.hh>    49 #include <multisense_lib/MultiSenseTypes.hh>    77         callback_buffer_(driver->reserveCallbackBuffer()),
    84         driver_->releaseCallbackBuffer(callback_buffer_);
    87     const T &
data() const noexcept
   103 template <
typename T>
   109     const uint8_t *lumaP = 
reinterpret_cast<const uint8_t*
>(luma.
imageDataP);
   110     const uint8_t *chromaP = 
reinterpret_cast<const uint8_t*
>(chroma.
imageDataP);
   112     const size_t luma_offset = (v * luma.
width) + u;
   113     const size_t chroma_offset = 2 * (((v/2) * (luma.
width/2)) + (u/2));
   115     const float px_y = 
static_cast<float>(lumaP[luma_offset]);
   116     const float px_cb = 
static_cast<float>(chromaP[chroma_offset+0]) - 128.0
f;
   117     const float px_cr = 
static_cast<float>(chromaP[chroma_offset+1]) - 128.0
f;
   119     float px_r  = px_y + 1.402f   * px_cr;
   120     float px_g  = px_y - 0.34414f * px_cb - 0.71414f * px_cr;
   121     float px_b  = px_y + 1.772f   * px_cb;
   123     if (px_r < 0.0
f)        px_r = 0.0f;
   124     else if (px_r > 255.0
f) px_r = 255.0f;
   125     if (px_g < 0.0
f)        px_g = 0.0f;
   126     else if (px_g > 255.0
f) px_g = 255.0f;
   127     if (px_b < 0.0
f)        px_b = 0.0f;
   128     else if (px_b > 255.0
f) px_b = 255.0f;
   130     return Eigen::Matrix<T, 3, 1>{
static_cast<T
>(px_b), static_cast<T>(px_g), 
static_cast<T
>(px_r)};
   144                                        bool scale_calibration);
   152     EIGEN_MAKE_ALIGNED_OPERATOR_NEW
   166     Eigen::Matrix4d Q() 
const;
   178     Eigen::Vector3d aux_T() 
const;
   183     Eigen::Vector3f reproject(
size_t u, 
size_t v, 
double d) 
const;
   188     Eigen::Vector3f reproject(
size_t u,
   191                               const sensor_msgs::CameraInfo &left_camera_info,
   192                               const sensor_msgs::CameraInfo &right_camera_info) 
const;
   198     Eigen::Vector2f rectifiedAuxProject(
const Eigen::Vector3f &left_rectified_point) 
const;
   204     Eigen::Vector2f rectifiedAuxProject(
const Eigen::Vector3f &left_rectified_point,
   205                                         const sensor_msgs::CameraInfo &aux_camera_info) 
const;
   222     bool validRight() 
const;
   227     bool validAux() 
const;
   229     sensor_msgs::CameraInfo leftCameraInfo(
const std::string& frame_id, 
const ros::Time& stamp) 
const;
   230     sensor_msgs::CameraInfo rightCameraInfo(
const std::string& frame_id, 
const ros::Time& stamp) 
const;
   231     sensor_msgs::CameraInfo auxCameraInfo(
const std::string& frame_id,
   234     sensor_msgs::CameraInfo auxCameraInfo(
const std::string& frame_id,
   239     std::shared_ptr<RectificationRemapT> leftRemap() 
const;
   240     std::shared_ptr<RectificationRemapT> rightRemap() 
const;
 
sensor_msgs::CameraInfo right_camera_info_
sensor_msgs::CameraInfo makeCameraInfo(const crl::multisense::image::Config &config, const crl::multisense::image::Calibration::Data &calibration, const crl::multisense::system::DeviceInfo &device_info, bool scale_calibration)
const crl::multisense::system::DeviceInfo & device_info_
RectificationRemapT makeRectificationRemap(const crl::multisense::image::Config &config, const crl::multisense::image::Calibration::Data &calibration, const crl::multisense::system::DeviceInfo &device_info)
static constexpr size_t S30_AUX_CAM_HEIGHT
crl::multisense::Channel * driver_
sensor_msgs::CameraInfo left_camera_info_
static constexpr size_t S30_AUX_CAM_WIDTH
Eigen::Matrix4d makeQ(const crl::multisense::image::Config &config, const crl::multisense::image::Calibration &calibration, const crl::multisense::system::DeviceInfo &device_info)
constexpr Eigen::Matrix< T, 3, 1 > ycbcrToBgr(const crl::multisense::image::Header &luma, const crl::multisense::image::Header &chroma, size_t u, size_t v)
const crl::multisense::image::Calibration calibration_
sensor_msgs::CameraInfo aux_camera_info_
const T & data() const noexcept
std::shared_ptr< RectificationRemapT > left_remap_
std::shared_ptr< RectificationRemapT > right_remap_
crl::multisense::image::Config config_
BufferWrapper(crl::multisense::Channel *driver, const T &data)
Eigen::Matrix4d q_matrix_