Merger Node Complete
This commit is contained in:
parent
be3c43849d
commit
b0ea86e6cb
@ -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
57
ld2dap/Merger.py
Normal 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()
|
||||||
@ -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
48
ld2dap/core/Stacker.py
Normal 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
|
||||||
|
|
||||||
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user