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_