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. */ /** The api::MotionData callback. */
using motion_callback_t = std::function<void(const api::MotionData &data)>; 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(); virtual ~API();
/** /**

View File

@ -207,10 +207,11 @@ std::vector<std::string> get_plugin_paths() {
} // namespace } // 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__; VLOG(2) << __func__;
// std::dynamic_pointer_cast<StandardDevice>(device_); // std::dynamic_pointer_cast<StandardDevice>(device_);
synthetic_.reset(new Synthetic(this)); synthetic_.reset(new Synthetic(this, calib_model));
} }
API::~API() { API::~API() {
@ -230,7 +231,15 @@ std::shared_ptr<API> API::Create(
} }
std::shared_ptr<API> API::Create(const std::shared_ptr<Device> &device) { 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 { Model API::GetModel() const {

View File

@ -24,6 +24,13 @@
#ifdef WITH_CAM_MODELS #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/algorithm/string.hpp>
#include <boost/filesystem.hpp> #include <boost/filesystem.hpp>
#include <boost/program_options.hpp> #include <boost/program_options.hpp>

View File

@ -22,15 +22,6 @@
#include "mynteye/types.h" #include "mynteye/types.h"
#include "mynteye/api/processor.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 MYNTEYE_BEGIN_NAMESPACE

View File

@ -68,7 +68,8 @@ void process_childs(
} // namespace } // 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__; VLOG(2) << __func__;
CHECK_NOTNULL(api_); CHECK_NOTNULL(api_);
InitStreamSupports(); InitStreamSupports();
@ -442,10 +443,21 @@ void Synthetic::InitProcessors() {
depth_processor->SetPostProcessCallback( depth_processor->SetPostProcessCallback(
std::bind(&Synthetic::OnDepthPostProcess, this, _1)); std::bind(&Synthetic::OnDepthPostProcess, this, _1));
rectify_processor->AddChild(disparity_processor); if (calib_model_ == CalibrationModel::PINHOLE) {
disparity_processor->AddChild(disparitynormalized_processor); // PINHOLE
disparity_processor->AddChild(points_processor); rectify_processor->AddChild(disparity_processor);
points_processor->AddChild(depth_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; processor_ = rectify_processor;
} }

View File

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