OpticalCalibration¶
Perform optical calibration TOA/TOC (Top Of Atmosphere/Top Of Canopy). Supported sensors: QuickBird, Ikonos, WorldView2, Formosat, Spot5, Pleiades, Spot6, Spot7. For other sensors the application also allows providing calibration parameters manually.
Description¶
The application allows converting pixel values from DN (for Digital Numbers) to reflectance. Calibrated values are called surface reflectivity and its values lie in the range [0, 1]. The first level is called Top Of Atmosphere (TOA) reflectivity. It takes into account the sensor gain, sensor spectral response and the solar illuminations. The second level is called Top Of Canopy (TOC) reflectivity. In addition to sensor gain and solar illuminations, it takes into account the optical thickness of the atmosphere, the atmospheric pressure, the water vapor amount, the ozone amount, as well as the composition and amount of aerosol gasses. It is also possible to indicate an AERONET file which contains atmospheric parameters (version 1 and version 2 of Aeronet file are supported. Note that computing TOC reflectivity will internally compute first TOA and then TOC reflectance.
If the sensor is not supported by the metadata interface factory of OTB, users still have the possibility to give the needed parameters to the application. For TOA conversion, these parameters are:
day and month of acquisition, or flux normalization coefficient, or solar distance (in AU);
sun elevation angle;
gains and biases, one pair of values for each band (passed by a file);
solar illuminations, one value for each band (passed by a file).
For the conversion from DN (for Digital Numbers) to spectral radiance (or ‘TOA radiance’) L, the following formula is used:
(1) L(b) = DN(b)/gain(b)+bias(b) (in W/m2/steradians/micrometers) with b being a band ID.
These values are provided by the user thanks to a simple txt file with two lines, one for the gains and one for the biases. Each value must be separated with colons (:), with eventual spaces. Blank lines are not allowed. If a line begins with the ‘#’ symbol, then it is considered as comments. Note that sometimes, the values provided by certain metadata files assume the formula L(b) = gain(b)*DC(b)+bias(b). In this case, be sure to provide the inverse gain values so that the application can correctly interpret them.
In order to convert TOA radiance to TOA reflectance, the following formula is used:
(2) R(b) = (pi*L(b)*d*d) / (ESUN(b)*cos(θ)) (no dimension) where:
L(b) is the spectral radiance for band b
pi is the famous mathematical constant (3.14159…)
d is the earth-sun distance (in astronomical units) and depends on the acquisition’s day and month
ESUN(b) is the mean TOA solar irradiance (or solar illumination) in W/m2/micrometers
θ is the solar zenith angle in degrees.
Note that the application asks for the solar elevation angle, and will perform the conversion to the zenith angle itself (zenith_angle = 90 - elevation_angle , units: degrees). Note also that ESUN(b) not only depends on the band b, but also on the spectral sensitivity of the sensor in this particular band. In other words, the influence of spectral sensitivities is included within the ESUN different values. These values are provided by the user thanks to a txt file following the same convention as before. Instead of providing the date of acquisition, the user can also provide a flux normalization coefficient or a solar distance (in AU) ‘fn’. The formula used instead will be the following :
(3) R(b) = (pi*L(b)) / (ESUN(b)*fn*fn*cos(θ))
Whatever the formula used (2 or 3), the user should pay attention to the interpretation of the parameters he will provide to the application, by taking into account the original formula that the metadata files assumes.
Below, we give two examples of txt files containing information about gains/biases and solar illuminations :
gainbias.txt :
Important Note : For Pleiade image calibration, the band order is important, it should be given as : Red, Green, Blue, NIR (B2,B1,B0,B3).
solarillumination.txt :
Finally, the ‘Logs’ tab provides useful messages that can help the user in knowing the process different status.
Parameters¶
Input -in image
Mandatory
Input image filename
Output -out image [dtype]
Mandatory
Output calibrated image filename
Calibration Level -level [toa|toatoim|toc]
Default value: toa
Image to Top Of Atmosphere reflectance
TOA reflectance to Image
Image to Top Of Canopy reflectance (atmospheric corrections)
Convert to milli reflectance -milli bool
Default value: false
Flag to use milli-reflectance instead of reflectance.
This allows saving the image with integer pixel type (in the range [0, 1000] instead of floating point in the range [0, 1]. In order to do that, use this option and set the output pixel type (-out filename double for example)
Clamp of reflectivity values between [0, 1] -clamp bool
Default value: true
Clamping in the range [0, 1]. It can be useful to preserve area with specular reflectance.
Acquisition parameters¶
This group allows setting the parameters related to the acquisition conditions.
Minute -acqui.minute int
Default value: 0
Minute (0-59)
Hour -acqui.hour int
Default value: 12
Hour (0-23)
Day -acqui.day int
Default value: 1
Day (1-31)
Month -acqui.month int
Default value: 1
Month (1-12)
Year -acqui.year int
Default value: 2000
Year
Flux Normalization -acqui.fluxnormcoeff float
Flux Normalization Coefficient
Solar distance -acqui.solardistance float
Solar distance (in AU)
Sun angles¶
This group contains the sun angles
Sun elevation angle (deg) -acqui.sun.elev float
Default value: 90
Sun elevation angle (in degrees)
Sun azimuth angle (deg) -acqui.sun.azim float
Default value: 0
Sun azimuth angle (in degrees)
Viewing angles¶
This group contains the sensor viewing angles
Viewing elevation angle (deg) -acqui.view.elev float
Default value: 90
Viewing elevation angle (in degrees)
Viewing azimuth angle (deg) -acqui.view.azim float
Default value: 0
Viewing azimuth angle (in degrees)
Gains and biases -acqui.gainbias filename [dtype]
A text file containing user defined gains and biases
Note: for Pleiades products, if the user does not give this parameter, the gain and bias values are read by default in the DIMAP. If they are not found in the DIMAP, they are taken from hard-coded tables, given by the calibration team.
Solar illuminations -acqui.solarilluminations filename [dtype]
Solar illuminations (one value per band, in W/m^2/micron)
Atmospheric parameters (for TOC)¶
This group allows setting the atmospheric parameters.
Aerosol Model -atmo.aerosol [noaersol|continental|maritime|urban|desertic]
Default value: noaersol
No Aerosol Model
Continental
Maritime
Urban
Desertic
Ozone Amount (cm-atm) -atmo.oz float
Default value: 0
Stratospheric ozone layer content (in cm-atm)
Water Vapor Amount (g/cm2) -atmo.wa float
Default value: 2.5
Total water vapor content over vertical atmospheric column (in g/cm2)
Atmospheric Pressure (hPa) -atmo.pressure float
Default value: 1030
Atmospheric Pressure (in hPa)
Aerosol Optical Thickness -atmo.opt float
Default value: 0.2
Aerosol Optical Thickness (unitless)
Aeronet File -atmo.aeronet filename [dtype]
Aeronet file containing atmospheric parameters
Relative Spectral Response File -atmo.rsr filename [dtype]
Sensor relative spectral response file
By default the application gets this information in the metadata
Window radius (adjacency effects) -atmo.radius int
Default value: 2
Window radius for adjacency effects correctionsSetting this parameters will enable the correction ofadjacency effects
Pixel size (in km) -atmo.pixsize float
Default value: 1
Pixel size (in km) used tocompute adjacency effects, it doesn’t have tomatch the image spacing
Available RAM (MB) -ram int
Default value: 256
Available memory for processing (in MB).
Examples¶
From the command-line:
otbcli_OpticalCalibration -in QB_1_ortho.tif -level toa -out OpticalCalibration.tif
From Python:
import otbApplication
app = otbApplication.Registry.CreateApplication("OpticalCalibration")
app.SetParameterString("in", "QB_1_ortho.tif")
app.SetParameterString("level","toa")
app.SetParameterString("out", "OpticalCalibration.tif")
app.ExecuteAndWriteOutput()