Skip to content
Snippets Groups Projects
opencv_bm.cpp 1010 B
Newer Older
#include <ftl/algorithms/opencv_bm.hpp>

using ftl::algorithms::OpenCVBM;
using namespace cv::ximgproc;
using namespace cv;

static ftl::Disparity::Register opencvbm("bm", OpenCVBM::create);

OpenCVBM::OpenCVBM(nlohmann::json &config) : Disparity(config) {
	int wsize = config.value("windows_size", 5);
	float sigma = config.value("sigma", 1.5);
	float lambda = config.value("lambda", 8000.0);

	left_matcher_  = StereoBM::create(max_disp_,wsize);
    wls_filter_ = createDisparityWLSFilter(left_matcher_);
    right_matcher_ = createRightMatcher(left_matcher_);
    
    wls_filter_->setLambda(lambda);
    wls_filter_->setSigmaColor(sigma);
}

void OpenCVBM::compute(const cv::Mat &l, const cv::Mat &r, cv::Mat &disp) {
	Mat left_disp;
	Mat right_disp;
    Mat lg, rg;
	cv::cvtColor(l, lg, cv::COLOR_BGR2GRAY);
	cv::cvtColor(r, rg, cv::COLOR_BGR2GRAY);
	left_matcher_-> compute(lg, rg,left_disp);
    right_matcher_->compute(rg, lg, right_disp);
    wls_filter_->filter(left_disp, l, disp, right_disp);