diff --git a/minigrida/descriptors/max_aps.py b/minigrida/descriptors/max_aps.py new file mode 100644 index 0000000..0a3c932 --- /dev/null +++ b/minigrida/descriptors/max_aps.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python +# file max_aps.py +# author Florent Guiotte +# version 0.0 +# date 31 mai 2020 +"""Abstract + +doc. +""" + +import numpy as np +import sap +from joblib import Memory + +memory = Memory(location='cache/', verbose=0) + + +@memory.cache +def _max_attribute_profiles(image, attribute, adjacency=4, image_name=None, + filtering_rule='direct'): + maxt = sap.MaxTree(image, adjacency, image_name) + return sap.create_profiles(maxt, attribute, 'altitude', + filtering_rule, 'max attribute profiles') + + +def run(gt, rasters, coords, remove, attributes, adjacency='4', + filtering='direct'): + X = [] + y = [] + groups = [] + Xn = None + + for i, (gti, rastersi, coordsi) in enumerate(zip(gt, rasters, coords)): + # Compute EAP + eap = [] + for name, raster in rastersi.items(): + eap += [_max_attribute_profiles(raster, attributes, adjacency, name, filtering)] + eap = sap.concatenate(eap) + + Xn = [' '.join((a['tree']['image_name'], + a['attribute'], + *[str(v) for v in p.values()])) + for a in eap.description for p in a['profiles']] if not Xn else Xn + + # Create vectors + X_raw = np.moveaxis(np.array(list(eap.vectorize())), 0, -1) + y_raw = gti + + # Remove unwanted label X, y + lbl = np.ones_like(y_raw, dtype=np.bool) + for l in remove if remove else []: + lbl &= y_raw != l + + X += [X_raw[lbl]] + y += [y_raw[lbl]] + groups += [np.repeat(coordsi, lbl.sum())] + + X = np.concatenate(X) + y = np.concatenate(y) + groups = np.concatenate(groups) + Xn = rasters[0].keys() + + return X, y, groups, Xn diff --git a/minigrida/descriptors/sdaps.py b/minigrida/descriptors/sdaps.py new file mode 100644 index 0000000..1e588d6 --- /dev/null +++ b/minigrida/descriptors/sdaps.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python +# file sdaps.py +# author Florent Guiotte +# version 0.0 +# date 31 mai 2020 +"""Abstract + +doc. +""" + +import numpy as np +import sap +from joblib import Memory + +memory = Memory(location='cache/', verbose=0) + + +@memory.cache +def _self_dual_attribute_profiles(*kwargs): + return sap.self_dual_attribute_profiles(*kwargs) + + +def run(gt, rasters, coords, remove, attributes, adjacency='4', filtering='direct'): + X = [] + y = [] + groups = [] + Xn = None + + for i, (gti, rastersi, coordsi) in enumerate(zip(gt, rasters, coords)): + # Compute EAP + eap = [] + for name, raster in rastersi.items(): + eap += [_self_dual_attribute_profiles(raster, attributes, adjacency, name, filtering)] + eap = sap.concatenate(eap) + + Xn = [' '.join((a['tree']['image_name'], + a['attribute'], + *[str(v) for v in p.values()])) + for a in eap.description for p in a['profiles']] if not Xn else Xn + + # Create vectors + X_raw = np.moveaxis(np.array(list(eap.vectorize())), 0, -1) + y_raw = gti + + # Remove unwanted label X, y + lbl = np.ones_like(y_raw, dtype=np.bool) + for l in remove if remove else []: + lbl &= y_raw != l + + X += [X_raw[lbl]] + y += [y_raw[lbl]] + groups += [np.repeat(coordsi, lbl.sum())] + + X = np.concatenate(X) + y = np.concatenate(y) + groups = np.concatenate(groups) + Xn = rasters[0].keys() + + return X, y, groups, Xn