diff --git a/read_data.py b/read_data.py index e7782854888877d097b4bd39486c4215b4819fbb..e43faf37a18357100110ca1b97796a3e7fbf7a8b 100644 --- a/read_data.py +++ b/read_data.py @@ -148,8 +148,8 @@ def get_data(file_names: Dict[str, str], viirs_data = read_data('viirs', f'{mod02}', f'{mod03}') viirs_data = read_ancillary_data(file_names, viirs_data) - m01 = viirs_data.M01.values - m02 = viirs_data.M02.values + m01 = viirs_data.M05.values + m02 = viirs_data.M07.values r1 = 2.0 * (np.power(m02, 2.0) - np.power(m01, 2.0)) + (1.5 * m02) + (0.5 * m01) r2 = m02 + m01 + 0.5 r3 = r1 / r2 diff --git a/restoral.py b/restoral.py index efb6ae1a9e4afd36477e13e9287cbaf6ed517c0c..4438e8d7a60162c87e10da0921c1f2e2646de384 100644 --- a/restoral.py +++ b/restoral.py @@ -47,7 +47,7 @@ def sunglint(viirs_data, threshold, bit, conf): def spatial(viirs_data, threshold, scene, conf): - m02 = viirs_data.M02.values + m02 = viirs_data.M07.values m31 = viirs_data.M15.values var_m31 = spatial_var(m31, 0.40) @@ -63,3 +63,59 @@ def spatial(viirs_data, threshold, scene, conf): conf[idx] = 0.67 return conf + + +def land(viirs_data, threshold, scene, conf): + m04 = viirs_data.M04.values.ravel() + m05 = viirs_data.M08.values.ravel() + m20 = viirs_data.M12.values.ravel() + m22 = viirs_data.M13.values.ravel() + m31 = viirs_data.M15.values.ravel() + eco = viirs_data.eco.values.ravel() + desert = scene['desert'].ravel() + conf = conf.ravel() + tbadj = 0 + ldsbt11bd = np.array(threshold['Land_Restoral']['ldsbt11bd']) + ldsbt11 = np.array(threshold['Land_Restoral']['ldsbt11bd']) + + irclr = 1 + hds11 = np.ones((eco.shape[0], 3)) * (ldsbt11 - tbadj) + hds11[eco == 8, :] = ldsbt11bd - tbadj + + if irclr == 1: + conf[m31 > hds11[:, 2]] = 1 + conf[(m31 > hds11[:, 1]) & (m31 <= hds11[:, 2])] = 0.96 + conf[m31 <= hds11[:, 1]] = 0.5 + + m5_4_thr = np.full(eco.shape, threshold['Land_Restoral']['ldr5_4_thr']) + m5_4_thr[desert == 1] = threshold['Land_Restoral']['ldsr5_4_thr'] + + m5_4 = m05/m04 + md1 = m20 - m22 + md2 = m22 - m31 + + idx = np.nonzero((md1 < threshold['Land_Restoral']['ld20m22']) & + (md2 < threshold['Land_Restoral']['ld22m31']) & + (m5_4 > m5_4_thr) & + (conf <= 0.95)) + conf[idx] = 0.96 + + conf = conf.reshape(viirs_data.M01.shape) + return conf + + +def coast(viirs_data, threshold, scene, conf): + + m01 = viirs_data.M05.values + m02 = viirs_data.M07.values + coast_ndvi = threshold['Coastal_NDVI_Thresholds']['coast_ndvi'] + + irclr = 1 + + if irclr == 1: + ndvi = (m02 - m01)/(m01 + m02) + + idx = np.nonzero((ndvi <= coast_ndvi[0]) | (ndvi >= coast_ndvi[1])) + conf[idx] = 1 + + return conf diff --git a/spectral_tests.py b/spectral_tests.py index 7ee812f0e62301e398eacfa6cd712d10b93dd091..73ee1eb9af52d1cb58c8f3cc6038dc30b614ab06 100644 --- a/spectral_tests.py +++ b/spectral_tests.py @@ -21,6 +21,7 @@ _DTR = np.pi/180 # this is used for testing, eventually we want to remove it importlib.reload(preproc) importlib.reload(conf) +importlib.reload(restoral) class CloudTests(object): @@ -492,12 +493,22 @@ class ComputeTests(CloudTests): idx = np.nonzero((scene_flags['water'] == 1) & (scene_flags['ice'] == 0) & (scene_flags['uniform'] == 1) & (cmin <= 0.99) & (cmin >= 0.05)) - # cmin[idx] = restoral.spatial(self.data, self.thresholds['Sun_Glint'], scene_flags, cmin)[idx] + cmin[idx] = restoral.spatial(self.data, self.thresholds['Sun_Glint'], scene_flags, cmin)[idx] idx = np.nonzero((scene_flags['water'] == 1) & (scene_flags['sunglint'] == 1) & (scene_flags['uniform'] == 1) & (cmin <= 0.95)) cmin[idx] = restoral.sunglint(self.data, self.thresholds['Sun_Glint'], total_bit, cmin)[idx] + idx = np.nonzero((scene_flags['day'] == 1) & (scene_flags['land'] == 1) & + (scene_flags['snow'] == 0) & (scene_flags['ice'] == 0) & + (cmin <= 0.95)) + cmin[idx] = restoral.land(self.data, self.thresholds, scene_flags, cmin)[idx] + + idx = np.nonzero((scene_flags['day'] == 1) & (scene_flags['land'] == 1) & + (scene_flags['coast'] == 1) & (scene_flags['snow'] == 0) & + (scene_flags['ice'] == 0)) + cmin[idx] = restoral.coast(self.data, self.thresholds, scene_flags, cmin)[idx] + return cmin