Monday, 2 December 2019

Build reflectance maps with Python and GDAL


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.



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.


No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...