Why is there a difference in camera parameters between the ZED SDK API and the ZED Explorer tool?

The ZED Explorer tool displays the camera's RAW color stream without rectifying the frames to correct the distortions caused by the optics. The camera parameters in the "Calibration" tab of the settings window refer to these raw, unrectified frames.

When you use the ZED SDK API functions to retrieve the VIEW::LEFT and VIEW::RIGHT color images you normally get the rectified images used in the ZED SDK processing pipeline to extract the depth information.

C++:

sl::CalibrationParameters calibration_params = zed.getCameraInformation().camera_configuration.calibration_parameters;

Python:

calibration_params = zed.get_camera_information().camera_configuration.calibration_parameters

These parameters are different from the parameters displayed by ZED Explorer:

  1. left and right intrinsic parameters are the same because epipolar lines are aligned on the same row of both images (read here for details about Epipolar Geometry)
  2. distortion parameters are null because images are rectified and distortions are no longer present

Using the following code, you can obtain the RAW parameters of the VIEW::LEFT_UNRECTIFIED and VIEW::RIGHT_UNRECTIFIED images.

C++:

sl::CalibrationParameters calibration_params_raw = zed.getCameraInformation().camera_configuration.calibration_parameters_raw;

Python:

calibration_params_raw = zed.get_camera_information().camera_configuration.calibration_parameters_raw

When comparing the calibration_params_raw obtained in this way to the parameters provided by the ZED Explorer tool you can still notice differences in their values.

This is caused by the Self Calibration behavior of the ZED SDK: when you call the sl::Camera::Open API function, the ZED SDK performs a quick self-calibration procedure to compensate for little variation in the optics caused by temperature changes, vibrations, and eventual little shocks.

You can disable this behavior by setting the parameter camera_disable_self_calib in sl::InitParameters to true.