rows: 5
cols: 1
dt: d
- data: [ -0.0397725, 0.00826312, -0.00435501, -0.000558719, 0.000138723 ]
+ data: [ -0.0397725, 0.00826312, -0.000558719, 0.000138723, -0.00435501]
RIGHT_CAM_VGA: !!opencv-matrix
rows: 3
cols: 3
rows: 5
cols: 1
dt: d
- data: [ -0.0416412, 0.00967152, -0.00473998, 0.000477674, 0.00033336 ]
+ data: [ -0.0416412, 0.00967152, 0.000477674, 0.00033336, -0.00473998 ]
STEREO_TRANSLATION: !!opencv-matrix
rows: 3
cols: 1
mCalibFilePath(DFS_CALIB_FILE_PATH),
mStereoParam(),
mIsStereoCalibrated(false),
- mUpdateStereoCalibration(false)
+ mUpdateStereoCalibration(false),
+ mImageSize(640, 480)
{
LOGI("ENTER");
mCalibFilePath += std::string(DEFAULT_STEREO_CALIB_FILE_NAME);
LOGI("LEAVE");
}
+ void DfsOCV::InitRectifyMap()
+ {
+ LOGI("ENTER");
+
+ try {
+ cv::Mat newBaseCameraIntrinsic = cv::getOptimalNewCameraMatrix(
+ mStereoParam.baceCamera.intrinsic,
+ mStereoParam.baceCamera.distCoeffs,
+ mImageSize,
+ 1.0);
+
+ cv::Mat newExtraCameraIntrinsic = cv::getOptimalNewCameraMatrix(
+ mStereoParam.extraCamera.intrinsic,
+ mStereoParam.extraCamera.distCoeffs,
+ mImageSize,
+ 1.0);
+
+ cv::Mat extraCameraRotation;
+ cv::Rodrigues(mStereoParam.rotation, extraCameraRotation);
+
+ cv::Mat baseRotation, extraRotation; // 3x3
+ cv::Mat baseProjection, extraProjection; // 3x4
+ cv::Mat disp2Depth; // 4x4
+
+ cv::stereoRectify(mStereoParam.baceCamera.intrinsic,
+ mStereoParam.baceCamera.distCoeffs,
+ mStereoParam.extraCamera.intrinsic,
+ mStereoParam.extraCamera.distCoeffs,
+ mImageSize,
+ extraCameraRotation,
+ mStereoParam.translation,
+ baseRotation,
+ extraRotation,
+ baseProjection,
+ extraProjection,
+ disp2Depth);
+
+ cv::initUndistortRectifyMap(mStereoParam.baceCamera.intrinsic,
+ mStereoParam.baceCamera.distCoeffs,
+ baseRotation,
+ newBaseCameraIntrinsic,
+ mImageSize,
+ CV_16SC2,
+ mBaseReMap[0],
+ mBaseReMap[1]);
+
+ cv::initUndistortRectifyMap(mStereoParam.extraCamera.intrinsic,
+ mStereoParam.extraCamera.distCoeffs,
+ extraRotation,
+ newExtraCameraIntrinsic,
+ mImageSize,
+ CV_16SC2,
+ mExtraReMap[0],
+ mExtraReMap[1]);
+
+ } catch (const std::exception& e) {
+ LOGE("Failed to InitRectifyMap");
+ throw e;
+ }
+
+
+ LOGI("LEAVE");
+
+ }
void DfsOCV::Initialize(DfsParameter& param)
{
LOGI("ENTER");
try {
this->InitializeStereoCalibration();
+ this->InitRectifyMap();
} catch (const std::exception& e) {
throw e;
}
throw std::runtime_error("base and extra should be the type");
}
- mDfsOcv->compute(baseMat, extraMat, mDispMat);
+ cv::Mat rBaseMat, rExtraMat;
+ 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, mDispMat);
mDepthData.data = mDispMat.data;
mDepthData.type = DFS_DATA_TYPE_UINT8;