Apollo 10.0
自动驾驶开放平台
apollo::perception::base::OmnidirectionalCameraDistortionModel类 参考

#include <omnidirectional_model.h>

类 apollo::perception::base::OmnidirectionalCameraDistortionModel 继承关系图:
apollo::perception::base::OmnidirectionalCameraDistortionModel 的协作图:

Public 成员函数

 OmnidirectionalCameraDistortionModel ()=default
 
 ~OmnidirectionalCameraDistortionModel ()=default
 
Eigen::Vector2f Project (const Eigen::Vector3f &point3d) override
 
std::shared_ptr< BaseCameraModelget_camera_model () override
 
std::string name () const override
 
bool set_params (size_t width, size_t height, const Eigen::VectorXf &params) override
 
- Public 成员函数 继承自 apollo::perception::base::BaseCameraDistortionModel
 BaseCameraDistortionModel ()=default
 
virtual ~BaseCameraDistortionModel ()=default
 
size_t get_height () const
 
size_t get_width () const
 

Protected 属性

Eigen::Matrix3f intrinsic_params_
 
Polynomial cam2world_
 
Polynomial world2cam_
 
float center_ [2]
 
float affine_ [3]
 
- Protected 属性 继承自 apollo::perception::base::BaseCameraDistortionModel
size_t width_ = 0
 
size_t height_ = 0
 

详细描述

在文件 omnidirectional_model.h31 行定义.

构造及析构函数说明

◆ OmnidirectionalCameraDistortionModel()

apollo::perception::base::OmnidirectionalCameraDistortionModel::OmnidirectionalCameraDistortionModel ( )
default

◆ ~OmnidirectionalCameraDistortionModel()

apollo::perception::base::OmnidirectionalCameraDistortionModel::~OmnidirectionalCameraDistortionModel ( )
default

成员函数说明

◆ get_camera_model()

std::shared_ptr< BaseCameraModel > apollo::perception::base::OmnidirectionalCameraDistortionModel::get_camera_model ( )
overridevirtual

实现了 apollo::perception::base::BaseCameraDistortionModel.

在文件 omnidirectional_model.cc61 行定义.

61 {
62 std::shared_ptr<PinholeCameraModel> camera_model(new PinholeCameraModel());
63 camera_model->set_width(width_);
64 camera_model->set_height(height_);
65 camera_model->set_intrinsic_params(intrinsic_params_);
66
67 return std::dynamic_pointer_cast<BaseCameraModel>(camera_model);
68}

◆ name()

std::string apollo::perception::base::OmnidirectionalCameraDistortionModel::name ( ) const
inlineoverridevirtual

实现了 apollo::perception::base::BaseCameraDistortionModel.

在文件 omnidirectional_model.h43 行定义.

43 {
44 return "OmnidirectionalCameraDistortionModel";
45 }

◆ Project()

Eigen::Vector2f apollo::perception::base::OmnidirectionalCameraDistortionModel::Project ( const Eigen::Vector3f &  point3d)
overridevirtual

实现了 apollo::perception::base::BaseCameraDistortionModel.

在文件 omnidirectional_model.cc29 行定义.

30 {
31 if (std::isgreater(point3d[2], 0.f)) {
32 AERROR << "The input point (" << point3d
33 << ") should be in front of the camera";
34 }
35
36 // rotate:
37 // [0 1 0;
38 // 1 0 0;
39 // 0 0 -1];
40 double x[3] = {point3d(1), point3d(0), -point3d(2)};
41 const double norm = sqrt(x[0] * x[0] + x[1] * x[1]);
42
43 Eigen::Vector2f projection;
44 if (norm < std::numeric_limits<double>::epsilon()) {
45 projection(0) = center_[1];
46 projection(1) = center_[0];
47 return projection;
48 }
49
50 const double theta = atan(x[2] / norm);
51 const double rho = world2cam_(theta);
52
53 const float u = static_cast<float>(x[0] / norm * rho);
54 const float v = static_cast<float>(x[1] / norm * rho);
55 projection(1) = affine_[0] * u + affine_[1] * v + center_[0];
56 projection(0) = affine_[2] * u + v + center_[1];
57 return projection;
58}
#define AERROR
Definition log.h:44

◆ set_params()

bool apollo::perception::base::OmnidirectionalCameraDistortionModel::set_params ( size_t  width,
size_t  height,
const Eigen::VectorXf &  params 
)
overridevirtual

实现了 apollo::perception::base::BaseCameraDistortionModel.

在文件 omnidirectional_model.cc70 行定义.

71 {
72 if (params.size() < 9) {
73 AINFO << "Missing cam2world and world2cam model.";
74 return false;
75 }
76
77 uint32_t cam2world_order = uint32_t(params(8));
78 AINFO << "cam2world order: " << cam2world_order << ", size: " << params.size()
79 << std::endl;
80
81 if (params.size() < 9 + cam2world_order + 1) {
82 AINFO << "Incomplete cam2world model or missing world2cam model.";
83 return false;
84 }
85
86 uint32_t world2cam_order = uint32_t(params(9 + cam2world_order));
87 AINFO << "world2cam order: " << world2cam_order << ", size: " << params.size()
88 << std::endl;
89
90 if (params.size() < 9 + cam2world_order + 1 + world2cam_order) {
91 AINFO << "Incomplete world2cam model.";
92 return false;
93 }
94
95 width_ = width;
97
98 center_[0] = params(0);
99 center_[1] = params(1);
100
101 affine_[0] = params(2);
102 affine_[1] = params(3);
103 affine_[2] = params(4);
104
105 intrinsic_params_ = Eigen::Matrix3f::Identity();
106 intrinsic_params_(0, 0) = params(5);
107 intrinsic_params_(1, 1) = params(5);
108 intrinsic_params_(0, 2) = params(6);
109 intrinsic_params_(1, 2) = params(7);
110
111 for (size_t i = 0; i < cam2world_order; ++i) {
112 cam2world_[static_cast<uint32_t>(i)] = static_cast<double>(params(9 + i));
113 }
114
115 for (size_t i = 0; i < world2cam_order; ++i) {
116 world2cam_[static_cast<uint32_t>(i)] =
117 static_cast<double>(params(10 + cam2world_order + i));
118 }
119
120 return true;
121}
#define AINFO
Definition log.h:42
uint32_t height
Height of point cloud
uint32_t width
Width of point cloud

类成员变量说明

◆ affine_

float apollo::perception::base::OmnidirectionalCameraDistortionModel::affine_[3]
protected

在文件 omnidirectional_model.h55 行定义.

◆ cam2world_

Polynomial apollo::perception::base::OmnidirectionalCameraDistortionModel::cam2world_
protected

在文件 omnidirectional_model.h52 行定义.

◆ center_

float apollo::perception::base::OmnidirectionalCameraDistortionModel::center_[2]
protected

在文件 omnidirectional_model.h54 行定义.

◆ intrinsic_params_

Eigen::Matrix3f apollo::perception::base::OmnidirectionalCameraDistortionModel::intrinsic_params_
protected

在文件 omnidirectional_model.h51 行定义.

◆ world2cam_

Polynomial apollo::perception::base::OmnidirectionalCameraDistortionModel::world2cam_
protected

在文件 omnidirectional_model.h53 行定义.


该类的文档由以下文件生成: