Merger Node Complete

This commit is contained in:
Florent Guiotte 2018-08-27 11:04:20 +02:00
parent be3c43849d
commit b0ea86e6cb
5 changed files with 108 additions and 36 deletions

View File

@ -8,7 +8,7 @@
# #
# TODO details # TODO details
from ld2dap.core import Filter, Stack from ld2dap.core import Filter, Stack, Stacker
import numpy as np import numpy as np
class LocalFeatures(Filter): class LocalFeatures(Filter):
@ -57,38 +57,3 @@ def create_patches(array, patch_size=3):
stack.append(offset) stack.append(offset)
return np.stack(stack, axis=-1) return np.stack(stack, axis=-1)
class Stacker:
def __init__(self):
self.offset = 0
self.data_list = list()
self.metadata_list = list()
def auto_stack(self, data, old_stack, desc_str, symb_str):
if data.shape[-1] != (old_stack.end - old_stack.begin):
raise ValueError("Mismatch between data shape and stack length")
new_desc = list()
for d in old_stack.desc:
new_desc.append(d.copy())
new_desc[-1].append(desc_str)
new_symb = list()
for s in old_stack.symb:
new_symb.append([symb_str + '('])
new_symb[-1].extend(s.copy())
new_symb[-1].append(')')
self.stack(data, new_desc, new_symb)
def stack(self, data, desc, symb):
size_new = data.shape[-1]
stack_new = Stack(self.offset, size_new)
self.offset += size_new
stack_new.desc = desc
stack_new.symb = symb
self.data_list.append(data)
self.metadata_list.append(stack_new)
def pack(self):
return np.dstack(self.data_list), self.metadata_list

57
ld2dap/Merger.py Normal file
View File

@ -0,0 +1,57 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
# \file Merger.py
# \brief TODO
# \author Florent Guiotte <florent.guiotte@gmail.com>
# \version 0.1
# \date 24 août 2018
#
# TODO details
from ld2dap.core import Filter, Output, Stacker
import numpy as np
class Merger(Filter):
def __init__(self):
super().__init__(self.__class__.__name__)
"""Merger Node, merge two stream inputs"""
self.data = None
self.metadata = None
self.second = self.SecondInput(self)
def process(self, data=None, metadata=None):
"""Override the Input override"""
if data is not None:
self.logger.info('Register first input')
self.data = data
self.metadata = metadata
else:
self.logger.info('Register second input')
if self.second.data is None or self.data is None:
return
self.logger.info('Merging inputs')
offset = self.data.shape[-1]
data = np.dstack((self.data, self.second.data))
metadata = self.metadata
for stack in self.second.metadata:
stack.begin += offset
stack.end += offset
metadata.append(stack)
for output in self.outputs:
output.process(data, [x.copy() for x in metadata])
class SecondInput(Output):
def __init__(self, merger):
super().__init__(self.__class__.__name__)
self.merger = merger
self.data = None
self.metadata = None
def _process(self, data, metadata):
self.data = data
self.metadata = metadata
self.merger.process()

View File

@ -10,6 +10,7 @@
from .AttributeProfiles import AttributeProfiles from .AttributeProfiles import AttributeProfiles
from .SelfDualAttributeProfiles import SelfDualAttributeProfiles from .SelfDualAttributeProfiles import SelfDualAttributeProfiles
from .Merger import Merger
from .LocalFeatures import LocalFeatures from .LocalFeatures import LocalFeatures
from .Treshold import Treshold from .Treshold import Treshold
from .LoadTIFF import LoadTIFF from .LoadTIFF import LoadTIFF

48
ld2dap/core/Stacker.py Normal file
View File

@ -0,0 +1,48 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
# \file %filename%.py
# \brief TODO
# \author Florent Guiotte <florent.guiotte@gmail.com>
# \version 0.1
# \date 27 août 2018
#
# TODO details
import numpy as np
from .Stack import Stack
class Stacker:
def __init__(self):
self.offset = 0
self.data_list = list()
self.metadata_list = list()
def auto_stack(self, data, old_stack, desc_str, symb_str):
if data.shape[-1] != (old_stack.end - old_stack.begin):
raise ValueError("Mismatch between data shape and stack length")
new_desc = list()
for d in old_stack.desc:
new_desc.append(d.copy())
new_desc[-1].append(desc_str)
new_symb = list()
for s in old_stack.symb:
new_symb.append([symb_str + '('])
new_symb[-1].extend(s.copy())
new_symb[-1].append(')')
self.stack(data, new_desc, new_symb)
def stack(self, data, desc, symb):
size_new = data.shape[-1]
stack_new = Stack(self.offset, size_new)
self.offset += size_new
stack_new.desc = desc
stack_new.symb = symb
self.data_list.append(data)
self.metadata_list.append(stack_new)
def pack(self):
return np.dstack(self.data_list), self.metadata_list

View File

@ -12,3 +12,4 @@ from .Output import Output
from .Input import Input from .Input import Input
from .Filter import Filter from .Filter import Filter
from .Stack import Stack from .Stack import Stack
from .Stacker import Stacker