Camera calibration (intrinsics) parameters in ARCore

camera arcore
arcore camera zoom
arcore camera resolution
arcore focal length
arcore get camera image
arcore coordinate system
arcore sdk
arcore github

Is there any way of getting camera intrinsics parameters from ARCore, similar to what ARKit provides? I've tried using LENS_INTRINSIC_CALIBRATION from ImageMetadata, but evidently this constant is not actually supported (I've tried using it on Pixel 2).

As far as I understand this is certainly not available in ARCore at this point, especially since focal length is locked. I suggest you report this as an issue on the ARCore github and have people write their support for the feature and hopefully it will get implemented!

Intrinsics | ARCore, Any chance to expose camera calibration params? fx, fy, cx, cy can be for We will take your suggestion of directly exposing calibration parameters under Hi, ARCore Unity SDK v1.3.0 lets you obtain the camera intrinsics  Provides information about the physical characteristics of the device camera, for the camera image (CPU) or texture (GPU). The CameraIntrinsics is a long-lived object, and the properties of CameraIntrinsics may be updated every time Session.update() is called.

Camera intrinsics were added to ARCore as of the 1.3 release.

Camera calibration params · Issue #112 · google-ar/arcore-unity-sdk , Tango and AR-Kit provides Intrinsic and distortion parameters. If ARCore can just give us the calibration file it is using, would be nice. See Also: getViewMatrix(float[], int) to conveniently compute the OpenGL View Matrix. getPose() for the physical pose of the camera. It will differ by a local rotation about the Z axis by a multiple of 90°. getAndroidSensorPose() for the pose of the android sensor frame. It will differ in both orientation and location.

For now you can use projection matrix to get fx, fy, cx, cy. But distortion is impossible to obtain, although there is a chance images are already undistorted.

Feature Request: Provide Camera Intrinsics · Issue #112 · google-ar , Effect of camera calibration on an augmented reality scene: Although a ARCore which provide the camera intrinsic parameters per-frame. We will take your suggestion of directly exposing calibration parameters under consideration; it seems reasonable to me. The camera texture has lens distortion and is rendered that way. We realize that it would be desirable to have the camera intrinsics exposed and expect to address this in the future.

Trying a few things inspired by the first step described here, I was able to find the intrinsic parameters for the supported devices in the ARCore APKs. You need to get the apktool and run this in the same folder where you downloaded the ARCore APK (v1.2 in this example):

apktool -q d -s -r ARCore_1_2.apk -o ARCore_1_2

This will create a folder called ARCore_1_2, then go to ./lib/arm64-v8a and unpack libdevice_profile_loader.so (with 7zip for instance) into a new folder for convenience. Then, open the file .rodata in the newly created folder with a text editor. Most of the file's content is formatted as an XML, just look for the name of the phone you're working with and you'll find the intrinsic parameters within the tag . There are also some IMU calibration data and extrinsics, but it's not clear how are they're used.

I haven't tested the parameters myself, but will do in the next few days...

calibDB: enabling web based computer vision through on-the-fly , Core which provide the camera intrinsic parameters per-frame. Al- ternatively ARKit1 or ARCore2 to retrieve calibration information thus limiting computer  Releases the provided camera intrinsics object. ArCameraIntrinsics_getFocalLength (const ArSession *session, const ArCameraIntrinsics *intrinsics, float *out_fx, float *out_fy) void

It's possible. But these parameters are only gettable as well (like in ARKit).

ARCore's class CameraIntrinsics provides information about the physical characteristics of the device camera, for the camera image (CPU) or texture (GPU). The CameraIntrinsics is a long-lived object, and the properties of CameraIntrinsics may be updated every time Session.update() is called.

public class CameraIntrinsics

[PDF] enabling web based computer vision through on-the-fly camera , Many modern camera calibration algorithms estimate these intrinsic parameters as well in the form of non-linear optimisation  Camera intrinsics calibration (pinhole model, distortion parameters, rolling shutter time). Similarly, this often chagnes every time any part of the camera changes (sensor, optics, focus mechanism, camera driver software). Camera extrinsics calibration (position/orientation relative to IMU).

Camera resectioning, intrinsics. A matrix that converts between the 2D camera plane and 3D world on physical characteristics of the device camera and a pinhole camera model. Examining Imaging Parameters Certificates, IDs & Profiles · App Store Connect​. The camera's lens introduces unintentional distortion. The camera uses an anamorphic format, where the lens compresses a widescreen scene into a standard-sized sensor. Errors in camera calibration. In all of these cases, the resulting image has non-square pixels.

intrinsics, Check the minimum requirements from the Google ARCore website. The intrinsic parameters of a camera can be calibrated with a calibration scene or a  Estimate intrinsic and extrinsic camera parameters from several views of a known calibration pattern (every view is described by several 3D-2D point correspondences). Estimate the relative position and orientation of the stereo camera “heads” and compute the rectification transformation that makes the camera optical axes parallel.

ALVAR for Unity, There are different possible ways of finding the transformation from the tracked object to the virtual camera, and the intrinsic parameters. 3.5.1 Manual Adjustment. Camera resectioning is the process of estimating the parameters of a pinhole camera model approximating the camera that produced a given photograph or video. Usually, the pinhole camera parameters are represented in a 3 × 4 matrix called the camera matrix. This process is often called camera calibration, although that term can also refer to photometric camera calibration.

Comments
  • Same in my case. Camera calibration gave some unreliable parameters.
  • Could you explain what you want to do? Maybe it just has another name ...
  • @StevenMohr in any photogrammetry application, camera intrinsics are important. It contains focal length and information related to lens and image sensor
  • I'm using a custom computer vision library essentially doing a variation of SfM. That library needs camera intrinsics in a form of 2x3 matrix (focal lengths and principal point offset). I could derive approximate values from the projection matrix, but this is inconvenient and error-prone. Apple's ARKit provides exactly what I need.
  • @nbsrujan I understand how camera intrinsics are important for photogrammetry, but how would that translate into ARCore. maybe I should be asking DmitryA what he is looking to achieve...
  • Thanks, I noticed @nbsrujan has just created an issue for that.
  • Great. Would you mind linking to the issue here? If you feel like I helped out would much appreciate being marked as answer or some other boost. :)
  • Here is the link to the issue: github.com/google-ar/arcore-android-sdk/issues/112
  • A particular third-party library that I'm using does require camera calibration matrix for processing raw image data and building its own point clouds. Then the results are presented using ARCore.
  • @DmitryA interesting. I'd love to know what you're building!