Process BRDF¶

Some introductory text here ?

process_brdf.py¶

process_brdf.brdf_land_f1(sza, vza, phi)[source]

F1 function of the Li-Sparse Reciprocal BRDF model

Inputs:
• sun zenith angle (optional): scalar
• view zenith angle (optional): scalar or array [nvza]
• relative azimuth angle (optional): scalar or array [nphi]
Outputs:
• ans: scalar or array [nvza*nphi]
process_brdf.brdf_land_f2(sza, vza, phi)[source]

# F2 function of the Roujean + HS Maignan model

Inputs:
• sun zenith angle (optional): scalar
• view zenith angle (optional): scalar or array [nvza]
• relative azimuth angle (optional): scalar or array [nphi]
Outputs:
• ans: scalar or array [nvza*nphi]
process_brdf.define_angles_polar_plot(vza, step_polar)[source]

Define vza,phi domain for displaying polar plots.

Inputs
• vza scalar
• step_polar scalar
Outputs
• vza array [nvza]
• phi array [nphi]
process_brdf.define_vza_hotspot(sza, vza, phi)[source]

Determine vza depending on sza for display.

Increase resolution around hot spot

Inputs
• sza scalar
• vza array of size [nvza]
• phi scalar
Outputs
• vza array of size [nvza+20]
process_brdf.function_brdf_land(ref, ndvi, cfg, kernels, sza=None, vza=None, phi=None)[source]

Compute BRDF over Land on a pixel basis from the reflectance values on the standard observation geometry and the Ross-Li-Maignan BRDF model, the directional parameters of which are scaled as a function of NDVI

Inputs
• spectral reflectance ref: array [nlmbd]

• ndvi: scalar

• kernels classes including:
• f1: array [nvza*nphi]
• f2: array [nvza*nphi]
• cfg parameters

• sun zenith angle (optional): array [nang]

• view zenith angle (optional): array [nang]

• relative azimuth angle (optional): array [nang]

Outputs
• brdf: array [nlmbd, nang]
process_brdf.function_brdf_land_error(ref, cfg, kernels, ndvi, sza=None, vza=None, phi=None, sza_std=None, vza_std=None, phi_std=None)[source]

Compute the error on BRDF over Land on a pixel basis from the reflectance values on the standard observation geometry and the Ross-Li-Maignan BRDF model

Inputs
• spectral reflectance ref: array [nlmbd]

• cfg parameters

• kernels classes including:
• f1: array [nvza*nphi]
• f2: array [nvza*nphi]
• sun zenith angle (optional): scalar

• view zenith angle (optional): scalar or array [nvza]

• relative azimuth angle (optional): scalar or array [nphi]

• standard sun zenith angle (optional): scalar

• standard view zenith angle (optional): scalar

• standard relative azimuth angle (optional): scalar

Outputs
• err_brdf: array [nlmbd, nvza, nphi]
process_brdf.function_brdf_ocean(ref, wind_speed, cfg, vars_ocean, sza=None, vza=None, phi=None, lmbd=None, multi_dir=False, do_spectral_averaging=None)[source]

Compute BRDF over Oean on a pixel basis from the breon-Henriot model (Cox and Munk) See Breon FM (1993), An analytical model for the Cloud-Free Atmosphere/Ocean system reflectance, Remote Sensing of Environment, Remote Sensing of Environment, 43:179-192 The specular reflectance is computed thanks to Fresnel equation, using the real parti of the water refractive index. The latter comes from http://refractiveindex.info/?group=LIQUIDS&material=Water / G. M. Hale and M. R. Querry. Optical Constants of Water in the 200-nm to 200-microm Wavelength Region, Appl. Opt. 12, 555-563 (1973) doi:10.1364/AO.12.000555

Inputs
• spectral reflectance ref: array [nlmbd]
• wind_speed: scalar
• cfg parameters
• vars_ocean: arrays [nvza*nphi]
• sun zenith angle: array [nang]
• view zenith angle: array [nang]
• relative azimuth angle: array [nang]
• lmbd: array [nlmbd]
• multi_dir: logical
• do_spectral_averaging: logical
Outputs
• brdf: array [nlmbd, nvza, nphi]
process_brdf.function_brdf_snow(cfg, sza=None, vza=None, phi=None, lmbd=None, do_spectral_averaging=False, fit2obs=False, ref_obs=None, data_snow=None)[source]

Rely on the snow spectral BRDF model as implemented in Kokhanovsky et al. (2011) and Kokhanovsky and Breon (2012) (see snow_model function)

Inputs:
• cfg parameters

• sun zenith angle (optional): array [nang]

• view zenith angle (optional): array [nang]

• relative azimuth angle (optional): array [nang]

• lmbd: array [nlmbd]

• do_spectral_averaging: logical

• fit2obs: string

• ref_obs: array [nlmbd_MODIS = 7]

• data_snow dictionnary containing
• fveg: scalar
• snow_grain_size: scalar
• rveg: array [nlmbd, 1, 1]
• rtot: array [nlmbd]
Outputs:
• dictionnary containing:
• refsnow: array [nlmbd,nvza,nphi]
• data_snow: dictionnary
process_brdf.function_init_dir_ocean()[source]
process_brdf.function_init_kernels_land()[source]

Initialisation of the F1 and F2 kernels of the Ross-Li-Maignan BRDF model. The current configuration assumes that SZA is the same for all land pixels. Therefore the kernels will be computed only once. If SZA should vary with land point => comment the initialisation lines in function_brdf_land

process_brdf.function_ocean_foam(cfg, ws, lmbd, do_spectral_averaging=False)[source]
Compute the foam component of ocean reflectance based on
• Koepke P. (1984), Effective reflectance of oceanic whitecaps, Applied Optics, 23:11, 1816-1824. to determine the contribution of the foam reflectance as a function of wind speed
• Kokhanovsky A.A. (2004), Spectral reflectance of whitecaps, Journal of Geophysical Research, 109, C05021, doi:10.1029/2003JC002177 to determine its spectral dependancy

The foam reflectance is assumed isotropic

Inputs
• cfg parameters
• wind_speed: array [nlon*nlat]
• lmbd: array [nlmbd]
• do_spectral_averaging: logical
Outputs
• ref_foam: array [nlon*nlat, nlmbd]
process_brdf.main(reflectance, data, cfg, sza, lmbd, vza, phi, sza_max_limit=None, vza_max_limit=None, beyond_za_limit=None, do_spectral_averaging=None, do_compute_error=False)[source]

Compute the BRDF in the prescribed observation geometry, with a specific treatment depending on the surface (land, snow, or ocean): - Land: Ross-Li HS BRDF model (+ associated uncertainty) - Snow: Kokhanovsky BRDF model - Ocean: Breon-Henriot (from Cox and Munk) Glint model + contribution of the foam

Inputs: - reflectance: array [nlon, nlat, nlmbd] - wind speed: array [nlon, nlat] - cfg parameters - sun zenith angle (optional): array [nang] - view zenith angle (optional): array [nang] - relative azimuth angle (optional): array [nang]

Outputs: - List of 2 elements: - ref_ans: array [nlon, nlat, nlmbd, nang] - ref_err_ans: array [nlon, nlat, nlmbd, nang]

process_brdf.ocean_specular_reflectance(ti, n)[source]

Computation of the specular reflectance over ocean / required for the determination of the BRDF as a function of the wind speed

Specular reflectance is determined thanks to Fresnel equations, accounting only for the real part of the water refractive index and with the view zenith angle = solar zenith angle

Inputs
• incidence angle : scalar or array [nvza*nphi]
• water refractive index: scalar or array [nlmbd]
Outputs
• rho_sp: array [nlmbd, nvza*nphi]
process_brdf.snow_model(cfg, sza, vza, phi, lmbd, kice, snow_grain_size=None, pollutant=0.0, do_invert_snow_grain_size=False, do_invert_pollutant=False, invert_ref_obs=None, invert_ilmbd=None)[source]
• A.A. Kokhanovsky, F.-M. Breon (2012), Validation of an Analytical Snow BRDF Model Using PARASOL Multi-Angular and Multispectral Observations,

IEEE Geoscience and Remote Sensing Letters, 9(5): 928-932 * A.A. Kokhanovsky, V. V. Rozanov, D. Odermatt, C. Brockmann, O. Kruger, M. Bouvet, M. Drusch, and M. Hori (2011) Sizing snow grains using backscattered solar light, Int. J. Remote Sens., vol. 32, no. 22, pp. 6795-7008

Inputs:
• cfg parameters
• sun zenith angle (optional): array [nang]
• view zenith angle (optional): array [nang]
• relative azimuth angle (optional): array [nang]
• lmbd: array [nlmbd]
• kice: array [nlmbd]
• do_invert_snow_grain_size: logical
• invert_ref_obs: scalar
• invert_ilmbd: scalar
Outputs:
• refsnow: array [nlmbd,nang]