Fuzzy metadata
This commit is contained in:
parent
b283a4ca41
commit
3d13e1c1df
@ -8,7 +8,7 @@
|
|||||||
#
|
#
|
||||||
# TODO details
|
# TODO details
|
||||||
|
|
||||||
from core import Filter
|
from core import Filter, Stack
|
||||||
|
|
||||||
## TODO: dep
|
## TODO: dep
|
||||||
import sys
|
import sys
|
||||||
@ -19,9 +19,29 @@ import triskele
|
|||||||
class AttributeProfiles(Filter):
|
class AttributeProfiles(Filter):
|
||||||
def __init__(self, area=None, sd=None, moi=None):
|
def __init__(self, area=None, sd=None, moi=None):
|
||||||
super().__init__(self.__class__.__name__)
|
super().__init__(self.__class__.__name__)
|
||||||
self.area = area
|
self.area = np.sort(area) if area is not None else None
|
||||||
self.sd = sd
|
self.sd = np.sort(sd) if sd is not None else None
|
||||||
self.moi = moi
|
self.moi = np.sort(moi) if moi is not None else None
|
||||||
|
|
||||||
|
def _process_desc(self):
|
||||||
|
att_desc = dict()
|
||||||
|
for att in ['area', 'sd', 'moi']:
|
||||||
|
att_desc[att] = list()
|
||||||
|
if self.__getattribute__(att) is not None:
|
||||||
|
att_desc[att].extend(
|
||||||
|
['Thickening {} {}'.format(att, x) for x in self.__getattribute__(att)[::-1]])
|
||||||
|
att_desc[att].append(None)
|
||||||
|
att_desc[att].extend(
|
||||||
|
['Thinning {} {}'.format(att, x) for x in self.__getattribute__(att)])
|
||||||
|
|
||||||
|
return att_desc
|
||||||
|
|
||||||
|
def _process_offset(self):
|
||||||
|
att_offset = dict()
|
||||||
|
for att in ['area', 'sd', 'moi']:
|
||||||
|
values = self.__getattribute__(att)
|
||||||
|
att_offset[att] = len(values) * 2 + 1 if values is not None else 0
|
||||||
|
return att_offset
|
||||||
|
|
||||||
def _process(self, data, metadata):
|
def _process(self, data, metadata):
|
||||||
t = triskele.Triskele(data, verbose=False)
|
t = triskele.Triskele(data, verbose=False)
|
||||||
@ -32,6 +52,42 @@ class AttributeProfiles(Filter):
|
|||||||
standard_deviation=self.sd,
|
standard_deviation=self.sd,
|
||||||
moment_of_inertia=self.moi)
|
moment_of_inertia=self.moi)
|
||||||
|
|
||||||
|
## Merge filtering as APs
|
||||||
|
|
||||||
|
## Create new metadata
|
||||||
|
### Pre-process descriptions
|
||||||
|
att_desc = self._process_desc()
|
||||||
|
|
||||||
|
### Compute stack offsets
|
||||||
|
att_offset = self._process_offset()
|
||||||
|
stack_offset = sum(att_offset.values())
|
||||||
|
|
||||||
|
### Merge old and new descriptions
|
||||||
|
metadata_new = list()
|
||||||
|
for stack in metadata:
|
||||||
|
if stack.end - stack.begin > 1:
|
||||||
|
raise NotImplementedError('Nested filtering not implemented yet')
|
||||||
|
|
||||||
|
for att in ['area', 'sd', 'moi']:
|
||||||
|
stack_new = Stack(stack_offset * stack.begin, att_offset[att],
|
||||||
|
stack.desc[0], stack.symb[0])
|
||||||
|
|
||||||
|
for old_desc, new_desc in zip(stack_new.desc, att_desc[att]):
|
||||||
|
print('DESCRIPTION: {} > {}'.format(old_desc, new_desc))
|
||||||
|
old_desc.append(new_desc)
|
||||||
|
|
||||||
|
metadata_new.append(stack_new)
|
||||||
|
|
||||||
|
|
||||||
att = np.dstack((att_min, att_max))
|
att = np.dstack((att_min, att_max))
|
||||||
|
|
||||||
return att, metadata
|
return att, metadata_new
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
area = [10, 100, 1000]
|
||||||
|
sd = [.1, .9]
|
||||||
|
|
||||||
|
ap = AttributeProfiles(area, sd)
|
||||||
|
|
||||||
|
print(ap._process_desc())
|
||||||
|
print(ap._process_offset())
|
||||||
|
|||||||
@ -26,6 +26,6 @@ class ShowFig(Output):
|
|||||||
img = f1.imshow(data[:,:,-1])
|
img = f1.imshow(data[:,:,-1])
|
||||||
plt.colorbar(img)
|
plt.colorbar(img)
|
||||||
if metadata is not None:
|
if metadata is not None:
|
||||||
f1.set_title(metadata[-1])
|
f1.set_title(metadata[-1].desc)
|
||||||
plt.show()
|
plt.show()
|
||||||
plt.close(fig)
|
plt.close(fig)
|
||||||
|
|||||||
@ -20,4 +20,7 @@ class Treshold(Filter):
|
|||||||
if self.max_value is None:
|
if self.max_value is None:
|
||||||
self.max_value = data[data < self.treshold].max()
|
self.max_value = data[data < self.treshold].max()
|
||||||
|
|
||||||
|
for stack in metadata:
|
||||||
|
stack.desc.append('treshold {}'.format(self.treshold))
|
||||||
|
|
||||||
return data * (data < self.treshold) + self.max_value * (data >= self.treshold), metadata
|
return data * (data < self.treshold) + self.max_value * (data >= self.treshold), metadata
|
||||||
|
|||||||
@ -17,7 +17,9 @@ class Stack(object):
|
|||||||
self.symb = list()
|
self.symb = list()
|
||||||
|
|
||||||
if desc is not None:
|
if desc is not None:
|
||||||
self.desc.append(desc)
|
for i in range(size):
|
||||||
|
self.desc.append(desc.copy() if isinstance(desc, list) else [desc])
|
||||||
|
|
||||||
if symb is not None:
|
if symb is not None:
|
||||||
self.symb.append(symb)
|
for i in range(size):
|
||||||
|
self.symb.append(symb.copy() if isinstance(symb, list) else [symb])
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user