Update calibration files according to resolutions and enable remap
authorTae-Young Chung <ty83.chung@samsung.com>
Thu, 21 Oct 2021 04:25:06 +0000 (13:25 +0900)
committer엘무럿/선행S/W Lab(생활가전)/Principal Engineer/삼성전자 <e.talipov@samsung.com>
Tue, 14 Dec 2021 02:21:04 +0000 (11:21 +0900)
Signed-off-by: Tae-Young Chung <ty83.chung@samsung.com>
res/stereoCalibZed.yaml
res/stereoCalibZedHD.yaml [new file with mode: 0644]
res/stereoCalibZedVGA.yaml [new file with mode: 0644]
src/dfs_opencv.cpp

index 7bcadadc7e80c6d3bb056dbc8a18fb9af636dd3c..0d721fac44a213ca1649e3a0230fe1287947433b 100644 (file)
@@ -1,5 +1,5 @@
 %YAML:1.0
-LEFT_CAM_VGA: !!opencv-matrix
+LEFT_CAM_INTRINSIC: !!opencv-matrix
     rows: 3
     cols: 3
     dt: d
@@ -9,7 +9,7 @@ LEFT_CAM_DISTCOEFFS: !!opencv-matrix
     cols: 1
     dt: d
     data: [ -0.0397725, 0.00826312, -0.000558719, 0.000138723, -0.00435501]
-RIGHT_CAM_VGA: !!opencv-matrix
+RIGHT_CAM_INTRINSIC: !!opencv-matrix
     rows: 3
     cols: 3
     dt: d
diff --git a/res/stereoCalibZedHD.yaml b/res/stereoCalibZedHD.yaml
new file mode 100644 (file)
index 0000000..f1cbb7c
--- /dev/null
@@ -0,0 +1,31 @@
+%YAML:1.0
+LEFT_CAM_INTRINSIC: !!opencv-matrix
+    rows: 3
+    cols: 3
+    dt: d
+    data: [ 527.485, 0., 636.28, 0., 527.065, 353.258, 0., 0., 1. ]
+LEFT_CAM_DISTCOEFFS: !!opencv-matrix
+    rows: 5
+    cols: 1
+    dt: d
+    data: [ -0.0397725, 0.00826312, -0.000558719, 0.000138723, -0.00435501]
+RIGHT_CAM_INTRINSIC: !!opencv-matrix
+    rows: 3
+    cols: 3
+    dt: d
+    data: [ 528.04, 0., 639.125, 0., 527.775, 349.074, 0., 0., 1. ]
+RIGHT_CAM_DISTCOEFFS: !!opencv-matrix
+    rows: 5
+    cols: 1
+    dt: d
+    data: [ -0.0416412, 0.00967152, 0.000477674, 0.00033336, -0.00473998 ]
+STEREO_TRANSLATION: !!opencv-matrix
+    rows: 3
+    cols: 1
+    dt: d
+    data: [ 119.814, -0.0286845, 0.0224355 ]
+STEREO_ROTATION: !!opencv-matrix
+    rows: 3
+    cols: 1
+    dt: d
+    data: [ 0.0017263, 0.00115139, -0.000467542 ]
\ No newline at end of file
diff --git a/res/stereoCalibZedVGA.yaml b/res/stereoCalibZedVGA.yaml
new file mode 100644 (file)
index 0000000..0d721fa
--- /dev/null
@@ -0,0 +1,31 @@
+%YAML:1.0
+LEFT_CAM_INTRINSIC: !!opencv-matrix
+    rows: 3
+    cols: 3
+    dt: d
+    data: [ 263.7425, 0., 333.64, 0., 263.5325, 184.129, 0., 0., 1. ]
+LEFT_CAM_DISTCOEFFS: !!opencv-matrix
+    rows: 5
+    cols: 1
+    dt: d
+    data: [ -0.0397725, 0.00826312, -0.000558719, 0.000138723, -0.00435501]
+RIGHT_CAM_INTRINSIC: !!opencv-matrix
+    rows: 3
+    cols: 3
+    dt: d
+    data: [ 264.02, 0., 335.0625, 0., 263.8875, 182.037, 0., 0., 1. ]
+RIGHT_CAM_DISTCOEFFS: !!opencv-matrix
+    rows: 5
+    cols: 1
+    dt: d
+    data: [ -0.0416412, 0.00967152, 0.000477674, 0.00033336, -0.00473998 ]
+STEREO_TRANSLATION: !!opencv-matrix
+    rows: 3
+    cols: 1
+    dt: d
+    data: [ 119.814, -0.0286845, 0.0224355 ]
+STEREO_ROTATION: !!opencv-matrix
+    rows: 3
+    cols: 1
+    dt: d
+    data: [ 0.0017263, 0.00115139, -0.000467542 ]
\ No newline at end of file
index f9666747bf3d64937791a30e4a6b2c5d2fb46c68..ee87a3b809c4c39e840a1d047e118622eace8fc4 100644 (file)
@@ -19,6 +19,8 @@
 #include <opencv2/core/persistence.hpp>
 
 #define DEFAULT_STEREO_CALIB_FILE_NAME "stereoCalibZed.yaml"
+#define DEFAULT_STEREO_VGA_CALIB_FILE_NAME "stereoCalibZedVGA.yaml"
+#define DEFAULT_STEREO_HD_CALIB_FILE_NAME "stereoCalibZedHD.yaml"
 
 namespace DfsAdaptationImpl
 {
@@ -40,7 +42,6 @@ namespace DfsAdaptationImpl
                mImageSize(cv::Size(0,0))
        {
                LOGI("ENTER");
-               mCalibFilePath += std::string(DEFAULT_STEREO_CALIB_FILE_NAME);
                LOGI("LEAVE");
        }
 
@@ -56,16 +57,24 @@ namespace DfsAdaptationImpl
 
                cv::Mat intrinsicTest;
                try {
+                       if (mImageSize == cv::Size(1280, 720))
+                               mCalibFilePath += std::string(DEFAULT_STEREO_HD_CALIB_FILE_NAME);
+                       else if (mImageSize == cv::Size(672, 376)) {
+                               mCalibFilePath += std::string(DEFAULT_STEREO_VGA_CALIB_FILE_NAME);
+                       } else {
+                               throw std::ios_base::failure("no calibration file");
+                       }
+
                        cv::FileStorage fs(mCalibFilePath, cv::FileStorage::READ);
                        if (!fs.isOpened()) {
                                LOGE("Failed to open calib file %s", mCalibFilePath.c_str());
                                throw std::ios_base::failure("calibration");
                        }
 
-                       fs["LEFT_CAM_VGA"] >> mStereoParam.baceCamera.intrinsic;
+                       fs["LEFT_CAM_INTRINSIC"] >> mStereoParam.baceCamera.intrinsic;
                        fs["LEFT_CAM_DISTCOEFFS"] >> mStereoParam.baceCamera.distCoeffs;
 
-                       fs["RIGHT_CAM_VGA"] >> mStereoParam.extraCamera.intrinsic;
+                       fs["RIGHT_CAM_INTRINSIC"] >> mStereoParam.extraCamera.intrinsic;
                        fs["RIGHT_CAM_DISTCOEFFS"] >> mStereoParam.extraCamera.distCoeffs;
 
                        fs["STEREO_TRANSLATION"] >> mStereoParam.translation;
@@ -226,18 +235,14 @@ namespace DfsAdaptationImpl
                }
 
                cv::Mat rBaseMat, rExtraMat, dispMat;
-#if 0
+
                // with remap
                cv::remap(baseMat, rBaseMat, mBaseReMap[0], mBaseReMap[1], cv::INTER_LINEAR);
                cv::remap(extraMat, rExtraMat, mExtraReMap[0], mExtraReMap[1], cv::INTER_LINEAR);
 
                mDfsOcv->compute(rBaseMat, rExtraMat, dispMat);
                dispMat.convertTo(mDispMat, CV_8UC1, 1.0/16.0);
-#else
-               // without remap
-               mDfsOcv->compute(baseMat, extraMat, dispMat);
-               dispMat.convertTo(mDispMat, CV_8UC1, 1.0/16.0);
-#endif
+
                mDepthData.data = mDispMat.ptr<unsigned char>();
                mDepthData.type = DFS_DATA_TYPE_UINT8;
                mDepthData.width = mDispMat.cols;