Skip to content

Commit 747533c

Browse files
authored
Merge pull request #229 from zivid/MISC-2023-07-17-add-support-for-intrinsics-overloads
Add support for overloads of calibration.intrinsics
2 parents 064ad9d + f063e35 commit 747533c

File tree

3 files changed

+78
-10
lines changed

3 files changed

+78
-10
lines changed

modules/zivid/experimental/calibration.py

+35-5
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,50 @@
33
import _zivid
44
from zivid.calibration import DetectionResult
55
from zivid.camera_intrinsics import _to_camera_intrinsics
6+
from zivid.settings import Settings, _to_internal_settings
7+
from zivid.settings_2d import Settings2D, _to_internal_settings2d
68

79

8-
def intrinsics(camera):
9-
"""Get intrinsic parameters of a given camera.
10+
def intrinsics(camera, settings=None):
11+
"""Get intrinsic parameters of a given camera and settings (3D or 2D).
12+
13+
These intrinsic parameters take into account the expected resolution of the point clouds captured
14+
with the given settings. If settings are not provided, intrinsics appropriate for the camera's
15+
default 3D capture settings is returned.
1016
1117
Args:
1218
camera: A Camera instance
19+
settings: Settings or Settings2D to be used to get correct intrinsics (optional)
1320
1421
Returns:
1522
A CameraIntrinsics instance
23+
24+
Raises:
25+
TypeError: If settings argument is not Settings or Settings2D
1626
"""
17-
return _to_camera_intrinsics(
18-
_zivid.calibration.intrinsics(
19-
camera._Camera__impl # pylint: disable=protected-access
27+
if settings is None:
28+
return _to_camera_intrinsics(
29+
_zivid.calibration.intrinsics(
30+
camera._Camera__impl # pylint: disable=protected-access
31+
)
32+
)
33+
if isinstance(settings, Settings):
34+
return _to_camera_intrinsics(
35+
_zivid.calibration.intrinsics(
36+
camera._Camera__impl, # pylint: disable=protected-access
37+
_to_internal_settings(settings),
38+
)
39+
)
40+
if isinstance(settings, Settings2D):
41+
return _to_camera_intrinsics(
42+
_zivid.calibration.intrinsics(
43+
camera._Camera__impl, # pylint: disable=protected-access
44+
_to_internal_settings2d(settings),
45+
)
46+
)
47+
raise TypeError(
48+
"Unsupported type for argument settings. Got {}, expected Settings or Settings2D.".format(
49+
type(settings)
2050
)
2151
)
2252

src/Calibration/Calibration.cpp

+23-5
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@
1818

1919
#include <vector>
2020

21+
namespace py = pybind11;
22+
2123
namespace ZividPython::Calibration
2224
{
23-
void wrapAsSubmodule(pybind11::module &dest)
25+
void wrapAsSubmodule(py::module &dest)
2426
{
2527
using namespace Zivid::Calibration;
2628

@@ -40,10 +42,26 @@ namespace ZividPython::Calibration
4042
.def("calibrate_eye_in_hand", &Zivid::Calibration::calibrateEyeInHand)
4143
.def("calibrate_eye_to_hand", &Zivid::Calibration::calibrateEyeToHand)
4244
.def("calibrate_multi_camera", &Zivid::Calibration::calibrateMultiCamera)
43-
.def("intrinsics",
44-
[](ReleasableCamera &releasableCamera) {
45-
return Zivid::Experimental::Calibration::intrinsics(releasableCamera.impl());
46-
})
45+
.def(
46+
"intrinsics",
47+
[](ReleasableCamera &releasableCamera) {
48+
return Zivid::Experimental::Calibration::intrinsics(releasableCamera.impl());
49+
},
50+
py::arg("camera"))
51+
.def(
52+
"intrinsics",
53+
[](ReleasableCamera &releasableCamera, const Zivid::Settings &settings) {
54+
return Zivid::Experimental::Calibration::intrinsics(releasableCamera.impl(), settings);
55+
},
56+
py::arg("camera"),
57+
py::arg("settings"))
58+
.def(
59+
"intrinsics",
60+
[](ReleasableCamera &releasableCamera, const Zivid::Settings2D &settings_2d) {
61+
return Zivid::Experimental::Calibration::intrinsics(releasableCamera.impl(), settings_2d);
62+
},
63+
py::arg("camera"),
64+
py::arg("settings_2d"))
4765
.def("estimate_intrinsics", [](ReleasableFrame &releasableFrame) {
4866
return Zivid::Experimental::Calibration::estimateIntrinsics(releasableFrame.impl());
4967
});

test/calibration/test_intrinsics.py

+20
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,26 @@ def test_intrinsics(file_camera):
2424
_check_camera_intrinsics(camera_intrinsics)
2525

2626

27+
def test_intrinsics_with_settings_2d(file_camera):
28+
from zivid.experimental.calibration import intrinsics
29+
from zivid.settings_2d import Settings2D
30+
31+
camera_intrinsics = intrinsics(
32+
camera=file_camera, settings=Settings2D(acquisitions=[Settings2D.Acquisition()])
33+
)
34+
_check_camera_intrinsics(camera_intrinsics)
35+
36+
37+
def test_intrinsics_with_settings_3d(file_camera):
38+
from zivid.experimental.calibration import intrinsics
39+
from zivid.settings import Settings
40+
41+
camera_intrinsics = intrinsics(
42+
camera=file_camera, settings=Settings(acquisitions=[Settings.Acquisition()])
43+
)
44+
_check_camera_intrinsics(camera_intrinsics)
45+
46+
2747
def test_estimate_intrinsics(frame):
2848
from zivid.experimental.calibration import estimate_intrinsics
2949

0 commit comments

Comments
 (0)