Other cameras and other numbers of bands

Back to the README

Tested only with the MicaSense RedEdge-P. What follows describes what the program is prepared for, not what has been verified on other cameras. Nothing in the processing depends on there being six bands: the bands are a table of the configuration (name, spectral window and panel reflectance of each band), and the same code runs with 3, 5, 6 or 10 of them.

  • Band table (Reference panel page of the UI; PANEL.reflectance_by_band, PANEL.band_center_wavelengths, PANEL.band_bandwidths and INPUTS.ignored_bands in the configuration). One row per band; rows can be added, renamed and removed. The names must be those written by the camera in XMP:BandName. Un-ticking Use keeps a band that is in the files out of the processing (INPUTS.ignored_bands): without that, a file with a band that is not in the table is an error, so that a missing or extra band is never silently ignored. The panel reflectance of a band is only needed when the source of the reflectance is values.
  • Detect from capture reads the table from the images themselves: the name, central wavelength and bandwidth of each band (XMP:BandName, XMP:CentralWavelength, XMP:WavelengthFWHM), in the order of the rig, and the name and serial number of the camera. A band that looks thermal (a center above 2500 nm, or a name such as LWIR) is left out, and the panel reflectances that were typed are kept for bands with the same name. This is the most reliable way to get the windows of your own camera, because they differ between models and units (the example images give Red 668 / 14 nm; the RedEdge-MX bandwidths of the older units are 20, 20, 10, 10 and 40 nm). From the command line: python -m radiometric_app.radiometric_workflow --detect-bands IMG_0005.
  • Camera presets are JSON files in radiometric_app/presets (those that come with the program) and in config/presets (your own). They fill the band table and the file pattern; the reflectance of the panel belongs to the panel, not to the camera, so a preset does not contain it. The program has the RedEdge-P (the bands of the example images, checked against them by a test), the RedEdge-M/MX (5 bands) and the Altum (5 bands, the thermal band left out); the last two come from the documentation of the manufacturer and were not checked on images, so use Detect from capture to confirm them. To add a camera, add a file (the format is described at the top of radiometric_app/camera_presets.py).
  • File names (INPUTS.file_pattern). The files of a capture are found with a name template (not case sensitive): {capture} stands for the name of the capture (the part shared by the files of its bands), {index} for the number of the file (optional; the files are ordered by it) and * for any other text. The default, {capture}_{index}.tif, is the MicaSense naming (IMG_0010_1.tif). Another naming scheme only needs another template, for example {capture}_MS_*.tif for DJI_0010_MS_G.tif. A regular expression with a group named capture (and, optionally, index) is also accepted when the template cannot describe the names, for example (?P<capture>DJI_\d+)_MS_(?P<band>[A-Z]+)\.tif$. The band of a file always comes from its metadata, never from its name.
  • What the program assumes. The conversion to radiance follows the MicaSense model (vignetting polynomial, black level, row gradient, the three radiometric calibration coefficients, exposure and ISO), which MicaSense uses for the multispectral bands of its cameras; the values of the model are read from the metadata of each image, so they differ between cameras and bands. The thermal band of the Altum does not follow it and is left out. The panel is found from the QR code of a MicaSense panel. A camera that writes the same metadata works with the band table above (the RedEdge-M/MX/P, Altum and Altum-PT should; the radial vignetting model of the older cameras was checked on MicaSense’s RedEdge-MX sample captures, see How the reflectance is calculated; only RedEdge-P flights were available to test, and a dual-camera 10-band set, whose two cameras may write different capture ids, was not tried). A camera with another radiometric model needs its own version of rct.Image (the methods that give the radiance and that find the panel); everything else (the band table, the DLS ratios and checks, the panel regions, the provenance and the UI) is independent of the camera.

This site uses Just the Docs, a documentation theme for Jekyll.