Source code for samuroi.masks.pixel
from .mask import Mask
[docs]class PixelMask(Mask):
def __init__(self, name=None, xy=None, x=None, y=None):
super(PixelMask, self).__init__(name=name)
# use private variables and properties because masks should be either immutable or use changed signal.
if xy is None:
self.__x = x
self.__y = y
else:
self.__x, self.__y = xy
@property
def x(self):
return self.__x
@property
def y(self):
return self.__y
[docs] def to_hdf5(self, f):
import numpy
if 'pixels' not in f:
f.create_group('pixels')
f.create_dataset('pixels/' + self.name, data=numpy.column_stack((self.__x, self.__y)))
@staticmethod
[docs] def from_hdf5(f):
if 'pixels' in f:
for name, dataset in f['pixels'].iteritems():
yield PixelMask(name=name, x=dataset.value[:, 0], y=dataset.value[:, 1])
def __call__(self, data, mask):
# get a view on the data for own pixels. shape N x T where N is number of pixels
data_p = data[self.__y, self.__x, :]
# get a view on the mask for own pixels. shape N x 1 for broadcasting
mask_p = mask[self.__y, self.__x].reshape(-1, 1)
return (data_p * mask_p).mean(axis=0)