IDS peak ICV v1.0.0
Loading...
Searching...
No Matches
peak_icv_intrinsic_parameters.hpp
Go to the documentation of this file.
1
11#pragma once
12
18#include <peak_icv_c/algorithms/calibration/peak_icv_intrinsic_parameters.h>
19#include <cstring>
20
21namespace peak
22{
23namespace icv
24{
25
26namespace experimental
27{
28
40{
41public:
49 PEAK_ICV_NO_DISCARD peak::common::Size GetImageSize() const;
50
58 PEAK_ICV_NO_DISCARD peak::common::PointF GetPrinciplePoint() const;
59
67 PEAK_ICV_NO_DISCARD DistortionCoefficients GetDistortionCoefficients() const;
68
76 PEAK_ICV_NO_DISCARD peak::common::PointF GetFocalLengthPixelSizeRatio() const;
77
78private:
79 friend peak::common::detail::BackendAccessor<IntrinsicParameters>;
80
81 explicit IntrinsicParameters(const peak_icv_intrinsic_parameters& intrinsicParameters);
82 explicit operator peak_icv_intrinsic_parameters() const;
83
84 peak_icv_intrinsic_parameters m_intrinsicParameters{};
85};
86
87inline IntrinsicParameters::IntrinsicParameters(const peak_icv_intrinsic_parameters& intrinsicParameters)
88 : m_intrinsicParameters{ intrinsicParameters }
89{}
90
91inline IntrinsicParameters::operator peak_icv_intrinsic_parameters() const
92{
93 return m_intrinsicParameters;
94}
95
97{
98 return { m_intrinsicParameters.image_size.width, m_intrinsicParameters.image_size.height };
99}
100
102{
103 return peak::common::PointF{ m_intrinsicParameters.principle_point.x, m_intrinsicParameters.principle_point.y };
104}
105
107{
108 std::array<double, 14> coefficients{};
109 memcpy(coefficients.data(), &m_intrinsicParameters.distortion_coefficients, sizeof(m_intrinsicParameters.distortion_coefficients));
110
111 RadialDistortion radial{};
112 auto end = coefficients.begin() + radial.size(); // NOLINT(readability-qualified-auto)
113 std::copy(coefficients.begin(), end, radial.begin());
114
115 TangentialDistortion tangential{};
116 auto begin = end; // NOLINT(readability-qualified-auto)
117 end += tangential.size();
118 std::copy(begin, end, tangential.begin());
119
120 PrismDistortion prism{};
121 begin = end;
122 end += prism.size();
123 std::copy(begin, end, prism.begin());
124
125 TiltDistortion tilt{};
126 begin = end;
127 end += tilt.size();
128 std::copy(begin, end, tilt.begin());
129
130 return { radial, tangential, prism, tilt };
131}
132
134{
135 return { m_intrinsicParameters.focal_length_pixel_size_ratio.x, m_intrinsicParameters.focal_length_pixel_size_ratio.y };
136}
137
138} /* namespace experimental */
139
140} /* namespace icv */
141} /* namespace peak */
Represents a two-dimensional size with non-negative width and height.
The intrinsic parameters contain the necessary information to use the camera calibration.
peak::common::PointF GetPrinciplePoint() const
Provides the principle point.
DistortionCoefficients GetDistortionCoefficients() const
Provides the distortion coefficients.
peak::common::Size GetImageSize() const
Provides the image size.
peak::common::PointF GetFocalLengthPixelSizeRatio() const
Provides the focal length pixel size ratio.