Information about intrinsic camera data?

Hello everyone,

is there a way to obtain the calibration/registration parameters and intrinsic parameters
of the depth and color sensor?
Specifically I need the focal lengths and center of projection of
both cameras for my own calculation purposes. It’d be nice to have the distortion parameters too.

There is the API function astra_depthstream_get_depth_to_world_data, but there is no description what this data consists off.

Thanks in advance.

The camera intrinsics are not available, unfortunately. The horizontal and vertical field of view are available through horizontalFieldOfView() and verticalFieldOfView() on depth and color and IR streams. You will need to your own calibration for the other intrinsic parameters. (Depth and IR intrinsics would be the same, so just use IR mode for calibration.)

astra_depthstream_get_depth_to_world_data provides the conversion_cache_t struct, defined in https://github.com/orbbec/astra/blob/master/include/AstraUL/streams/depth_types.h#L7-L16:

    float xzFactor;
    float yzFactor;
    float coeffX;
    float coeffY;
    int resolutionX;
    int resolutionY;
    int halfResX;
    int halfResY;
} conversion_cache_t;```

This is used internally by astra_convert_depth_to_world and astra_convert_world_to_depth (and the C++ wrappers, coordinate_mapper::convert_depth_to_world and coordinate_mapper::convert_world_to_depth). 
https://github.com/orbbec/astra/blob/master/src/AstraUL/depth_capi.cpp#L42-L74 

The conversion_cache is fetched once per depthstream. Because these parameters don't change for the lifetime of a program, this allows better performance than calling all the way back to the plugin for each point.

Thank you for the information.

Hello!
You said “Depth and IR intrinsics would be the same, so just use IR mode for calibration”, but in fact it isn’t. See this image: Dropbox - IR_Depth_orbbec.png - Simplify your life (it is IR stream overlapped by Depth stream with disabled “Registration” option). As you can see there is a shift in y-direction.
I tried ASUS Xtion sensor with your driver (libORBBEC.so) and there wasn’t such issue. So I think it’s firmware problem of Orbbec sensors. Any suggestions?

Yes, there is an offset of about 8 pixels in Y at VGA resolution. If I remember correctly the source of this is that the depth image is cropped differently than the IR image. Josh or David may be able to provide more information.

1 Like