Fuzzy metadata
This commit is contained in:
parent
b283a4ca41
commit
3d13e1c1df
@ -8,7 +8,7 @@
|
||||
#
|
||||
# TODO details
|
||||
|
||||
from core import Filter
|
||||
from core import Filter, Stack
|
||||
|
||||
## TODO: dep
|
||||
import sys
|
||||
@ -19,9 +19,29 @@ import triskele
|
||||
class AttributeProfiles(Filter):
|
||||
def __init__(self, area=None, sd=None, moi=None):
|
||||
super().__init__(self.__class__.__name__)
|
||||
self.area = area
|
||||
self.sd = sd
|
||||
self.moi = moi
|
||||
self.area = np.sort(area) if area is not None else None
|
||||
self.sd = np.sort(sd) if sd is not None else None
|
||||
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):
|
||||
t = triskele.Triskele(data, verbose=False)
|
||||
@ -32,6 +52,42 @@ class AttributeProfiles(Filter):
|
||||
standard_deviation=self.sd,
|
||||
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))
|
||||
|
||||
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])
|
||||
plt.colorbar(img)
|
||||
if metadata is not None:
|
||||
f1.set_title(metadata[-1])
|
||||
f1.set_title(metadata[-1].desc)
|
||||
plt.show()
|
||||
plt.close(fig)
|
||||
|
@ -20,4 +20,7 @@ class Treshold(Filter):
|
||||
if self.max_value is None:
|
||||
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
|
||||
|
@ -17,7 +17,9 @@ class Stack(object):
|
||||
self.symb = list()
|
||||
|
||||
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:
|
||||
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