From: Tae-Young Chung Date: Mon, 25 Oct 2021 06:58:24 +0000 (+0900) Subject: Add downscaling to reduce execution time X-Git-Tag: submit/tizen/20220701.002357~1^2~16 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=67bc51243bc2137001d16cc5ef2751a4e555a55d;p=platform%2Fcore%2Fmultimedia%2Fdfs-opencv.git Add downscaling to reduce execution time Before running compute() for disparity estimation, resize the input images' size to half in both width and height. After compute(), resize the size to the original size. The, apply WLS filter as post-process. Signed-off-by: Tae-Young Chung --- diff --git a/src/dfs_opencv.cpp b/src/dfs_opencv.cpp index 055f956..c435ba3 100644 --- a/src/dfs_opencv.cpp +++ b/src/dfs_opencv.cpp @@ -17,6 +17,7 @@ #include "dfs_opencv_private.h" #include #include +#include #define DEFAULT_STEREO_CALIB_FILE_NAME "stereoCalibZed.yaml" #define DEFAULT_STEREO_VGA_CALIB_FILE_NAME "stereoCalibZedVGA.yaml" @@ -26,6 +27,7 @@ namespace DfsAdaptationImpl { DfsOCV::DfsOCV() : mDfsOcv(nullptr), + mDfsOcvExtra(nullptr), mDfsPostOcv(nullptr), mDfsParam(), mNumDisparities(179), @@ -40,7 +42,8 @@ namespace DfsAdaptationImpl mStereoParam(), mIsStereoCalibrated(false), mUpdateStereoCalibration(false), - mImageSize(cv::Size(0,0)) + mImageSize(cv::Size(0,0)), + mDownScale(1) { LOGI("ENTER"); LOGI("LEAVE"); @@ -161,6 +164,10 @@ namespace DfsAdaptationImpl mDfsParam = param; mImageSize = cv::Size(width, height); + if (mDownScale) { + mMinDisparity >>= mDownScale; + mNumDisparities >>= mDownScale; + } mDfsOcv = cv::StereoSGBM::create(mMinDisparity, mNumDisparities, mBlockSize); this->SetParameters(); @@ -172,10 +179,10 @@ namespace DfsAdaptationImpl throw e; } -#if 0 +#if 0 // oneway mDfsPostOcv = cv::ximgproc::createDisparityWLSFilterGeneric(false); mDfsPostOcv->setDepthDiscontinuityRadius(static_cast(ceil(0.5*mBlockSize))); -#else +#else // twoway mDfsPostOcv = cv::ximgproc::createDisparityWLSFilter(mDfsOcv); mDfsOcvExtra = cv::ximgproc::createRightMatcher(mDfsOcv); mDfsPostOcv->setLRCthresh(24.0); @@ -252,22 +259,67 @@ namespace DfsAdaptationImpl 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); + cv::Mat srcBaseMat, srcExtraMat; + cv::resize(rBaseMat, srcBaseMat, + cv::Size(), + 1.0/static_cast((1<((1<((1<((1<compute(srcBaseMat, srcExtraMat, dispMat); if (mDfsPostOcv) { if (mDfsOcvExtra) { cv::Mat dispMatExtra; - mDfsOcvExtra->compute(rExtraMat, rBaseMat, dispMatExtra); - + mDfsOcvExtra->compute(srcExtraMat, srcBaseMat, dispMatExtra); + + if (mDownScale) { + cv::Mat tmp; + // base + cv::resize(dispMat, tmp, + cv::Size(), + static_cast(1<(1<(1<(1<(1<(1<filter(dispMat, rBaseMat, dispFiltMat, dispMatExtra, cv::Rect(0,0,rBaseMat.cols, rBaseMat.rows), rExtraMat); } else { + if (mDownScale) { + cv::Mat tmp; + cv::resize(dispMat, tmp, + cv::Size(), + static_cast(1<(1<(1<filter(dispMat, rBaseMat, dispFiltMat); } + dispFiltMat.convertTo(mDispMat, CV_8UC1, 1.0/16.0); } else { - dispMat.convertTo(mDispMat, CV_8UC1, 1.0/16.0); + if (mDownScale) { + cv::Mat tmp; + cv::resize(dispMat, tmp, + cv::Size(), + static_cast(1<(1<(1 << mDownScale)); + } else { + dispMat.convertTo(mDispMat, CV_8UC1, 1.0/16.0); + } } mDepthData.data = mDispMat.ptr(); diff --git a/src/dfs_opencv_private.h b/src/dfs_opencv_private.h index d47adac..1467860 100644 --- a/src/dfs_opencv_private.h +++ b/src/dfs_opencv_private.h @@ -94,6 +94,8 @@ namespace DfsAdaptationImpl cv::Mat mBaseReMap[2]; cv::Mat mExtraReMap[2]; + size_t mDownScale; + void SetParameters(); int ConvertDfsDataTypeToCV(int type); void InitializeStereoCalibration();