Source code for allensdk.mouse_connectivity.grid.subimage.classic_subimage

from __future__ import division
import logging
import sys
import functools

import numpy as np
from scipy.ndimage.interpolation import zoom
from six import iteritems


from allensdk.mouse_connectivity.grid.utilities import image_utilities as iu
from .base_subimage import PolygonSubImage, SegmentationSubImage, IntensitySubImage


#==============================================================================


[docs]class ClassicSubImage(IntensitySubImage, SegmentationSubImage, PolygonSubImage): required_polys = ['missing_tile', 'no_signal', 'aav_exclusion'] optional_polys = ['aav_tracer'] required_segmentations = ['segmentation'] required_intensities = ['green'] def __init__(self, reduce_level, in_dims, in_spacing, coarse_spacing, polygon_info, segmentation_paths, intensity_paths, injection_polygon_key='aav_tracer', *args, **kwargs): super(ClassicSubImage, self).__init__( reduce_level, in_dims, in_spacing, coarse_spacing, polygon_info=polygon_info, segmentation_paths=segmentation_paths, intensity_paths=intensity_paths, *args, **kwargs) self.injection_polygon_key = injection_polygon_key
[docs] def process_segmentation(self): self.apply_mask('segmentation', 'missing_tile', False) self.extract_signal_from_segmentation(signal_name='projection') self.apply_mask('projection', 'no_signal', False) del self.images['no_signal'] if self.injection_polygon_key in self.images: logging.info('reading injection from rasterized {} polygon'.format(self.injection_polygon_key)) self.images['injection'] = self.images[self.injection_polygon_key] del self.images[self.injection_polygon_key] else: self.extract_injection_from_segmentation() del self.images['segmentation'] logging.info('injection pixel count: {}'.format(np.count_nonzero(self.images['injection']))) self.binarize('projection') self.binarize('injection')
[docs] def compute_coarse_planes(self): # do these in batches to minimize peak memory usage self.compute_intensity() self.compute_injection() self.compute_projection() self.compute_sum_pixels() del self.images
[docs] def compute_intensity(self): logging.info('computing green accumulators') self.apply_pixel_counter('sum_pixel_intensities', self.images['green']) injection_intensity = np.multiply(self.images['green'], self.images['injection']) self.apply_pixel_counter('injection_sum_pixel_intensities', injection_intensity) del injection_intensity self.images['green'][self.images['projection'] == 0] = 0 self.apply_pixel_counter('sum_projecting_pixel_intensities', self.images['green']) self.images['green'][self.images['injection'] == 0] = 0 self.apply_pixel_counter('injectionsum_projecting_pixel_intensities', self.images['green']) del self.images['green']
[docs] def compute_injection(self): logging.info('computing injection accumulators') self.apply_pixel_counter('injection_sum_pixels', self.images['injection']) injection_projecting_pixels = np.logical_and(self.images['injection'], self.images['projection']) self.apply_pixel_counter('injection_sum_projecting_pixels', injection_projecting_pixels) del injection_projecting_pixels del self.images['injection']
[docs] def compute_projection(self): logging.info('computing projection accumulators') self.apply_pixel_counter('sum_projecting_pixels', self.images['projection']) del self.images['projection']
[docs] def compute_sum_pixels(self): logging.info('computing sum pixel accumulators') self.apply_pixel_counter('sum_pixels', np.logical_not(self.images['missing_tile'])) if 'aav_exclusion' in self.images: self.apply_pixel_counter('aav_exclusion_sum_pixels', self.images['aav_exclusion'])
#==============================================================================