#include <opencv2/core/persistence.hpp>
#include <opencv2/imgcodecs.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"
-
#define MAX_THREADS_NUM 2
-#define ENABLE_CALIBRATION 0
+#define ENABLE_CALIBRATION 1
namespace DfsAdaptationImpl
{
mPreFilterCap(63),
mDispMat(),
mDepthData(),
- mCalibFilePath(DFS_CALIB_FILE_PATH),
mStereoParam(),
mIsStereoCalibrated(false),
mUpdateStereoCalibration(false),
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");
}
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");
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,
extraProjection,
disp2Depth);
- cv::initUndistortRectifyMap(mStereoParam.baceCamera.intrinsic,
+ cv::initUndistortRectifyMap(mStereoParam.baceCamera.intrinsic,
mStereoParam.baceCamera.distCoeffs,
baseRotation,
newBaseCameraIntrinsic,
mBaseReMap[0],
mBaseReMap[1]);
- cv::initUndistortRectifyMap(mStereoParam.extraCamera.intrinsic,
+ cv::initUndistortRectifyMap(mStereoParam.extraCamera.intrinsic,
mStereoParam.extraCamera.distCoeffs,
extraRotation,
newExtraCameraIntrinsic,
mExtraReMap[0],
mExtraReMap[1]);
+ mIsStereoCalibrated = true;
} catch (const std::exception& e) {
LOGE("Failed to InitRectifyMap");
throw e;
}
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");
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);
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,