#ifndef __LIBSGM_WRAPPER_H__ #define __LIBSGM_WRAPPER_H__ #include "libsgm.h" #include #ifdef BUILD_OPENCV_WRAPPER #include #endif namespace sgm { /** * @brief LibSGMWrapper class which is wrapper for sgm::StereoSGM. */ class LibSGMWrapper { public: /** * @param numDisparity Maximum disparity minus minimum disparity. * @param P1 Penalty on the disparity change by plus or minus 1 between nieghbor pixels. * @param P2 Penalty on the disparity change by more than 1 between neighbor pixels. * @param uniquenessRatio Margin in ratio by which the best cost function value should be at least second one. * @param subpixel Disparity value has 4 fractional bits if subpixel option is enabled. * @param pathType Number of scanlines used in cost aggregation. * @param minDisparity Minimum possible disparity value. * @param lrMaxDiff Acceptable difference pixels which is used in LR check consistency. LR check consistency will be disabled if this value is set to negative. * @param censusType Type of census transform. */ LIBSGM_API LibSGMWrapper(int numDisparity = 128, int P1 = 10, int P2 = 120, float uniquenessRatio = 0.95f, bool subpixel = false, PathType pathType = PathType::SCAN_8PATH, int minDisparity = 0, int lrMaxDiff = 1, CensusType censusType = CensusType::SYMMETRIC_CENSUS_9x7); LIBSGM_API ~LibSGMWrapper(); LIBSGM_API int getNumDisparities() const; LIBSGM_API int getP1() const; LIBSGM_API int getP2() const; LIBSGM_API float getUniquenessRatio() const; LIBSGM_API bool hasSubpixel() const; LIBSGM_API PathType getPathType() const; LIBSGM_API int getMinDisparity() const; LIBSGM_API int getLrMaxDiff() const; LIBSGM_API CensusType getCensusType() const; LIBSGM_API int getInvalidDisparity() const; #ifdef BUILD_OPENCV_WRAPPER /** * Execute stereo semi global matching via wrapper class. * @param I1 Input left image. Image's type is must be CV_8U, CV_16U or CV_32S * @param I2 Input right image. Image's size and type must be same with I1. * @param disparity Output image. Its memory will be allocated automatically dependent on input image size. * @attention * type of output image `disparity` is CV_16S. * Note that disparity element value would be multiplied StereoSGM::SUBPIXEL_SCALE if subpixel option was enabled. */ LIBSGM_API void execute(const cv::cuda::GpuMat& I1, const cv::cuda::GpuMat& I2, cv::cuda::GpuMat& disparity); /** * Execute stereo semi global matching via wrapper class. * @param I1 Input left image. Image's type is must be CV_8U, CV_16U or CV_32S. * @param I2 Input right image. Image's size and type must be same with I1. * @param disparity Output image. Its memory will be allocated automatically dependent on input image size. * @attention * type of output image `disparity` is CV_16S. * Note that disparity element value would be multiplied StereoSGM::SUBPIXEL_SCALE if subpixel option was enabled. */ LIBSGM_API void execute(const cv::Mat& I1, const cv::Mat& I2, cv::Mat& disparity); #endif // BUILD_OPRENCV_WRAPPER private: struct Creator; std::unique_ptr sgm_; int numDisparity_; sgm::StereoSGM::Parameters param_; std::unique_ptr prev_; }; } // namespace sgm #endif // __LIBSGM_WRAPPER_H__