NVIDIA DeepStream SDK API Reference

6.4 Release
CameraModel.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3  *
4  * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual
5  * property and proprietary rights in and to this material, related
6  * documentation and any modifications thereto. Any use, reproduction,
7  * disclosure or distribution of this material and related documentation
8  * without an express license agreement from NVIDIA CORPORATION or
9  * its affiliates is strictly prohibited.
10  *
11  * SPDX-FileCopyrightText: Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES
12  * SPDX-License-Identifier: LicenseRef-NvidiaProprietary
13  */
14 
15 #ifndef CVCORE_CAMERAMODEL_H
16 #define CVCORE_CAMERAMODEL_H
17 
18 #include <array>
19 
20 #include "cv/core/Array.h"
21 #include "cv/core/MathTypes.h"
22 
23 namespace cvcore {
24 
29 enum class CameraDistortionType : uint8_t
30 {
31  UNKNOWN,
32  NONE,
33  Polynomial,
38 };
39 
44 {
46  union
47  {
48  float coefficients[8];
49  struct
50  {
51  float k1, k2, k3, k4, k5, k6;
52  float p1, p2;
53  };
54  };
55 
58  k1(0.0), k2(0.0), k3(0.0), k4(0.0), k5(0.0), k6(0.0),
59  p1(0.0), p2(0.0) {}
60 
67  CameraDistortionModel(CameraDistortionType distortionType, std::array<float, 8> & distortionCoefficients)
68  : type(distortionType)
69  {
70  std::copy(distortionCoefficients.begin(), distortionCoefficients.end(), std::begin(coefficients));
71  }
72 
86  CameraDistortionModel(CameraDistortionType distortionType, float k1, float k2, float k3, \
87  float k4, float k5, float k6, float p1, float p2)
88  : type(distortionType)
89  , k1(k1)
90  , k2(k2)
91  , k3(k3)
92  , k4(k4)
93  , k5(k5)
94  , k6(k6)
95  , p1(p1)
96  , p2(p2)
97  {
98 
99  }
100 
106  {
107  return type;
108  }
109 
114  const float * getCoefficients() const
115  {
116  return &coefficients[0];
117  }
118 
119  inline bool operator==(const CameraDistortionModel & other) const noexcept
120  {
121  return this->k1 == other.k1 &&
122  this->k2 == other.k2 &&
123  this->k3 == other.k3 &&
124  this->k4 == other.k4 &&
125  this->k5 == other.k5 &&
126  this->k6 == other.k6 &&
127  this->p1 == other.p1 &&
128  this->p2 == other.p2;
129  }
130 
131  inline bool operator!=(const CameraDistortionModel & other) const noexcept
132  {
133  return !(*this == other);
134  }
135 };
136 
141 {
142  CameraIntrinsics() = default;
143 
153  CameraIntrinsics(float fx, float fy, float cx, float cy, float s = 0.0)
154  {
155  m_intrinsics[0][0] = fx;
156  m_intrinsics[0][1] = s;
157  m_intrinsics[0][2] = cx;
158  m_intrinsics[1][0] = 0.0;
159  m_intrinsics[1][1] = fy;
160  m_intrinsics[1][2] = cy;
161  }
162 
167  float fx() const
168  {
169  return m_intrinsics[0][0];
170  }
171 
176  float fy() const
177  {
178  return m_intrinsics[1][1];
179  }
180 
185  float cx() const
186  {
187  return m_intrinsics[0][2];
188  }
189 
194  float cy() const
195  {
196  return m_intrinsics[1][2];
197  }
198 
203  float skew() const
204  {
205  return m_intrinsics[0][1];
206  }
207 
212  const float * getMatrix23() const
213  {
214  return &m_intrinsics[0][0];
215  }
216 
217  inline bool operator==(const CameraIntrinsics & other) const noexcept
218  {
219  return m_intrinsics[0][0] == other.m_intrinsics[0][0] &&
220  m_intrinsics[0][1] == other.m_intrinsics[0][1] &&
221  m_intrinsics[0][2] == other.m_intrinsics[0][2] &&
222  m_intrinsics[1][0] == other.m_intrinsics[1][0] &&
223  m_intrinsics[1][1] == other.m_intrinsics[1][1] &&
224  m_intrinsics[1][2] == other.m_intrinsics[1][2];
225  }
226 
227  inline bool operator!=(const CameraIntrinsics & other) const noexcept
228  {
229  return !(*this == other);
230  }
231 
232  float m_intrinsics[2][3] {{1.0, 0.0, 0.0},{0.0, 1.0, 0.0}};
233 };
234 
239 {
240  using RawMatrixType = float[3][4];
241 
242  CameraExtrinsics() = default;
243 
249  explicit CameraExtrinsics(const RawMatrixType & extrinsics)
250  {
251  std::copy(&extrinsics[0][0], &extrinsics[0][0] + 3 * 4, &m_extrinsics[0][0]);
252  }
253 
254  inline bool operator==(const CameraExtrinsics & other) const noexcept
255  {
256  return m_extrinsics[0][0] == other.m_extrinsics[0][0] &&
257  m_extrinsics[0][1] == other.m_extrinsics[0][1] &&
258  m_extrinsics[0][2] == other.m_extrinsics[0][2] &&
259  m_extrinsics[0][3] == other.m_extrinsics[0][3] &&
260  m_extrinsics[1][0] == other.m_extrinsics[1][0] &&
261  m_extrinsics[1][1] == other.m_extrinsics[1][1] &&
262  m_extrinsics[1][2] == other.m_extrinsics[1][2] &&
263  m_extrinsics[1][3] == other.m_extrinsics[1][3] &&
264  m_extrinsics[2][0] == other.m_extrinsics[2][0] &&
265  m_extrinsics[2][1] == other.m_extrinsics[2][1] &&
266  m_extrinsics[2][2] == other.m_extrinsics[2][2] &&
267  m_extrinsics[2][3] == other.m_extrinsics[2][3];
268  }
269 
270  inline bool operator!=(const CameraExtrinsics & other) const noexcept
271  {
272  return !(*this == other);
273  }
274 
275  RawMatrixType m_extrinsics {{1.0, 0.0, 0.0, 0.0},
276  {0.0, 1.0, 0.0, 0.0},
277  {0.0, 0.0, 1.0, 0.0}};
278 };
279 
280 struct CameraModel
281 {
285 };
286 
287 } // namespace cvcore
288 
289 #endif // CVCORE_CAMERAMODEL_H
cvcore::CameraIntrinsics::m_intrinsics
float m_intrinsics[2][3]
Camera intrinsics 2D arrat.
Definition: CameraModel.h:232
cvcore::CameraIntrinsics::fx
float fx() const
Get camera intrinsics x focal length.
Definition: CameraModel.h:167
cvcore::CameraDistortionModel::CameraDistortionModel
CameraDistortionModel(CameraDistortionType distortionType, float k1, float k2, float k3, float k4, float k5, float k6, float p1, float p2)
Camera Distortion Model creation using individual coefficients.
Definition: CameraModel.h:86
cvcore::CameraIntrinsics::operator==
bool operator==(const CameraIntrinsics &other) const noexcept
Definition: CameraModel.h:217
cvcore::CameraDistortionModel::k2
float k2
Definition: CameraModel.h:51
cvcore::CameraDistortionModel::k4
float k4
Definition: CameraModel.h:51
cvcore::CameraModel::intrinsic
CameraIntrinsics intrinsic
Definition: CameraModel.h:282
cvcore::CameraIntrinsics::operator!=
bool operator!=(const CameraIntrinsics &other) const noexcept
Definition: CameraModel.h:227
cvcore
Definition: PnP.h:20
cvcore::CameraDistortionModel::k1
float k1
Definition: CameraModel.h:51
MathTypes.h
cvcore::CameraExtrinsics::m_extrinsics
RawMatrixType m_extrinsics
Definition: CameraModel.h:275
cvcore::CameraDistortionType::FisheyeOrthoGraphic
@ FisheyeOrthoGraphic
Orthographic Fisheye distortion model.
cvcore::CameraDistortionType::FisheyeEquidistant
@ FisheyeEquidistant
Equidistant Fisheye distortion model.
cvcore::CameraDistortionModel
Struct type used to store Camera Distortion model type and coefficients.
Definition: CameraModel.h:43
cvcore::CameraExtrinsics::CameraExtrinsics
CameraExtrinsics()=default
cvcore::CameraIntrinsics::skew
float skew() const
Get camera intrinsics slanted pixels.
Definition: CameraModel.h:203
cvcore::CameraDistortionModel::getDistortionType
CameraDistortionType getDistortionType() const
Get camera distortion model type.
Definition: CameraModel.h:105
cvcore::CameraDistortionModel::k5
float k5
Definition: CameraModel.h:51
cvcore::CameraDistortionType::UNKNOWN
@ UNKNOWN
Unknown arbitrary distortion model.
cvcore::CameraDistortionModel::coefficients
float coefficients[8]
Definition: CameraModel.h:48
cvcore::CameraIntrinsics::cx
float cx() const
Get camera intrinsics x principal point.
Definition: CameraModel.h:185
Array.h
cvcore::CameraDistortionModel::k3
float k3
Definition: CameraModel.h:51
cvcore::CameraDistortionModel::p2
float p2
Definition: CameraModel.h:52
cvcore::CameraIntrinsics::getMatrix23
const float * getMatrix23() const
Get camera intrinsics 2D array.
Definition: CameraModel.h:212
cvcore::CameraDistortionType::FisheyeStereographic
@ FisheyeStereographic
Stereographic Fisheye distortion model.
cvcore::CameraDistortionType::NONE
@ NONE
No distortion applied.
cvcore::CameraExtrinsics::RawMatrixType
float[3][4] RawMatrixType
Definition: CameraModel.h:240
cvcore::CameraDistortionModel::type
CameraDistortionType type
Camera distortion model type.
Definition: CameraModel.h:45
cvcore::CameraDistortionModel::operator!=
bool operator!=(const CameraDistortionModel &other) const noexcept
Definition: CameraModel.h:131
cvcore::CameraExtrinsics::CameraExtrinsics
CameraExtrinsics(const RawMatrixType &extrinsics)
Camera Extrinsics creation with given extrinsics as raw 2D [3 x 4] array.
Definition: CameraModel.h:249
cvcore::CameraDistortionType
CameraDistortionType
An enum.
Definition: CameraModel.h:29
cvcore::CameraDistortionType::Polynomial
@ Polynomial
Polynomial distortion model.
cvcore::CameraDistortionModel::getCoefficients
const float * getCoefficients() const
Get camera distortion model coefficients.
Definition: CameraModel.h:114
cvcore::CameraDistortionModel::operator==
bool operator==(const CameraDistortionModel &other) const noexcept
Definition: CameraModel.h:119
cvcore::CameraIntrinsics::CameraIntrinsics
CameraIntrinsics()=default
cvcore::CameraExtrinsics::operator==
bool operator==(const CameraExtrinsics &other) const noexcept
Definition: CameraModel.h:254
cvcore::CameraIntrinsics
Struct type used to store Camera Intrinsics.
Definition: CameraModel.h:140
cvcore::CameraModel::distortion
CameraDistortionModel distortion
Definition: CameraModel.h:284
cvcore::CameraIntrinsics::CameraIntrinsics
CameraIntrinsics(float fx, float fy, float cx, float cy, float s=0.0)
Camera Instrinsics creation with given intrinsics values.
Definition: CameraModel.h:153
cvcore::CameraExtrinsics
Struct type used to store Camera Extrinsics.
Definition: CameraModel.h:238
cvcore::CameraDistortionModel::p1
float p1
Definition: CameraModel.h:52
cvcore::CameraExtrinsics::operator!=
bool operator!=(const CameraExtrinsics &other) const noexcept
Definition: CameraModel.h:270
cvcore::CameraIntrinsics::cy
float cy() const
Get camera intrinsics y principal point.
Definition: CameraModel.h:194
cvcore::CameraDistortionType::FisheyeEquisolid
@ FisheyeEquisolid
Equisolid Fisheye distortion model.
cvcore::CameraDistortionModel::CameraDistortionModel
CameraDistortionModel(CameraDistortionType distortionType, std::array< float, 8 > &distortionCoefficients)
Camera Distortion Model creation using array of coefficients.
Definition: CameraModel.h:67
cvcore::CameraModel::extrinsic
CameraExtrinsics extrinsic
Definition: CameraModel.h:283
cvcore::CameraDistortionModel::k6
float k6
Definition: CameraModel.h:51
cvcore::CameraIntrinsics::fy
float fy() const
Get camera intrinsics y focal length.
Definition: CameraModel.h:176
cvcore::CameraDistortionModel::CameraDistortionModel
CameraDistortionModel()
Definition: CameraModel.h:56
cvcore::CameraModel
Definition: CameraModel.h:280