Fuzzy metadata

This commit is contained in:
Florent Guiotte 2018-04-12 17:32:22 +02:00
parent b283a4ca41
commit 3d13e1c1df
4 changed files with 69 additions and 8 deletions

View File

@ -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())

View File

@ -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)

View File

@ -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

View File

@ -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])