feat: add disparity params load file.
This commit is contained in:
parent
092b98ca42
commit
c5c795feb0
75
config/disparity_config.yaml
Normal file
75
config/disparity_config.yaml
Normal file
|
@ -0,0 +1,75 @@
|
|||
%YAML:1.0
|
||||
---
|
||||
SGBM:
|
||||
# must define for opencv check
|
||||
name: StereoMatcher.SGBM
|
||||
|
||||
# Margin in percentage by which the best (minimum) computed cost function value should "win" the second best value to consider the found match correct.
|
||||
# Normally, a value within the 5-15 range is good enough.
|
||||
uniquenessRatio: 10
|
||||
|
||||
# Maximum size of smooth disparity regions to consider their noise speckles and invalidate.
|
||||
# Set it to 0 to disable speckle filtering.
|
||||
# Otherwise, set it somewhere in the 50-200 range.
|
||||
speckleWindowSize: 100
|
||||
|
||||
# Maximum disparity variation within each connected component.
|
||||
# If you do speckle filtering, set the parameter to a positive value, it will be implicitly multiplied by 16.
|
||||
# Normally, 1 or 2 is good enough.
|
||||
speckleRange: 32
|
||||
|
||||
# Minimum possible disparity value.
|
||||
# Normally, it is zero but sometimes rectification algorithms
|
||||
# can shift images, so this parameter needs to be adjusted accordingly.
|
||||
minDisparity: 0
|
||||
|
||||
# Maximum allowed difference (in integer pixel units) in the left-right disparity check.
|
||||
# Set it to a non-positive value to disable the check.
|
||||
disp12MaxDiff: 1
|
||||
|
||||
# Truncation value for the prefiltered image pixels.
|
||||
# The algorithm first computes x-derivative at each pixel and clips its value by [-preFilterCap, preFilterCap] interval.
|
||||
# The result values are passed to the Birchfield-Tomasi pixel cost function.
|
||||
preFilterCap: 63
|
||||
|
||||
# Maximum disparity minus minimum disparity.
|
||||
# The value is always greater than zero.
|
||||
# In the current implementation, this parameter must be divisible by 16.
|
||||
numDisparities: 64
|
||||
|
||||
# Matched block size. It must be an odd number >=1 .
|
||||
# Normally, it should be somewhere in the 3..11 range.
|
||||
blockSize: 3
|
||||
|
||||
# The first parameter controlling the disparity smoothness. See below.
|
||||
P1: 72
|
||||
|
||||
# The second parameter controlling the disparity smoothness.
|
||||
# The larger the values are, the smoother the disparity is.
|
||||
# P1 is the penalty on the disparity change by plus or minus 1 between neighbor pixels.
|
||||
# P2 is the penalty on the disparity change by more than 1 between neighbor pixels.
|
||||
# The algorithm requires P2 > P1 .
|
||||
P2: 188
|
||||
|
||||
BM:
|
||||
# must define for opencv check
|
||||
name: StereoMatcher.BM
|
||||
uniquenessRatio: 60
|
||||
speckleWindowSize: 100
|
||||
speckleRange: 4
|
||||
minDisparity: 0
|
||||
disp12MaxDiff: 1
|
||||
preFilterCap: 31
|
||||
# the disparity search range.
|
||||
# For each pixel algorithm will find the best disparity from 0 (default minimum disparity) to numDisparities.
|
||||
# The search range can then be shifted by changing the minimum disparity.
|
||||
numDisparities: 64
|
||||
|
||||
# the linear size of the blocks compared by the algorithm.
|
||||
# The size should be odd (as the block is centered at the current pixel).
|
||||
# Larger block size implies smoother, though less accurate disparity map.
|
||||
# Smaller block size gives more detailed disparity map,
|
||||
# but there is higher chance for algorithm to find a wrong correspondence.
|
||||
blockSize: 15
|
||||
preFilterSize: 9
|
||||
textureThreshold: 10
|
|
@ -204,15 +204,6 @@ class MYNTEYE_API API {
|
|||
* Get the intrinsics base of stream.
|
||||
*/
|
||||
std::shared_ptr<IntrinsicsBase> GetIntrinsicsBase(const Stream &stream) const;
|
||||
/**
|
||||
* Get the intrinsics of stream.
|
||||
*/
|
||||
template <typename T>
|
||||
T GetDisparityParams() const;
|
||||
/**
|
||||
* Get the intrinsics base of stream.
|
||||
*/
|
||||
std::shared_ptr<DisparityParamsBase> GetDisparityParamsBase() const;
|
||||
/**
|
||||
* Get the extrinsics from one stream to another.
|
||||
*/
|
||||
|
@ -368,6 +359,11 @@ class MYNTEYE_API API {
|
|||
*/
|
||||
std::shared_ptr<struct CameraROSMsgInfoPair> GetCameraROSMsgInfoPair();
|
||||
|
||||
/**
|
||||
* Load disparity config from file.
|
||||
*/
|
||||
bool ConfigDisparityFromFile(const std::string& config_file);
|
||||
|
||||
private:
|
||||
std::shared_ptr<Device> device_;
|
||||
|
||||
|
|
|
@ -644,33 +644,6 @@ enum class DisparityComputingMethod : std::uint8_t {
|
|||
UNKNOW
|
||||
};
|
||||
|
||||
struct MYNTEYE_API DisparityParamsBase {
|
||||
DisparityParamsBase() {
|
||||
disparity_model_ = DisparityComputingMethod::UNKNOW;
|
||||
}
|
||||
virtual ~DisparityParamsBase() {}
|
||||
virtual void ResizeIntrinsics() {}
|
||||
|
||||
/** The calibration model */
|
||||
DisparityComputingMethod disparity_model() const {
|
||||
return disparity_model_;
|
||||
}
|
||||
protected:
|
||||
DisparityComputingMethod disparity_model_;
|
||||
};
|
||||
|
||||
struct MYNTEYE_API DisparityParamsSGBM : public DisparityParamsBase {
|
||||
DisparityParamsSGBM() {
|
||||
disparity_model_ = DisparityComputingMethod::SGBM;
|
||||
}
|
||||
};
|
||||
|
||||
struct MYNTEYE_API DisparityParamsBM : public DisparityParamsBase {
|
||||
DisparityParamsBM() {
|
||||
disparity_model_ = DisparityComputingMethod::BM;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @defgroup datatypes Datatypes
|
||||
* @brief Public data types.
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include <opencv2/highgui/highgui.hpp>
|
||||
|
||||
#include "mynteye/api/api.h"
|
||||
#include "mynteye/logger.h"
|
||||
|
||||
MYNTEYE_USE_NAMESPACE
|
||||
|
||||
|
@ -29,6 +30,21 @@ int main(int argc, char *argv[]) {
|
|||
// api->EnableStreamData(Stream::DISPARITY);
|
||||
api->EnableStreamData(Stream::DISPARITY_NORMALIZED);
|
||||
|
||||
if (argc == 2) {
|
||||
std::string config_path(argv[1]);
|
||||
if (api->ConfigDisparityFromFile(config_path)) {
|
||||
LOG(INFO) << "load disparity file: "
|
||||
<< config_path
|
||||
<< " success."
|
||||
<< std::endl;
|
||||
} else {
|
||||
LOG(INFO) << "load disparity file: "
|
||||
<< config_path
|
||||
<< " failed."
|
||||
<< std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
api->SetDisparityComputingMethodType(DisparityComputingMethod::BM);
|
||||
|
||||
api->Start(Source::VIDEO_STREAMING);
|
||||
|
|
|
@ -604,4 +604,8 @@ std::shared_ptr<struct CameraROSMsgInfoPair> API::GetCameraROSMsgInfoPair() {
|
|||
return synthetic_->GetCameraROSMsgInfoPair();
|
||||
}
|
||||
|
||||
bool API::ConfigDisparityFromFile(const std::string& config_file) {
|
||||
return synthetic_->ConfigDisparityFromFile(config_file);
|
||||
}
|
||||
|
||||
MYNTEYE_END_NAMESPACE
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
#include <opencv2/calib3d/calib3d.hpp>
|
||||
#include <opencv2/imgproc/imgproc.hpp>
|
||||
#include <opencv2/core/persistence.hpp>
|
||||
|
||||
#include "mynteye/logger.h"
|
||||
|
||||
|
@ -103,6 +104,24 @@ void DisparityProcessor::SetDisparityComputingMethodType(
|
|||
NotifyComputingTypeChanged(MethodType);
|
||||
}
|
||||
|
||||
bool DisparityProcessor::ConfigFromFile(const std::string& config_file) {
|
||||
cv::FileStorage fsSettings(config_file, cv::FileStorage::READ);
|
||||
if (!fsSettings.isOpened()) {
|
||||
std::cerr << "ERROR: Wrong path to settings" << std::endl;
|
||||
return false;
|
||||
}
|
||||
cv::FileNode node_sgbm = fsSettings["SGBM"];
|
||||
if (node_sgbm.type() == cv::FileNode::MAP) {
|
||||
sgbm_matcher->read(node_sgbm);
|
||||
}
|
||||
|
||||
cv::FileNode node_bm = fsSettings["BM"];
|
||||
if (node_bm.type() == cv::FileNode::MAP) {
|
||||
bm_matcher->read(node_bm);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string DisparityProcessor::Name() {
|
||||
return NAME;
|
||||
}
|
||||
|
|
|
@ -39,6 +39,7 @@ class DisparityProcessor : public Processor {
|
|||
void SetDisparityComputingMethodType(
|
||||
const DisparityComputingMethod &MethodType);
|
||||
void NotifyComputingTypeChanged(const DisparityComputingMethod &MethodType);
|
||||
bool ConfigFromFile(const std::string& config);
|
||||
|
||||
protected:
|
||||
// inline Processor::process_type ProcessOutputConnection() override {
|
||||
|
|
|
@ -119,6 +119,12 @@ void Synthetic::NotifyImageParamsChanged() {
|
|||
}
|
||||
}
|
||||
|
||||
bool Synthetic::ConfigDisparityFromFile(const std::string& config_file) {
|
||||
auto processor = getProcessorWithStream(Stream::DISPARITY);
|
||||
auto proc = static_cast<DisparityProcessor*>(&(*processor));
|
||||
return proc->ConfigFromFile(config_file);
|
||||
}
|
||||
|
||||
const struct Synthetic::stream_control_t Synthetic::getControlDateWithStream(
|
||||
const Stream& stream) const {
|
||||
for (auto &&it : processors_) {
|
||||
|
|
|
@ -94,6 +94,7 @@ class Synthetic {
|
|||
void SetDisparityComputingMethodType(
|
||||
const DisparityComputingMethod &MethoType);
|
||||
std::shared_ptr<struct CameraROSMsgInfoPair> GetCameraROSMsgInfoPair();
|
||||
bool ConfigDisparityFromFile(const std::string& config_file);
|
||||
|
||||
private:
|
||||
void InitCalibInfo();
|
||||
|
|
Loading…
Reference in New Issue
Block a user