diff --git a/components/rgbd-sources/src/calibrate.cpp b/components/rgbd-sources/src/calibrate.cpp index c3a84ef9613cb9e6956ee67582de5ed279f85beb..cfe164baacf16ad722188aa1ecd72564a4db19f0 100644 --- a/components/rgbd-sources/src/calibrate.cpp +++ b/components/rgbd-sources/src/calibrate.cpp @@ -59,32 +59,6 @@ Calibrate::Calibrate(nlohmann::json &config, cv::Size image_size, cv::cuda::Stre }); } -void Calibrate::_updateIntrinsics() { - Mat R1, R2, P1, P2; - std::pair<Mat, Mat> map1, map2; - - if (this->value("use_intrinsics", true)) { - R1 = R1_; - R2 = R2_; - P1 = P1_; - P2 = P2_; - } - else { - R1 = Mat::eye(Size(3, 3), CV_64FC1); - R2 = R1; - P1 = M1_; - P2 = M2_; - } - - initUndistortRectifyMap(M1_, D1_, R1, P1, img_size_, CV_32FC1, map1.first, map2.first); - initUndistortRectifyMap(M2_, D2_, R2, P2, img_size_, CV_32FC1, map1.second, map2.second); - - map1_gpu_.first.upload(map1.first); - map1_gpu_.second.upload(map1.second); - map2_gpu_.first.upload(map2.first); - map2_gpu_.second.upload(map2.second); -} - bool Calibrate::_loadCalibration(cv::Size img_size, std::pair<Mat, Mat> &map1, std::pair<Mat, Mat> &map2) { FileStorage fs; @@ -150,11 +124,41 @@ void Calibrate::updateCalibration(const ftl::rgbd::Camera &p) { Q_.at<double>(2,3) = p.fx; Q_.at<double>(0,3) = p.cx; Q_.at<double>(1,3) = p.cy; + // FIXME:(Nick) Update camera matrix also... + _updateIntrinsics(); +} - initUndistortRectifyMap(M1_, D1_, R1_, P1_, img_size_, CV_32FC1, map1.first, map2.first); - initUndistortRectifyMap(M2_, D2_, R2_, P2_, img_size_, CV_32FC1, map1.second, map2.second); +void Calibrate::_updateIntrinsics() { + // TODO: pass parameters? + Mat R1, R2, P1, P2; + std::pair<Mat, Mat> map1, map2; + ftl::rgbd::Camera params(); + + if (this->value("use_intrinsics", true)) { + // rectify + R1 = R1_; + R2 = R2_; + P1 = P1_; + P2 = P2_; + } + else { + // no rectification + R1 = Mat::eye(Size(3, 3), CV_64FC1); + R2 = R1; + P1 = M1_; + P2 = M2_; + } + + // Set correct camera matrices for + // getCameraMatrix(), getCameraMatrixLeft(), getCameraMatrixRight() + C_l_ = P1; + C_r_ = P2; + + initUndistortRectifyMap(M1_, D1_, R1, P1, img_size_, CV_32FC1, map1.first, map2.first); + initUndistortRectifyMap(M2_, D2_, R2, P2, img_size_, CV_32FC1, map1.second, map2.second); + // CHECK Is this thread safe!!!! map1_gpu_.first.upload(map1.first); map1_gpu_.second.upload(map1.second); diff --git a/components/rgbd-sources/src/calibrate.hpp b/components/rgbd-sources/src/calibrate.hpp index fd43f21b294dd0e319620ce9bf4783a8345f141b..a621c3dab9c5c54020ce6bbaf3a10c50bdeb81b6 100644 --- a/components/rgbd-sources/src/calibrate.hpp +++ b/components/rgbd-sources/src/calibrate.hpp @@ -49,7 +49,9 @@ class Calibrate : public ftl::Configurable { * a 3D point cloud. */ const cv::Mat &getQ() const { return Q_; } - const cv::Mat &getCameraMatrix() const { return P_; } + const cv::Mat &getCameraMatrixLeft() { return C_l_; } + const cv::Mat &getCameraMatrixRight() { return C_r_; } + const cv::Mat &getCameraMatrix() { return getCameraMatrixLeft(); } private: void _updateIntrinsics(); @@ -65,6 +67,10 @@ private: cv::Mat Q_; cv::Mat R_, T_, R1_, P1_, R2_, P2_; cv::Mat M1_, D1_, M2_, D2_; + + cv::Mat C_l_; + cv::Mat C_r_; + cv::Size img_size_; };