Exif/Xmp tags for radiometric correction


This article documents lists which information in the Exif/Xmp metadata are required or optionally used during the radiometric correction.

The required level of correction can be selected with the correction type, see the radiometric corrections KB article. Depending on the selected level of correction, only a subset of the available information may be used. For example, if camera only correction is selected, sun sensor tags are not considered.



To be able to perform basic camera radiometric corrections, at a minimum the following tags are required:

  • Exif.Photo.ExposureTime
  • Exif.Photo.FNumber
  • Exif.Photo.ISOSpeedRatings

 Further tags are required for a more elaborate correction, as detailed below.

By default, a camera-level radiometric correction is done if at least the three basic tags mentioned above plus either the radiometric sensitivity or the color correction matrix are found.

Dark current

Xmp.Camera.BlackCurrent indicates the dark or black current, i.e. the value without any light. The tag should contain one scalar value per channel, the dark current is assumed uniform for all pixels on this band.

It is also possible to use the standard tags Exif.Image.BlackLevel and Exif.Image.BlackLevelRepeatDim. 

Radiometric sensitivity

Xmp.Camera.BandSensitivity contains the radiometric sensitivity of each channel.


Vignetting is a non-uniformity caused by spatially different transmissivity in the camera. The vignetting map quantifies the spatial transmissivity normalized to a maximum value of 1. Typically, a camera transmits more in the center than at the borders, thus the vignetting map is 1 in the center and smaller than 1 towards the borders. The information for the vignetting map can be provided in the form of an analytical approximation either as a 2D polynomial or as a radial polynomial. 

Radial polynomial

The polynomial is of the form:


with (Cx, Cy) read from Xmp.Camera.VignettingCenter and the coefficients ci read from Xmp.Camera.VignettingPolynomial.

2D polynomial

The polynomial is of the form:


The tag Xmp.Camera.VignettingPolynomial2DName contains the i and j values of c{i,j} and the value of c{i,j} is stored in Xmp.Camera.VignettingPolynomial2D.

For example, Xmp.Camera.VignettingPolynomial2DName={"0,0,1,0, ..., 2,2,3,1"} and Xmp.Camera.VignettingPolynomial2D={0.633287676149, 1.47936368033, ..., -1.58329242609, 0.130259802058} means c_{0,0}=0.633287676149, c_{1,0}=1.47936368033, etc...

Color transform

If the different bands have overlapping spectral sensitivity, a color correction matrix can be applied to unmix the bands. This is a quadratic n x n matrix, where n is the number of channels, and it is applied to each pixel. It is tagged in Xmp.Camera.ColorTransform. 

Invalid pixels

Xmp.Camera.InvalidPixel contains a list of invalid (e.g. hot or dead) pixels, as a list of (x, y) coordinates.


Sun sensor

Some cameras come with a downwelling light sensor (DLS), also called sun sensor, sky sensor, or sunshine sensor, which captures the incoming radiation from the sun.

By default, a sun sensor-level radiometric correction is done if sun sensor value tags are found. Angle correction is done by default if, in addition to the sun sensor value tags, the sun sensor orientation tags are provided, i.e. either the relative angle w.r.t. the camera or an IMU pose.

Sun sensor value

Xmp.Camera.SunSensor contains the raw value (in digital counts), one scalar for each channel of the image. It can also contain an irradiance in physical units if Xmp.Camera.SunSensorExposureTime and Xmp.Camera.SunSensorSensitivity are not tagged.

Xmp.Camera.SunSensorExposureTime contains the exposure time of the sky sensor, in seconds.

Xmp.Camera.SunSensorSensitivity contains the sensitivity of the sky sensor.

Sun sensor orientation

  • If the sky sensor is rigidly connected with the camera and synchronised, the two form a rig. In that case, the relative orientation should be tagged in Xmp.Camera.SunSensorRelativeRotation as Euler angles in the omega, phi, kappa system (same as rig relatives).
  • If there is an IMU embedded in the sun sensor, the orientation should be tagged in Xmp.Camera.SunSensorYaw, Xmp.Camera.SunSensorPitch, and Xmp.Camera.SunSensorRoll (in degree).

Further reading

Was this article helpful?
5 out of 8 found this helpful

Article feedback (for troubleshooting, post here)


  • Oliver Windram


    I see the calibration uses the Exposure Time, F Number, and ISO Speed Rating from the exif metadata to perform the corrections but was wondering what equations or process are used to do this?

  • Avatar
    Momtanu (Pix4D)


    This might help: https://www.sciencedirect.com/science/article/abs/pii/S0034425719301440, you can download the article from here

    Edited by Momtanu (Pix4D)
Article is closed for comments.