11/*
2- Read intrinsic parameters from the Zivid camera (OpenCV model).
2+ Read intrinsic parameters from the Zivid camera (OpenCV model) or estimate them from the point cloud .
33
44Note: This example uses experimental SDK features, which may be modified, moved, or deleted in the future without notice.
55*/
@@ -10,54 +10,120 @@ Note: This example uses experimental SDK features, which may be modified, moved,
1010#include < chrono>
1111#include < iostream>
1212
13- int main ()
13+ namespace
1414{
15- try
15+ void printParameterDelta ( const std::string &label, const double fixed_value, const double estimated_value)
1616 {
17- Zivid::Application zivid;
18-
19- std::cout << " Connecting to camera" << std::endl;
20- auto camera = zivid.connectCamera ();
17+ const auto delta = fixed_value - estimated_value;
18+ if (std::abs (delta) > 0.0 )
19+ {
20+ std::cout << std::right << std::setfill (' ' ) << std::setw (6 ) << label << " : " ;
21+ std::cout << std::right << std::setfill (' ' ) << std::setw (6 ) << std::fixed << std::setprecision (2 ) << delta;
22+ std::cout << " (" << std::right << std::setfill (' ' ) << std::setw (6 ) << std::fixed << std::setprecision (2 )
23+ << (100 * delta) / fixed_value << " % )" ;
24+ std::cout << std::endl;
25+ }
26+ }
2127
22- std::cout << " Getting camera intrinsics" << std::endl;
23- auto intrinsics = Zivid::Experimental::Calibration::intrinsics (camera);
28+ void printIntrinsicParametersDelta (
29+ const Zivid::CameraIntrinsics &fixed_intrinsics,
30+ const Zivid::CameraIntrinsics &estimated_intrinsics)
31+ {
32+ printParameterDelta (
33+ " CX" , fixed_intrinsics.cameraMatrix ().cx ().value (), estimated_intrinsics.cameraMatrix ().cx ().value ());
34+ printParameterDelta (
35+ " CY" , fixed_intrinsics.cameraMatrix ().cy ().value (), estimated_intrinsics.cameraMatrix ().cy ().value ());
36+ printParameterDelta (
37+ " FX" , fixed_intrinsics.cameraMatrix ().fx ().value (), estimated_intrinsics.cameraMatrix ().fx ().value ());
38+ printParameterDelta (
39+ " FY" , fixed_intrinsics.cameraMatrix ().fy ().value (), estimated_intrinsics.cameraMatrix ().fy ().value ());
2440
25- std::cout << intrinsics << std::endl;
41+ printParameterDelta (
42+ " K1" , fixed_intrinsics.distortion ().k1 ().value (), estimated_intrinsics.distortion ().k1 ().value ());
43+ printParameterDelta (
44+ " K2" , fixed_intrinsics.distortion ().k2 ().value (), estimated_intrinsics.distortion ().k2 ().value ());
45+ printParameterDelta (
46+ " P1" , fixed_intrinsics.distortion ().p1 ().value (), estimated_intrinsics.distortion ().p1 ().value ());
47+ printParameterDelta (
48+ " P2" , fixed_intrinsics.distortion ().p2 ().value (), estimated_intrinsics.distortion ().p2 ().value ());
49+ }
2650
51+ void printIntrinsicParametersWithDescription (const Zivid::CameraIntrinsics &intrinsics)
52+ {
2753 std::cout << " Separated camera intrinsic parameters with description:" << std::endl;
2854
29- std::cout << " CX: " << std::left << std::setfill (' ' ) << std::setw (13 )
55+ std::cout << " CX: " << std::left << std::setfill (' ' ) << std::setw (13 ) << std::fixed << std::setprecision ( 2 )
3056 << intrinsics.cameraMatrix ().cx ().value () << Zivid::CameraIntrinsics::CameraMatrix::CX::description
3157 << std::endl;
32- std::cout << " CY: " << std::left << std::setfill (' ' ) << std::setw (13 )
58+ std::cout << " CY: " << std::left << std::setfill (' ' ) << std::setw (13 ) << std::fixed << std::setprecision ( 2 )
3359 << intrinsics.cameraMatrix ().cy ().value () << Zivid::CameraIntrinsics::CameraMatrix::CY::description
3460 << std::endl;
35- std::cout << " FX: " << std::left << std::setfill (' ' ) << std::setw (13 )
61+ std::cout << " FX: " << std::left << std::setfill (' ' ) << std::setw (13 ) << std::fixed << std::setprecision ( 2 )
3662 << intrinsics.cameraMatrix ().fx ().value () << Zivid::CameraIntrinsics::CameraMatrix::FX::description
3763 << std::endl;
38- std::cout << " FY: " << std::left << std::setfill (' ' ) << std::setw (13 )
64+ std::cout << " FY: " << std::left << std::setfill (' ' ) << std::setw (13 ) << std::fixed << std::setprecision ( 2 )
3965 << intrinsics.cameraMatrix ().fy ().value () << Zivid::CameraIntrinsics::CameraMatrix::FY::description
4066 << std::endl;
4167
42- std::cout << " K1: " << std::left << std::setfill (' ' ) << std::setw (13 )
68+ std::cout << " K1: " << std::left << std::setfill (' ' ) << std::setw (13 ) << std::fixed << std::setprecision ( 4 )
4369 << intrinsics.distortion ().k1 ().value () << Zivid::CameraIntrinsics::Distortion::K1::description
4470 << std::endl;
45- std::cout << " K2: " << std::left << std::setfill (' ' ) << std::setw (13 )
71+ std::cout << " K2: " << std::left << std::setfill (' ' ) << std::setw (13 ) << std::fixed << std::setprecision ( 4 )
4672 << intrinsics.distortion ().k2 ().value () << Zivid::CameraIntrinsics::Distortion::K2::description
4773 << std::endl;
48- std::cout << " K3: " << std::left << std::setfill (' ' ) << std::setw (13 )
74+ std::cout << " K3: " << std::left << std::setfill (' ' ) << std::setw (13 ) << std::fixed << std::setprecision ( 4 )
4975 << intrinsics.distortion ().k3 ().value () << Zivid::CameraIntrinsics::Distortion::K3::description
5076 << std::endl;
51- std::cout << " P1: " << std::left << std::setfill (' ' ) << std::setw (13 )
77+ std::cout << " P1: " << std::left << std::setfill (' ' ) << std::setw (13 ) << std::fixed << std::setprecision ( 4 )
5278 << intrinsics.distortion ().p1 ().value () << Zivid::CameraIntrinsics::Distortion::P1::description
5379 << std::endl;
54- std::cout << " P2: " << std::left << std::setfill (' ' ) << std::setw (13 )
80+ std::cout << " P2: " << std::left << std::setfill (' ' ) << std::setw (13 ) << std::fixed << std::setprecision ( 4 )
5581 << intrinsics.distortion ().p2 ().value () << Zivid::CameraIntrinsics::Distortion::P2::description
5682 << std::endl;
83+ }
84+ } // namespace
5785
58- std::string outputFile = " Intrinsics.yml" ;
86+ int main ()
87+ {
88+ try
89+ {
90+ Zivid::Application zivid;
91+
92+ std::cout << " Connecting to camera" << std::endl;
93+ auto camera = zivid.connectCamera ();
94+
95+ std::cout << " Getting camera intrinsics" << std::endl;
96+ const auto intrinsics = Zivid::Experimental::Calibration::intrinsics (camera);
97+
98+ std::cout << intrinsics << std::endl;
99+
100+ const std::string outputFile = " Intrinsics.yml" ;
59101 std::cout << " Saving camera intrinsics to file: " << outputFile << std::endl;
60102 intrinsics.save (outputFile);
103+
104+ printIntrinsicParametersWithDescription (intrinsics);
105+
106+ std::cout
107+ << std::endl
108+ << " Difference between fixed intrinsics and estimated intrinsics for different apertures and temperatures:"
109+ << std::endl;
110+
111+ for (const auto aperture : { 11.31 , 5.66 , 2.83 })
112+ {
113+ const auto settings =
114+ Zivid::Settings{ Zivid::Settings::Experimental::Engine::phase,
115+ Zivid::Settings::Acquisitions{ Zivid::Settings::Acquisition{
116+ Zivid::Settings::Acquisition::Aperture{ aperture } } },
117+ Zivid::Settings::Processing::Filters::Outlier::Removal::Enabled::yes,
118+ Zivid::Settings::Processing::Filters::Outlier::Removal::Threshold{ 5.0 } };
119+ const auto frame = camera.capture (settings);
120+ const auto estimated_intrinsics = Zivid::Experimental::Calibration::estimateIntrinsics (frame);
121+ const auto temperature = frame.state ().temperature ().lens ().value ();
122+ std::cout << std::endl
123+ << " Aperture: " << std::fixed << std::setprecision (2 ) << aperture
124+ << " , Lens Temperature: " << temperature << " \370 C" << std::endl;
125+ printIntrinsicParametersDelta (intrinsics, estimated_intrinsics);
126+ }
61127 }
62128 catch (const std::exception &e)
63129 {
0 commit comments