feat(calib models): prepare to abstract the process order by calib model

This commit is contained in:
TinyOh 2019-01-08 16:18:34 +08:00
parent 7a556143aa
commit 6e3afaec29
6 changed files with 41 additions and 19 deletions

View File

@ -93,7 +93,7 @@ class MYNTEYE_API API {
/** The api::MotionData callback. */
using motion_callback_t = std::function<void(const api::MotionData &data)>;
explicit API(std::shared_ptr<Device> device);
explicit API(std::shared_ptr<Device> device, CalibrationModel calib_model);
virtual ~API();
/**

View File

@ -207,10 +207,11 @@ std::vector<std::string> get_plugin_paths() {
} // namespace
API::API(std::shared_ptr<Device> device) : device_(device) {
API::API(std::shared_ptr<Device> device, CalibrationModel calib_model)
: device_(device) {
VLOG(2) << __func__;
// std::dynamic_pointer_cast<StandardDevice>(device_);
synthetic_.reset(new Synthetic(this));
synthetic_.reset(new Synthetic(this, calib_model));
}
API::~API() {
@ -230,7 +231,15 @@ std::shared_ptr<API> API::Create(
}
std::shared_ptr<API> API::Create(const std::shared_ptr<Device> &device) {
return std::make_shared<API>(device);
auto left_intr = device -> GetIntrinsics(Stream::LEFT);
auto right_intr = device -> GetIntrinsics(Stream::RIGHT);
if (left_intr->calib_model() != right_intr->calib_model()) {
VLOG(2) << __func__
<< "ERROR: "
<<"left camera and right camera use different calib models!";
}
auto api = std::make_shared<API>(device, left_intr->calib_model());
return api;
}
Model API::GetModel() const {

View File

@ -24,6 +24,13 @@
#ifdef WITH_CAM_MODELS
#include <camodocal/camera_models/Camera.h>
#include <camodocal/camera_models/CameraFactory.h>
#include <camodocal/camera_models/CataCamera.h>
#include <camodocal/camera_models/EquidistantCamera.h>
#include <camodocal/camera_models/PinholeCamera.h>
#include <camodocal/gpl/gpl.h>
#include <camodocal/camera_models/Camera.h>
#include <boost/algorithm/string.hpp>
#include <boost/filesystem.hpp>
#include <boost/program_options.hpp>

View File

@ -22,15 +22,6 @@
#include "mynteye/types.h"
#include "mynteye/api/processor.h"
#ifdef WITH_CAM_MODELS
#include <camodocal/camera_models/Camera.h>
#include <camodocal/camera_models/CameraFactory.h>
#include <camodocal/camera_models/CataCamera.h>
#include <camodocal/camera_models/EquidistantCamera.h>
#include <camodocal/camera_models/PinholeCamera.h>
#include <camodocal/gpl/gpl.h>
#include <camodocal/camera_models/Camera.h>
#endif
MYNTEYE_BEGIN_NAMESPACE

View File

@ -68,7 +68,8 @@ void process_childs(
} // namespace
Synthetic::Synthetic(API *api) : api_(api), plugin_(nullptr) {
Synthetic::Synthetic(API *api, CalibrationModel calib_model)
: api_(api), plugin_(nullptr), calib_model_(calib_model) {
VLOG(2) << __func__;
CHECK_NOTNULL(api_);
InitStreamSupports();
@ -442,10 +443,21 @@ void Synthetic::InitProcessors() {
depth_processor->SetPostProcessCallback(
std::bind(&Synthetic::OnDepthPostProcess, this, _1));
if (calib_model_ == CalibrationModel::PINHOLE) {
// PINHOLE
rectify_processor->AddChild(disparity_processor);
disparity_processor->AddChild(disparitynormalized_processor);
disparity_processor->AddChild(points_processor);
points_processor->AddChild(depth_processor);
} else if (calib_model_ == CalibrationModel::KANNALA_BRANDT) {
// KANNALA_BRANDT
rectify_processor->AddChild(disparity_processor);
disparity_processor->AddChild(disparitynormalized_processor);
disparity_processor->AddChild(points_processor);
points_processor->AddChild(depth_processor);
} else {
// UNKNOW
}
processor_ = rectify_processor;
}

View File

@ -21,6 +21,7 @@
#include <vector>
#include "mynteye/api/api.h"
// #include ""
MYNTEYE_BEGIN_NAMESPACE
@ -40,7 +41,7 @@ class Synthetic {
MODE_LAST // Unsupported
} mode_t;
explicit Synthetic(API *api);
explicit Synthetic(API *api, CalibrationModel calib_model);
~Synthetic();
void NotifyImageParamsChanged();
@ -112,6 +113,8 @@ class Synthetic {
std::shared_ptr<Processor> processor_;
std::shared_ptr<Plugin> plugin_;
CalibrationModel calib_model_;
};
template <class T, class P>