From 419f038017a561026ecbec6e6827a949b7dafb47 Mon Sep 17 00:00:00 2001 From: Jakob Bornecrantz Date: Thu, 14 Nov 2019 17:05:16 +0000 Subject: [PATCH] t/calib: Also save the fisheye distortion always --- .../auxiliary/tracking/t_calibration_opencv.h | 10 ++++------ src/xrt/auxiliary/tracking/t_file.cpp | 20 +++++++++++++++---- src/xrt/auxiliary/tracking/t_tracking.h | 11 ++++------ 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/xrt/auxiliary/tracking/t_calibration_opencv.h b/src/xrt/auxiliary/tracking/t_calibration_opencv.h index 5f607a0a2..2717bc65c 100644 --- a/src/xrt/auxiliary/tracking/t_calibration_opencv.h +++ b/src/xrt/auxiliary/tracking/t_calibration_opencv.h @@ -35,13 +35,11 @@ public: cv::Mat l_intrinsics_mat = {}; cv::Mat l_distortion_mat = {}; cv::Mat l_distortion_fisheye_mat = {}; - cv::Mat l_translation_mat = {}; cv::Mat l_rotation_mat = {}; cv::Mat l_projection_mat = {}; cv::Mat r_intrinsics_mat = {}; cv::Mat r_distortion_mat = {}; cv::Mat r_distortion_fisheye_mat = {}; - cv::Mat r_translation_mat = {}; cv::Mat r_rotation_mat = {}; cv::Mat r_projection_mat = {}; @@ -57,11 +55,13 @@ public: l_intrinsics_mat = cv::Mat(3, 3, CV_64F, &l_intrinsics[0][0]); l_distortion_mat = cv::Mat(1, 5, CV_64F, &l_distortion[0]); + l_distortion_fisheye_mat = cv::Mat(1, 4, CV_64F, &l_distortion_fisheye[0]); l_rotation_mat = cv::Mat(3, 3, CV_64F, &l_rotation[0][0]); l_projection_mat = cv::Mat(3, 4, CV_64F, &l_projection[0][0]); r_intrinsics_mat = cv::Mat(3, 3, CV_64F, &r_intrinsics[0][0]); r_distortion_mat = cv::Mat(1, 5, CV_64F, &r_distortion[0]); + r_distortion_fisheye_mat = cv::Mat(1, 4, CV_64F, &r_distortion_fisheye[0]); r_rotation_mat = cv::Mat(3, 3, CV_64F, &r_rotation[0][0]); r_projection_mat = cv::Mat(3, 4, CV_64F, &r_projection[0][0]); // clang-format on @@ -76,14 +76,12 @@ public: camera_fundamental_mat.size() == cv::Size(3, 3) && l_intrinsics_mat.size() == cv::Size(3, 3) && l_distortion_mat.size() == cv::Size(5, 1) && - l_distortion_fisheye_mat.size() == cv::Size(0, 0) && - l_translation_mat.size() == cv::Size(0, 0) && + l_distortion_fisheye_mat.size() == cv::Size(4, 1) && l_rotation_mat.size() == cv::Size(3, 3) && l_projection_mat.size() == cv::Size(4, 3) && r_intrinsics_mat.size() == cv::Size(3, 3) && r_distortion_mat.size() == cv::Size(5, 1) && - r_distortion_fisheye_mat.size() == cv::Size(0, 0) && - r_translation_mat.size() == cv::Size(0, 0) && + r_distortion_fisheye_mat.size() == cv::Size(4, 1) && r_rotation_mat.size() == cv::Size(3, 3) && r_projection_mat.size() == cv::Size(4, 3); } diff --git a/src/xrt/auxiliary/tracking/t_file.cpp b/src/xrt/auxiliary/tracking/t_file.cpp index c4f045b40..603bad86a 100644 --- a/src/xrt/auxiliary/tracking/t_file.cpp +++ b/src/xrt/auxiliary/tracking/t_file.cpp @@ -61,6 +61,10 @@ t_file_load_stereo_calibration_v1(FILE *calib_file, assert(raw.isDataStorageValid()); + // Dummies + cv::Mat l_translation_dummy; + cv::Mat r_translation_dummy; + //! @todo Load from file. bool use_fisheye = false; @@ -74,8 +78,8 @@ t_file_load_stereo_calibration_v1(FILE *calib_file, read_cv_mat(calib_file, &raw.r_distortion_fisheye_mat, "r_distortion_fisheye"); read_cv_mat(calib_file, &raw.l_rotation_mat, "l_rotation"); // 3 x 3 read_cv_mat(calib_file, &raw.r_rotation_mat, "r_rotation"); // 3 x 3 - read_cv_mat(calib_file, &raw.l_translation_mat, "l_translation"); // empty - read_cv_mat(calib_file, &raw.r_translation_mat, "r_translation"); // empty + read_cv_mat(calib_file, &l_translation_dummy, "l_translation"); // empty + read_cv_mat(calib_file, &r_translation_dummy, "r_translation"); // empty read_cv_mat(calib_file, &raw.l_projection_mat, "l_projection"); // 3 x 4 read_cv_mat(calib_file, &raw.r_projection_mat, "r_projection"); // 3 x 4 read_cv_mat(calib_file, &raw.disparity_to_depth_mat, "disparity_to_depth"); // 4 x 4 @@ -213,6 +217,10 @@ t_file_save_raw_data(FILE *calib_file, struct t_calibration_raw_data *raw_data) { CalibrationRawData &raw = *(CalibrationRawData *)raw_data; + cv::Mat l_translation_dummy; + cv::Mat r_translation_dummy; + + write_cv_mat(calib_file, &raw.l_intrinsics_mat); write_cv_mat(calib_file, &raw.r_intrinsics_mat); write_cv_mat(calib_file, &raw.l_distortion_mat); @@ -221,8 +229,8 @@ t_file_save_raw_data(FILE *calib_file, struct t_calibration_raw_data *raw_data) write_cv_mat(calib_file, &raw.r_distortion_fisheye_mat); write_cv_mat(calib_file, &raw.l_rotation_mat); write_cv_mat(calib_file, &raw.r_rotation_mat); - write_cv_mat(calib_file, &raw.l_translation_mat); - write_cv_mat(calib_file, &raw.r_translation_mat); + write_cv_mat(calib_file, &l_translation_dummy); + write_cv_mat(calib_file, &r_translation_dummy); write_cv_mat(calib_file, &raw.l_projection_mat); write_cv_mat(calib_file, &raw.r_projection_mat); write_cv_mat(calib_file, &raw.disparity_to_depth_mat); @@ -345,6 +353,10 @@ read_cv_mat(FILE *f, cv::Mat *m, const char *name) return false; } + if (header[1] == 0 && header[2] == 0) { + return true; + } + //! @todo We may have written things other than CV_32F and CV_64F. if (header[0] == 4) { m->create(static_cast(header[1]), diff --git a/src/xrt/auxiliary/tracking/t_tracking.h b/src/xrt/auxiliary/tracking/t_tracking.h index 657e2be27..62dcd9285 100644 --- a/src/xrt/auxiliary/tracking/t_tracking.h +++ b/src/xrt/auxiliary/tracking/t_tracking.h @@ -249,6 +249,8 @@ struct t_calibration_raw_data double l_intrinsics[3][3]; //! Left camera distortion double l_distortion[5]; + //! Left fisheye camera distortion + double l_distortion_fisheye[4]; //! Left rectification transform (rotation matrix). double l_rotation[3][3]; //! Left projection matrix in the new (rectified) coordinate systems. @@ -258,17 +260,12 @@ struct t_calibration_raw_data double r_intrinsics[3][3]; //! Right camera distortion double r_distortion[5]; + //! Right fisheye camera distortion + double r_distortion_fisheye[4]; //! Right rectification transform (rotation matrix). double r_rotation[3][3]; //! Right projection matrix in the new (rectified) coordinate systems. double r_projection[3][4]; - -#if 0 - double r_translation[3]; // [0 x 0] [1 x 3]?? - double r_distortion_fisheye[4]; // [0 x 0] [4 x 1]?? - double l_translation[3]; // [0 x 0] [1 x 3]?? - double l_distortion_fisheye[4]; // [0 x 0] [4 x 1]?? -#endif }; /*!