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


@clement.fallet & @domenzain, I completely agree to @pk123 and @seanmcleod. Pix4D is more or less useless for me in terms of my research work.

Parrot should clearly indicate what corrections we would be able to perform and what we would not be able to perform due to Parrot’s personal confidentiality agreements. I would like to put a basic list of corrections:

  1. Black Current Compensatin
  2. Vignette Compensation
  3. Exposure Compensation (ISO + Shutter speed)
  4. Radiometric Calibration
    4.1 Using Micasense Panel only
    4.2 Using Micasense + Sunshine Sensor (Irradiance List)
    4.3 Using Sushine sensor only
    4.4 Sun angle correction
  5. Fisheye Correction
  6. Image Registration (alignment of different bands)

I believe some information regarding the expected release document would help both the parrot and Sequoia developer/research community.


@muzammil360: thank you for making it extremely clear for me to understand your demands.

We’ll get back to you with an announcement in the coming days stating what to expect

best regards


Here is a snippet of code in Python to decode the IrradianceList tag which is an array of the following structure:

uint64_t timestamp (us)
uint16_t CH0 (count)
uint16_t CH1 (count)
uint16_t gain index
uint16_t integration time (ms)
float    yaw
float    pitch
float    roll

It looks like the sunshine sensor logs data at 5Hz.

import sys
import os
import glob
import exiftool
import base64
import struct

irradiance_list_tag = 'XMP:IrradianceList'
irradiance_calibration_measurement_golden_tag = 'XMP:IrradianceCalibrationMeasurementGolden'
irradiance_calibration_measurement_tag = 'XMP:IrradianceCalibrationMeasurement'

tags = [ irradiance_list_tag, irradiance_calibration_measurement_tag ]

directory = 'test'

channels = [ 'RED', 'NIR' ]

index = 0

for channel in channels:
    files = glob.glob(os.path.join(directory, '*' + channel + '*'))
    with exiftool.ExifTool() as et:
        metadata = et.get_tags_batch(tags, files)
        for file_metadata in metadata:
            irradiance_list = file_metadata[irradiance_list_tag]
            irradiance_calibration_measurement = file_metadata[irradiance_calibration_measurement_tag]

            irradiance_list_bytes = base64.b64decode(irradiance_list)

            index += 1

            for irradiance_data in struct.iter_unpack("QHHHHfff", irradiance_list_bytes):

Some sample output:

(305450198, 2712, 678, 1, 100, -176.65206909179688, 14.487373352050781, -2.3586034774780273)
(305649993, 2975, 743, 1, 100, -177.49917602539062, 12.91478157043457, -3.684767007827759)
(305853880, 3313, 828, 1, 100, -175.5269012451172, 11.912470817565918, -6.285056114196777)
(306056894, 3557, 889, 1, 100, -172.70018005371094, 9.969759941101074, -9.783087730407715)
(306252229, 3784, 945, 1, 100, -172.89474487304688, 9.146184921264648, -9.128634452819824)
(306449090, 3869, 967, 1, 100, -173.9973602294922, 5.676121234893799, -10.742831230163574)
(306649644, 3844, 960, 1, 100, -171.62594604492188, 1.8265786170959473, -12.721040725708008)
(306849148, 3845, 960, 1, 100, -171.8560791015625, 1.8103898763656616, -12.682068824768066)
(307047905, 3794, 948, 1, 100, -173.06724548339844, -1.9556128978729248, -12.612716674804688)

Reflectance Estimation

@seanmcleod, thanks for sharing your code!


A post was split to a new topic: Sun’s elevation and azimuth calculation


Have you calculated some irradiance from the example above ?? If so, please share the example I am not getting the point here. My objective is to calculate the Irradiance for each sensor.


Ch0 values in the example are proportional to irradiance.


Yes but let’s say I want to calculate the Irradiance it will be something like:

Irradiance = count / gain(gain_index, reference_gain) * exposure

Right ??


@Jule take a look at the formula that @domenzain posted and note the proportional symbol that he used rather than an equals symbol.


@Jule, @seanmcleod

Concretely, Sequoia is designed to measure reflectance, not irradiance.

As mentioned above in response to @muzammil360 (here):
The units are not SI units.
Even field spectrometers (and most laboratory spectrometers) are not calibrated in that sense.
If they are, it will depend on whether it is through vacuum or air (and the air temperature, and its humidity and slight movements in the optics and…).

To be more precise:
Units are homogeneous to SI units, but have an arbitrary scaling factor.
I recommend the mentioned article, as it walks through the typical remote-sensing application.

If you have a spectral-radiance-calibrated light source, then with a very careful measurement you can figure out the exact scaling to obtain SI units. This is more than likely not what you intend.


@domenzain are you referring to this article?


@seanmcleod Yes. This gives solid advice on the hypotheses that are made and the formulas that should be used.


@domenzain let’s take the simplest case.

My drone is flying along above a farmer’s field and let’s assume that the sun is at zenith and that both the sunshine sensor and the Sequoia cameras have a pitch and roll angle of 0 degrees so the cameras are pointing at nadir.

And assume there are no clouds.

And the Sequoia takes two images (Image1 and Image2) 1s apart and assume there is a large overlap between the 2 images e.g. of 70%.

So now I have the following data:

(Image1_pixel_value, Image1_iso, Image1_aperture, Image1_exposuretime, Image1_ch0, Image1_gainindex, Image1_integrationtime)

(Image2_pixel_value, Image2_iso, Image2_aperture, Image2_exposuretime, Image2_ch0, Image2_gainindex, Image2_integrationtime)

So how do I calculate the reflectance value for the Image1 pixel?

And if we assume that the Image1_pixel_value and Image2_pixel_value overlap and refer to the same ground point can we use that to get a better estimate of the reflectance value?



@seanmcleod, I think we are missing some info in order to do what you are proposing. Even if we assumed that both of your images were taken at the same ISO and exposure time, I think you’d need to know the sensitivity of both the sunshine sensor and the sequoia sensor to each of the 4 bands in order to calculate reflectance. For example, looking at the graph I posted earlier, it seems that the sunshine sensor is much less sensitive to the RedEdge than to other bands.


@pk123 yes but the sensitivity/quantum efficiency of the two sensors is known by Parrot and they’ve even published at least a fairly rough (resolution wise) version of it online in their marketing material.

They’ve used the same filters for each band on the sunshine sensor and the multi-spectral sensors and would know the lens information for each etc.

In terms of the RedEdge you’ll notice that the filter band is much narrower compared to the other bands.


Please see the reflectance estimation topic for details on this.


Dear all,
I have read all in this forum and I am still confused for this question.
@domenzain you said Sequoia is designed for measuring the reflectance value rather than the irradiance, but in the files of converting irradiance to reflectance, you pointed the key point is to getting the K, which means the ratio of the irradance of sunshine sensor and the irradiance of sequoia sensor can be calculated by the tags in the exif, so I want to know how to get the precise value of the irradiance of sunshine sensor, now I have known how to calculate the irradiance value of sequoia sensor.

Please directly give me the solution rather than give me another links. Thanks very much!


dear @elliot1993
please read carefully this topic as everything you ask is detailed here.



I have already read and i think there are some contents are chaotic.
Firstly the objective of sequoia is to measure what? If it is the reflectance, then how can I get the information directly?
Secondly, you tell us the R = K* Sunshine/sequoia, the value of sunshine and sequoia in the equation is what? irradiance or some others? and how can I calculate them?
All of these are not clearly and directly displayed and so I wish get a specific solution from you. Thanks and wish your reply. I really do not want a link.


Dear Domenzain,

I do not understand why you choose 1 as the reference_gain, can we use 0,1,2,3 from gain_index as the reference_gain?
And you said the reference_gain is arbitrary as long as we keep a same for everywhere, does it affect the final results of the sunshine sensor irradiance calculation?

Wish your reply