118 lines
3.0 KiB
Python
118 lines
3.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
HyTools: Hyperspectral image processing library
|
|
|
|
Copyright (C) 2021 University of Wisconsin
|
|
|
|
Authors: Adam Chlus, Zhiwei Ye, Philip Townsend.
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, version 3 of the License.
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
JSON format for PLSR trait models v0.1
|
|
|
|
This version assumes that all transforms are applied using all model wavelengths.
|
|
|
|
TODO: Develop standard codes for spectrometer, both airborne/spaceborne and field.
|
|
TODO: Allow for more options for specifying wavelength subsets
|
|
|
|
"""
|
|
|
|
|
|
import json
|
|
|
|
model_dict = {}
|
|
|
|
# Metadata
|
|
#####################################
|
|
'''
|
|
trait : Trait name (str)
|
|
units : Trait units (str)
|
|
description: Model description (str)
|
|
wavelength_units: Wavelength units (str)
|
|
wavelengths : Model wavelengths (list)
|
|
Only wavelengths used in the model should be
|
|
included in the list of wavelengths.
|
|
fwhm : Model fwhm (list)
|
|
type : Model type (str)
|
|
'''
|
|
model_dict["name"] = ''
|
|
model_dict["units"] = ''
|
|
model_dict["description"] = ''
|
|
model_dict["wavelength_units"] = ''
|
|
model_dict["wavelengths"] = []
|
|
model_dict["fwhm"] = []
|
|
model_dict["spectrometer"] = ''
|
|
model_dict["type"] = ''
|
|
|
|
# Diagnostics
|
|
#####################################
|
|
'''Currently the only required diagnostics are 'min'
|
|
and 'max', these are the min and max values of the
|
|
dataset used to build the model and are used to generate
|
|
the data range mask, which identifies pixels with predictions
|
|
outside of the model dataset range.
|
|
|
|
'''
|
|
model_dict["model_diagnostics"] = {}
|
|
model_dict["model_diagnostics"]["rmse"] = 0.0
|
|
model_dict["model_diagnostics"]["r_squared"] = 0.0
|
|
model_dict["model_diagnostics"]["min"] = 0.0
|
|
model_dict["model_diagnostics"]["max"] = 0.0
|
|
|
|
# Model
|
|
#####################################
|
|
'''
|
|
transform: List of transforms to be applied in order of application.
|
|
Options:
|
|
- 'vector': vector norm using np.linalg.norm
|
|
- 'mean' : Normalize to mean
|
|
- 'absorb' : log(1/R)
|
|
Examples:
|
|
['vector','absorb']
|
|
Empty list for no transforms ([])
|
|
coefficients: List of lists, sublists are the coefficients for
|
|
model iterations.
|
|
|
|
intercepts : Permuted model intercepts (list)
|
|
components : Number of model component (int)
|
|
'''
|
|
|
|
model_dict['model'] = {}
|
|
model_dict['model']["components"] = 0
|
|
model_dict['model']["transform"] = ['mean']
|
|
model_dict['model']["intercepts"] = []
|
|
model_dict['model']["coefficients"] =[[],[]]
|
|
|
|
model_path = '*.json'
|
|
with open(model_path, 'w') as outfile:
|
|
json.dump(model_dict,outfile)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|