IDS peak ICV v1.1.0
Loading...
Searching...
No Matches
peak_icv_intrinsic_parameters.hpp
Go to the documentation of this file.
1
11#pragma once
12
15#include <peak_common_c/detail/peak_common_defines.h>
18#include <peak_icv_c/algorithms/calibration/peak_icv_intrinsic_parameters.h>
19#include <cstring>
20
21namespace peak
22{
23namespace icv
24{
25
26
38{
39public:
47 PEAK_COMMON_NO_DISCARD peak::common::Size GetImageSize() const;
48
56 PEAK_COMMON_NO_DISCARD peak::common::PointF GetPrinciplePoint() const;
57
65 PEAK_COMMON_NO_DISCARD DistortionCoefficients GetDistortionCoefficients() const;
66
74 PEAK_COMMON_NO_DISCARD peak::common::PointF GetFocalLengthPixelSizeRatio() const;
75
76private:
77 friend peak::common::detail::BackendAccessor<IntrinsicParameters>;
78
79 explicit IntrinsicParameters(const peak_icv_intrinsic_parameters& intrinsicParameters);
80 explicit operator peak_icv_intrinsic_parameters() const;
81
82 peak_icv_intrinsic_parameters m_intrinsicParameters{};
83};
84
85inline IntrinsicParameters::IntrinsicParameters(const peak_icv_intrinsic_parameters& intrinsicParameters)
86 : m_intrinsicParameters{ intrinsicParameters }
87{}
88
89inline IntrinsicParameters::operator peak_icv_intrinsic_parameters() const
90{
91 return m_intrinsicParameters;
92}
93
95{
96 return { m_intrinsicParameters.image_size.width, m_intrinsicParameters.image_size.height };
97}
98
100{
101 return peak::common::PointF{ m_intrinsicParameters.principle_point.x, m_intrinsicParameters.principle_point.y };
102}
103
105{
106 std::array<double, 14> coefficients{};
107 memcpy(coefficients.data(), &m_intrinsicParameters.distortion_coefficients, sizeof(m_intrinsicParameters.distortion_coefficients));
108
109 RadialDistortion radial{};
110 auto end = coefficients.begin() + radial.size(); // NOLINT(readability-qualified-auto)
111 std::copy(coefficients.begin(), end, radial.begin());
112
113 TangentialDistortion tangential{};
114 auto begin = end; // NOLINT(readability-qualified-auto)
115 end += tangential.size();
116 std::copy(begin, end, tangential.begin());
117
118 PrismDistortion prism{};
119 begin = end;
120 end += prism.size();
121 std::copy(begin, end, prism.begin());
122
123 TiltDistortion tilt{};
124 begin = end;
125 end += tilt.size();
126 std::copy(begin, end, tilt.begin());
127
128 return { radial, tangential, prism, tilt };
129}
130
132{
133 return { m_intrinsicParameters.focal_length_pixel_size_ratio.x, m_intrinsicParameters.focal_length_pixel_size_ratio.y };
134}
135
136
137} /* namespace icv */
138} /* 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.
std::array< double, 6 > RadialDistortion
Radial distortion coefficients.
std::array< double, 2 > TangentialDistortion
Tangential distortion coefficients.
std::array< double, 4 > PrismDistortion
Prism distortion coefficients.
std::array< double, 2 > TiltDistortion
Tilt distortion coefficients.