Dynamic Calibration tool intrinsics
Hello All,
I am using the D400 series dynamic calibration tool. I see this tool provides an option to read and write calibration directly to/from the camera.
If I need to write intrinsics to RGB, ir1, or ir2 (of a d415 camera), the distortion parameters need to be of Brown Conrady model right?. Also when I read the calibration using the Dynamic calibration tool, the distortion parameters for all the sensors are of the Brown Conrady model, right?. Please let me know.
-
Hi Karthikeyan Yuvraj You can access the intrinsic and extrinsic information of a RealSense camera using the RealSense SDK's rs-enumerate-devices tool. Launching the tool with the instruction rs-enumerate-devices -c provides calibration information.
Using this mode with the D415 camera model returns the following results for the distortion model for each stream type:
Depth: Brown-Conrady
Infrared: Brown-Conrady
Color: Inverse Brown-Conrady
Further information about the distortion models can be found in the RealSense SDK's Projection documentation in the link below.
https://dev.intelrealsense.com/docs/projection-in-intel-realsense-sdk-20#section-distortion-models
-
MartyG: can you please read my question one more time and give a relevant answer?. this is not about rs-enumerate-devices -c
-
Perhaps I was not clear, my bad. The dynamic calibration tool mentions in its documentation that it uses brown's distortion model for all the sensors. does that mean the dynamic calibration tool expects the RGB calibration to be brown's distortion and not the inverse?.
This is the dynamic calibration tool I am using: https://www.intel.com/content/www/us/en/download/645988/29618/intel-realsense-d400-series-dynamic-calibration-tool.html
-
The short answer would be to assume that the Dynamic Calibration Tool is working correctly when performing RGB calibration since it has been in use for years with few problems, and you do not need to think about the distortion model.
A longer answer is that for the most part, the RGB distortion model has been detected correctly on 400 Series camera models since the tool was introduced some years ago. There was an issue where there was a problem with the color distortion model on the D455 camera where the Modified Brown-Conrady model appeared to be used for color instead of Inverse Brown-Conrady but it got corrected with a fix this year. This issue is described in the links below.
https://github.com/IntelRealSense/librealsense/issues/7335
https://github.com/IntelRealSense/librealsense/pull/8759
In summary: you can use the Dynamic Calibration tool with confidence that it will automatically make the necessary calculations correctly.
-
thanks for the reply.
In my approach, I am not using the dynamic calibration tool for calibration. I am only using its read and write capability. The calibration is done by our custom-developed tool and it outputs distortion model as a Brown-Conrady model for rgb, ir1 and ir2.
so if I have a custom-developed calibration tool and just using the read/write of dynamic calibration tool, the input to dynamic calibration tool read/write for rgb intrinsics, expects the distortion model to be of inverse brown Conrady model ?.
-
Are you developing your tool using the Dynamic Calibration API's Programmer's Guide version of the user guide, please?
https://dev.intelrealsense.com/docs/d400-dynamic-calibration-quick-start-guide
Page 21 onwards of this PDF guide describes creating your own calibration tool but using the Dynamic Calibration API's read / write functions.
This section of the guide also suggests referring to Intel's Custom Calibration White Paper for an implementation example.
The paper repeats the phrase you quoted earlier that distortion is "specified as Brown's distortion model ... for left, right and RGB cameras".
I do not have any information that I can add to what is contained in these documents, unfortunately. Basically though, if you write a custom calibration to the camera and then the values that you are receiving when depth is aligned to color are in line with your expectations of what the correct values are then the calibration is likely okay.
-
Thanks for the reply MartyG.Regarding your question:Are you developing your tool using the Dynamic Calibration API's Programmer's Guide version of the user guide, please?No I am not using the dynamic calibration API. I am using my own algorithm.Also from the white paper, it seems like the Brown Conrady should be uploaded to the camera (after estimating the coefficients using opencv). When we read the RGB distortion coefficients from the sensor using pyrealsense API, the coefficients are identical to those uploaded, but I was wondering why the coefficients are labeled as Inverse Brown Conrady? for example:
rgb intrinsics: [ 1920x1080 p[960 540] f[1920 1080] Inverse Brown Conrady [0.16131450235843658, -0.49247947335243225, 0.0, 0.0, 0.41959837079048157] ]
-
The Projection documentation provides the only explanation I know of about the difference between Brown-Conrady and Inverse Brown Conrady. The documentation states that, as the name suggests, Inverse Brown Conrady is an inverse of the model, meaning that it maps from distorted points to undistorted points. The Brown-Conrady model, meanwhile, does the opposite and maps from undistorted points to distorted points.
On the 400 Series stereo depth cameras though, the RealSense SDK usually deliberately forces all coefficients to be zero, for reasons described in the link below.
https://github.com/IntelRealSense/librealsense/issues/1430
An exception to this all-zero coefficients rule is the color stream on the D455 camera model, where the color coefficients are non-zero.
Please sign in to leave a comment.
Comments
9 comments