Skip to content
Snippets Groups Projects
disparity.hpp 1.74 KiB
Newer Older
Nicolas Pope's avatar
Nicolas Pope committed
/*
 * Copyright 2019 Nicolas Pope
 */

#ifndef _FTL_DISPARITY_HPP_
#define _FTL_DISPARITY_HPP_

#include <opencv2/opencv.hpp>
#include <nlohmann/json.hpp>
Nicolas Pope's avatar
Nicolas Pope committed
#include <ftl/configurable.hpp>
Nicolas Pope's avatar
Nicolas Pope committed

/**
 * Virtual base class for disparity algorithms. An automatic factory is used
 * to construct instances of specific algorithms that implement this
 * interface, for this to work a static instance of the Register class must
 * be created in the algorithms cpp file.
 */
Nicolas Pope's avatar
Nicolas Pope committed
class Disparity : public ftl::Configurable {
Nicolas Pope's avatar
Nicolas Pope committed
	explicit Disparity(nlohmann::json &config);
	
	virtual void setMinDisparity(size_t min) { min_disp_ = min; }
	virtual void setMaxDisparity(size_t max) { max_disp_ = max; }
	
Sebastian Hahta's avatar
Sebastian Hahta committed
	virtual void setMask(cv::Mat &mask) { mask_l_ = mask; }
	
Nicolas Pope's avatar
Nicolas Pope committed
	/**
	 * Pure virtual function representing the actual computation of
	 * disparity from left and right images to be implemented.
	 */
	virtual void compute(const cv::Mat &l, const cv::Mat &r, cv::Mat &disp)=0;
Nicolas Pope's avatar
Nicolas Pope committed
	/**
	 * Factory registration class.
	 */
Nicolas Pope's avatar
Nicolas Pope committed
		Register(const std::string &n, std::function<Disparity*(ftl::Configurable *, const std::string &)> f) {
Nicolas Pope's avatar
Nicolas Pope committed
	/**
	 * Factory instance creator where config contains an "algorithm" property
	 * used as the instance name to construct.
	 */
Nicolas Pope's avatar
Nicolas Pope committed
	static Disparity *create(ftl::Configurable *, const std::string &);
Nicolas Pope's avatar
Nicolas Pope committed
	static void _register(const std::string &n, std::function<Disparity*(ftl::Configurable *, const std::string &)> f);
Nicolas Pope's avatar
Nicolas Pope committed
	//nlohmann::json &config_;
	size_t min_disp_;
	size_t max_disp_;
Sebastian Hahta's avatar
Sebastian Hahta committed
	cv::Mat mask_l_;
Nicolas Pope's avatar
Nicolas Pope committed
	static std::map<std::string,std::function<Disparity*(ftl::Configurable *, const std::string &)>> *algorithms__;