Python GDAL – Building Reflectance Maps with Python and GDAL

gdalmulti-bandpythonraster-calculatorremote sensing

I would like know how to calculate a reflectance map for each band (RGB) in an image. The imagery was captured using a Ricoh GRII from a Fixed wing UAV, the UAV does not have an irradiance sensor mounted.

The reason for doing this is; I was wanting to use the reflectance values to classify vegetation, water and bare earth in a point cloud (608,434,398 points). To do this I was hoping I could leverage the power of Python and GDAL.

I am currently learning python.

Best Answer

This is a non-trivial problem. One solution is to collect ground reflectance spectra coincident with the time of UAV flight. The reference spectra may consist of white, grey and black panels that are placed on the ground in a visible location. A spectral radiometer is then used to measure the reflectance of each calibration panel.

The radiometer readings are then used to perform an empirical line calibration. This is essentially a linear regression between the raw DN values recorded by the UAV and the ground reflectance spectra recorded by the radiometer. This is done individually for each spectral band.

The black and white calibration panels should ideally be the darkest and brightest objects in the scene (this prevents unwanted extrapolation which can lead to poor results). The grey reflectance panel should fall in between these two min-max values, however a non-linear correction my be applied if this is not the case:

Empirical line example

Once you have the linear relationship for each band, you can apply the correction using band math or raster calculator functions in GDAL or QGIS.

References: Smith, G. M., & Milton, E. J. (1999). The use of the empirical line method to calibrate remotely sensed data to reflectance. International Journal of remote sensing, 20(13), 2653-2662.

Related Question