From: Tae-Young Chung Date: Mon, 24 Jan 2022 05:30:03 +0000 (+0900) Subject: Add stereoConfigPath to get stereoConfig information for point cloud generation X-Git-Tag: submit/tizen/20220701.002357~1^2~6 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fcede6a0bf5141b1962c84e70d67773838e803c0;p=platform%2Fcore%2Fmultimedia%2Fdfs-opencv.git Add stereoConfigPath to get stereoConfig information for point cloud generation Signed-off-by: Tae-Young Chung --- diff --git a/packaging/dfs-opencv.spec b/packaging/dfs-opencv.spec index effcd3e..92915f6 100644 --- a/packaging/dfs-opencv.spec +++ b/packaging/dfs-opencv.spec @@ -1,6 +1,6 @@ Name: dfs-opencv Summary: OpenCV based Depth-from-Stereo implementation -Version: 1.0.1 +Version: 1.0.2 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/dfs_opencv.cpp b/src/dfs_opencv.cpp index 896cc52..9c8018e 100644 --- a/src/dfs_opencv.cpp +++ b/src/dfs_opencv.cpp @@ -19,12 +19,8 @@ #include #include -#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" - #define MAX_THREADS_NUM 2 -#define ENABLE_CALIBRATION 0 +#define ENABLE_CALIBRATION 1 namespace DfsAdaptationImpl { @@ -41,7 +37,6 @@ namespace DfsAdaptationImpl mPreFilterCap(63), mDispMat(), mDepthData(), - mCalibFilePath(DFS_CALIB_FILE_PATH), mStereoParam(), mIsStereoCalibrated(false), mUpdateStereoCalibration(false), @@ -67,23 +62,15 @@ namespace DfsAdaptationImpl LOGI("LEAVE"); } - void DfsOCV::InitializeStereoCalibration() + void DfsOCV::InitializeStereoCalibration(std::string filepath) { LOGI("ENTER"); 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); + cv::FileStorage fs(filepath, cv::FileStorage::READ); if (!fs.isOpened()) { - LOGE("Failed to open calib file %s", mCalibFilePath.c_str()); + LOGE("Failed to open calib file %s", filepath.c_str()); throw std::ios_base::failure("calibration"); } @@ -96,8 +83,6 @@ namespace DfsAdaptationImpl fs["STEREO_TRANSLATION"] >> mStereoParam.translation; fs["STEREO_ROTATION"] >> mStereoParam.rotation; - mIsStereoCalibrated = true; - } catch (const std::exception& e) { LOGE("Failed to read calibration data %s", e.what()); throw std::ios_base::failure("calibration"); @@ -111,26 +96,26 @@ namespace DfsAdaptationImpl LOGI("ENTER"); try { - cv::Mat newBaseCameraIntrinsic = cv::getOptimalNewCameraMatrix( + cv::Mat newBaseCameraIntrinsic = cv::getOptimalNewCameraMatrix( mStereoParam.baceCamera.intrinsic, mStereoParam.baceCamera.distCoeffs, mImageSize, 1.0); - cv::Mat newExtraCameraIntrinsic = cv::getOptimalNewCameraMatrix( + cv::Mat newExtraCameraIntrinsic = cv::getOptimalNewCameraMatrix( mStereoParam.extraCamera.intrinsic, mStereoParam.extraCamera.distCoeffs, mImageSize, 1.0); - cv::Mat extraCameraRotation; - cv::Rodrigues(mStereoParam.rotation, extraCameraRotation); + cv::Mat extraCameraRotation; + cv::Rodrigues(mStereoParam.rotation, extraCameraRotation); - cv::Mat baseRotation, extraRotation; // 3x3 - cv::Mat baseProjection, extraProjection; // 3x4 - cv::Mat disp2Depth; // 4x4 + cv::Mat baseRotation, extraRotation; // 3x3 + cv::Mat baseProjection, extraProjection; // 3x4 + cv::Mat disp2Depth; // 4x4 - cv::stereoRectify(mStereoParam.baceCamera.intrinsic, + cv::stereoRectify(mStereoParam.baceCamera.intrinsic, mStereoParam.baceCamera.distCoeffs, mStereoParam.extraCamera.intrinsic, mStereoParam.extraCamera.distCoeffs, @@ -143,7 +128,7 @@ namespace DfsAdaptationImpl extraProjection, disp2Depth); - cv::initUndistortRectifyMap(mStereoParam.baceCamera.intrinsic, + cv::initUndistortRectifyMap(mStereoParam.baceCamera.intrinsic, mStereoParam.baceCamera.distCoeffs, baseRotation, newBaseCameraIntrinsic, @@ -152,7 +137,7 @@ namespace DfsAdaptationImpl mBaseReMap[0], mBaseReMap[1]); - cv::initUndistortRectifyMap(mStereoParam.extraCamera.intrinsic, + cv::initUndistortRectifyMap(mStereoParam.extraCamera.intrinsic, mStereoParam.extraCamera.distCoeffs, extraRotation, newExtraCameraIntrinsic, @@ -161,6 +146,7 @@ namespace DfsAdaptationImpl mExtraReMap[0], mExtraReMap[1]); + mIsStereoCalibrated = true; } catch (const std::exception& e) { LOGE("Failed to InitRectifyMap"); throw e; @@ -171,7 +157,7 @@ namespace DfsAdaptationImpl } void DfsOCV::Initialize(DfsParameter& param, size_t width, size_t height, - size_t minDisp, size_t maxDisp) + size_t minDisp, size_t maxDisp, std::string stereoConfigPath) { LOGI("ENTER"); @@ -199,11 +185,13 @@ namespace DfsAdaptationImpl this->SetParameters(); #if ENABLE_CALIBRATION - try { - this->InitializeStereoCalibration(); - this->InitRectifyMap(); - } catch (const std::exception& e) { - throw e; + if (!stereoConfigPath.empty()) { + try { + this->InitializeStereoCalibration(stereoConfigPath); + this->InitRectifyMap(); + } catch (const std::exception& e) { + throw e; + } } #endif mDfsPostOcv = cv::ximgproc::createDisparityWLSFilter(mDfsOcv); @@ -380,13 +368,14 @@ namespace DfsAdaptationImpl cv::Mat rBaseMat, rExtraMat, dispMat, dispFiltMat; // with remap -#if ENABLE_CALIBRATION - cv::remap(baseMat, rBaseMat, mBaseReMap[0], mBaseReMap[1], cv::INTER_LINEAR); - cv::remap(extraMat, rExtraMat, mExtraReMap[0], mExtraReMap[1], cv::INTER_LINEAR); -#else - rBaseMat = baseMat; - rExtraMat = extraMat; -#endif + if (mIsStereoCalibrated) { + cv::remap(baseMat, rBaseMat, mBaseReMap[0], mBaseReMap[1], cv::INTER_LINEAR); + cv::remap(extraMat, rExtraMat, mExtraReMap[0], mExtraReMap[1], cv::INTER_LINEAR); + } else { + rBaseMat = baseMat; + rExtraMat = extraMat; + } + cv::Mat srcBaseMat, srcExtraMat; cv::resize(rBaseMat, srcBaseMat, diff --git a/src/dfs_opencv_private.h b/src/dfs_opencv_private.h index 0e8c2bb..16ebb8a 100644 --- a/src/dfs_opencv_private.h +++ b/src/dfs_opencv_private.h @@ -91,7 +91,6 @@ namespace DfsAdaptationImpl cv::Mat mDispMat; DfsData mDepthData; - std::string mCalibFilePath; StereoParam mStereoParam; bool mIsStereoCalibrated; bool mUpdateStereoCalibration; @@ -115,7 +114,7 @@ namespace DfsAdaptationImpl void SetParameters(); int ConvertDfsDataTypeToCV(int type); - void InitializeStereoCalibration(); + void InitializeStereoCalibration(std::string filepath); void InitRectifyMap(); bool computeL(const cv::Mat& baseMat, const cv::Mat& extraMat, cv::Mat& disp); @@ -126,7 +125,7 @@ namespace DfsAdaptationImpl ~DfsOCV(); void Initialize(DfsParameter& param, size_t width, size_t height, - size_t minDisp, size_t maxDisp) override; + size_t minDisp, size_t maxDisp, std::string stereoConfigPath) override; void Run(DfsData& base, DfsData& extra) override; DfsData& GetDepthData() override;