Details of Irradiance List tag for Sunshine sensor in exif data of Sequoia

Hi guys, I am trying to do radiometric calibration using the sunshine sensor data only (using Irradiance List tag).
I am sure that this tag has BASE64 encoded data. Once you decode the string you get an array of structures where each structure corresponds to a reading of Sunshine sensor. Each structure contains the following elements:

  • Timestamp
  • CH0 count
  • CH1 count
  • Sensor Gain
  • Integration time
  • yaw
  • pitch
  • roll

However, the question of impact of Gain and Integration Time on CH0 count and CH1 count still remain unanswered. Please indicate what would be the impact on CH0 count if gain and integration time are changed.

Hi muzammil360,

The Sunshine sensor behaves like a linear irradiance sensor with no black level.

count ∝ gain(gain_index, reference_gain) * exposure * irradiance

Please note what appears in the IrradianceList tag list is a gain index and not the gain itself, which is a function of gain_index and an arbitrary reference_gain.

The precise gain varies from unit to unit. And can be estimated using the IrradianceCalibrationMeasurement tag.
This tag contains a table of band name, gain index, exposure time in milliseconds, CH0 count, CH1 count in that order for different gain indices. These were all measured under identical lighting conditions. If you choose a reference gain, for instance the one with gain index 1, then you can take the ratios of the counts at different gain indices to obtain the effective gain for that Sunshine sensor.

Thanks domezain for this information!
Could you provide an example of what you are saying?
Let’s say that my IrradianceCalibrationMeasurement looks like this:
0 1 2 3
600 600 600 600
30 740 12363 65535
7 190 3087 65535

What would my sensor’s effective gain be?
Once I have the effective gain, how do I get the irradiance?

Thanks for your help!

Hi pk123,

The data would need to be interpreted in row-major order to match my comment above instead of column-major as you have. But here’s an example with your particular tag.

For CH0 counts:
gain(0, 1) = 30/740 = 0.04
gain(1, 1) = 740/740 = 1.00 (by definition, a band has gain 1 wrt. itself)
gain(2, 1) = 12363/740 = 16.70

Note gain(3, 1) is unknown, as the data is saturated for a 10-bit sensor represented on 16-bit values (count at (2**10-1)*2**6 ). Also note the choice of reference_gain is arbitrary as long as you keep the same reference everywhere.

The same computations would need to be performed for every band (Green, Red, Red edge, NIR) and channel (here I omitted CH1 counts for simplicity)

Since the gain index in the IrradianceList tag is always 1 (as far as I can tell) and the integration time is always 100, then the irradiance is proportional to the count (ch0)?


Though in principle it wouldn’t hurt to scale by both gain and exposure time to be safe. That would work even under different gains and exposure times.

@domenzain, thanks a lot. Your information is really helpful.

I have a few more questions.

  1. The timestamp looks like monotonic. Is it from 1970 or when the sequoia starts, or the last time sequoia was reset?

  2. There is only one sunshine sensor (with only 1 ALS as I presume). How does the data related to 4 bands (cameras) is separated from each other?

I once again want to thank you for the prompt and detailed support.

I’m not sure I understand the second question.

  1. From Sequoia’s power-up:
    This puts all sensor data on the same timeline for a given acquisition relative to each other.
    When you also have a GPS point, then you are able to line up all sensor data to real time to within GPS precision.
  2. Repeat the computation for each band (Green, Red, Red edge, NIR) and channel (CH0, CH1).
    Each band’s image contains the necessary data and metadata to process that band. For example, the IrradianceList and IrradianceCalibrationMeasurement tags on the *REG.TIF images correspond to the Red edge band of the Sunshine sensor.

Is this what you meant?

Hi @domenzain,

Would you also be able to explain what is the CalibrationMeasurement tag about?


  1. For question 1, please correct me if I am wrong. Timeline vector only gives me a dt since Sequoia started. Using dt vector and the GPS time stamp of each image, I can get the exact time of each sunshine sensor reading (ofcourse in GPS time precision).

  2. I understand that each image has it’s own metadata containing the relevant corresponding information. However, I am curious about the source of this different information. If I have only one sunshine sensor (with one Ambient Light Sensor ALS that can look across all bands 300nm to 1100 nm), how do you separate the readings in particular bands!
    One solution might have been to use 4 different ALS with corresponding band filters but I am skeptic about that as it will not be a very accurate solution.

Correct me if I am wrong, but, there is actually 4 Ambient Light Sensors, each with it’s on filter over it. Here’s an image someone posted of it opened up…


  1. Correct
  2. The Sunshine has eight photodiodes. There is a set of four filters under the diffuser which correspond to the filters on the imaging sensors. Under each of these, there are two photodiodes: the CH0 is a bare Silicon photodiode and the CH1 has an extra infrared passband filter.

@js_yellow, there are developer documents coming up regarding the other radiometric metadata. You can safely ignore the CalibrationMeasurement tag. Despite its suggestive name it holds no useful data.

@Jman841, thanks. This makes sense.

@domenzain, its great news that Parrot is finally releasing some documents.

@domenzain, lets say I get correct CH0 and CH1 counts and I also make up for the gain and integration time factor. Now what information does this count convey to me?

  1. How can I relate this count with irradiance having units of W/m^2/sr?

  2. How can that irradiance amount be used for the radiometric calibration process?

Overall I am a bit confused about how the sunshine sensor count works with radiometric calibration process. It would be great if you can refer some paper or other informative material.

I had assumed, probably very naively that it would be as ‘simple’ as working out an EV (Exposure Value) for the irradiance sensor using it’s gain, exposure time and aperture. And then working out the EV for the captured image and using the ratio of EVs to normalize captured image values to the irradiance sensor and then dividing the values to get a reflection percentage for each pixel in the captured image.

@seanmcleod, I don’t think it’ll be that simple. From tests I’ve done, there’s no simple linear relationship between ch0 values (even if corrected for gain and int_time) and the pixel values in photos taken under different light conditions. So ratios won’t work.
Also, there is no simple linear relationship between your image exposure (ISO or shutter speed) and it’s pixel value either (Shutter speed and ISO correction)… So, we need Parrot to give more info in order to be able to apply any corrections… hopefully, they will.

@seanmcleod, Js_yellow is correct. There doesn’t seem to be a simple linear relationship even for exposure correction. Multiplying by the ratio of EV values doesn’t work.

  1. You cannot without further measurements. Nor would you need to do so in general: a reflectance calibration target normalizes the reflectance directly to a known standard.
    You can however relate the count to arbitrary units proportional to W sr^-1 m^-2 (note the proportionality symbol in my equation above).
  2. What do you mean precisely by “radiometric calibration process”?

Have a look at Laboratory Measurement of Bidirectional Reflectance of Radiometric Tarps, it will clear things up. There are many other reference materials for this.

This would work if both sensors had identical solid angles and sensitivities for perfectly Lambertian surfaces at nadir.

As I mentioned above, there are some documents on the way. I am unable to provide an exact release date at present.