From 6dc0377e46967caff452b6e05376272b90681238 Mon Sep 17 00:00:00 2001 From: Nicolas Pope <nwpope@utu.fi> Date: Fri, 15 Mar 2019 08:48:28 +0200 Subject: [PATCH] Adding filtering to disparity for massive improvements --- cv-node/src/main.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/cv-node/src/main.cpp b/cv-node/src/main.cpp index fe13b1c73..1d20dbe0d 100644 --- a/cv-node/src/main.cpp +++ b/cv-node/src/main.cpp @@ -101,8 +101,10 @@ int main(int argc, char **argv) { LOG(WARNING) << "Cameras are not calibrated!"; } - int max_disp = 256; + int max_disp = 208; //256; int wsize = 5; + float sigma = 1.5; + float lambda = 8000.0; Ptr<DisparityWLSFilter> wls_filter; Ptr<StereoSGBM> left_matcher = StereoSGBM::create(50,max_disp,wsize); @@ -118,7 +120,7 @@ int main(int argc, char **argv) { Ptr<StereoMatcher> right_matcher = createRightMatcher(left_matcher);*/ while (true) { - Mat l, r, left_disp, right_disp; + Mat l, r, left_disp, right_disp, filtered_disp; calibrate.undistort(l,r); //lsrc->get(l,r); @@ -134,6 +136,10 @@ int main(int argc, char **argv) { // TODO Pose and disparity etc here... + // Downscale to half + cv::resize(l, l, cv::Size(l.cols * 0.75,l.rows * 0.75), 0, 0, INTER_LINEAR); + cv::resize(r, r, cv::Size(r.cols * 0.75,r.rows * 0.75), 0, 0, INTER_LINEAR); + cvtColor(l, l, COLOR_BGR2GRAY); cvtColor(r, r, COLOR_BGR2GRAY); //matching_time = (double)getTickCount(); @@ -141,12 +147,18 @@ int main(int argc, char **argv) { right_matcher->compute(r,l, right_disp); // matching_time = ((double)getTickCount() - matching_time)/getTickFrequency(); + wls_filter->setLambda(lambda); + wls_filter->setSigmaColor(sigma); + //filtering_time = (double)getTickCount(); + wls_filter->filter(left_disp,l,filtered_disp,right_disp); + //filtering_time = ((double)getTickCount() - filtering_time)/getTickFrequency(); + // TODO Send RGB+D data somewhere - normalize(left_disp, left_disp, 0, 255, NORM_MINMAX, CV_8U); + normalize(filtered_disp, filtered_disp, 0, 255, NORM_MINMAX, CV_8U); //normalize(right_disp, right_disp, 0, 255, NORM_MINMAX, CV_8U); - cv::imshow("Left",left_disp); + cv::imshow("Left",filtered_disp); //if (lsrc->isStereo()) cv::imshow("Right",right_disp); if(cv::waitKey(20) == 27){ -- GitLab