100 lines
3.1 KiB
Python
100 lines
3.1 KiB
Python
'''Template script for generating trait_estimate configuration JSON files.
|
|
'''
|
|
|
|
import os
|
|
import json
|
|
import glob
|
|
|
|
home = os.path.expanduser("~")
|
|
|
|
#Output path for configuration file
|
|
config_file = "/.json"
|
|
|
|
config_dict = {}
|
|
config_dict['file_type'] = 'envi'
|
|
config_dict["output_dir"] = './'
|
|
config_dict['bad_bands'] =[[300,400],[1337,1430],[1800,1960],[2450,2600]]
|
|
|
|
# Input data settings for NEON
|
|
#################################################################
|
|
# config_dict['file_type'] = 'neon'
|
|
# images= glob.glob("*.h5")
|
|
# images.sort()
|
|
# config_dict["input_files"] = images
|
|
|
|
# Input data settings for ENVI
|
|
#################################################################
|
|
''' Only difference between ENVI and NEON settings is the specification
|
|
of the ancillary datasets (ex. viewing and solar geometry). All hytools
|
|
functions assume that the ancillary data and the image date are the same
|
|
size, spatially, and are ENVI formatted files.
|
|
|
|
The ancillary parameter is a dictionary with a key per image. Each value
|
|
per image is also a dictionary where the key is the dataset name and the
|
|
value is list consisting of the file path and the band number.
|
|
'''
|
|
|
|
config_dict['file_type'] = 'envi'
|
|
aviris_anc_names = ['path_length','sensor_az','sensor_zn',
|
|
'solar_az', 'solar_zn','phase','slope',
|
|
'aspect', 'cosine_i','utc_time']
|
|
images= glob.glob("*img")
|
|
images.sort()
|
|
config_dict["input_files"] = images
|
|
|
|
config_dict["anc_files"] = {}
|
|
anc_files = glob.glob("*ort")
|
|
anc_files.sort()
|
|
for i,image in enumerate(images):
|
|
config_dict["anc_files"][image] = dict(zip(aviris_anc_names,
|
|
[[anc_files[i],a] for a in range(len(aviris_anc_names))]))
|
|
|
|
config_dict['num_cpus'] = len(images)
|
|
|
|
# Assign correction coefficients
|
|
##########################################################
|
|
''' Specify correction(s) to apply and paths to coefficients.
|
|
'''
|
|
|
|
config_dict['corrections'] = ['topo','brdf']
|
|
|
|
topo_files = glob.glob("*topo.json")
|
|
topo_files.sort()
|
|
config_dict["topo"] = dict(zip(images,topo_files))
|
|
|
|
brdf_files = glob.glob("*brdf.json")
|
|
brdf_files.sort()
|
|
config_dict["brdf"] = dict(zip(images,brdf_files))
|
|
|
|
# Select wavelength resampling type
|
|
##########################################################
|
|
'''Wavelength resampler will only be used if image wavelengths
|
|
and model wavelengths do not match exactly
|
|
|
|
See image_correct_json_generate.py for options.
|
|
|
|
'''
|
|
config_dict["resampling"] = {}
|
|
config_dict["resampling"]['type'] = 'cubic'
|
|
|
|
# Masks
|
|
##########################################################
|
|
'''Specify list of masking layers to be appended to the
|
|
trait map. Each will be placed in a separate layer.
|
|
|
|
For no masks provide an empty list: []
|
|
'''
|
|
config_dict["masks"] = [["ndi", {'band_1': 850,'band_2': 660,
|
|
'min': 0.1,'max': 1.0}],
|
|
['neon_edge',{'radius': 30}]]
|
|
|
|
# Define trait coefficients
|
|
##########################################################
|
|
models = glob.glob('*.json')
|
|
models.sort()
|
|
config_dict["trait_models"] = models
|
|
|
|
with open(config_file, 'w') as outfile:
|
|
json.dump(config_dict,outfile)
|
|
|