Mercurial > repos > perssond > s3segmenter
diff rowit.py @ 2:96d0d969ebc9 draft default tip
planemo upload for repository https://github.com/goeckslab/tools-mti/tree/main/tools/s3segmenter commit 0f4f17235c5961c2fd3d4c30180507f66214c11d
author | goeckslab |
---|---|
date | Fri, 16 Sep 2022 20:05:54 +0000 |
parents | 41e8efe8df43 |
children |
line wrap: on
line diff
--- a/rowit.py Fri Mar 11 23:37:49 2022 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,76 +0,0 @@ -import numpy as np -from skimage.util import view_as_windows, montage - - -class WindowView(object): - - def __init__( - self, img_shape, block_size, overlap_size - ): - self.img_shape = img_shape - self.block_size = block_size - self.overlap_size = overlap_size - - self.step_size = block_size - overlap_size - - def window_view_list(self, img, pad_mode='constant'): - half = int(self.overlap_size / 2) - img = np.pad(img, ( - (half, self.padded_shape[0] - self.img_shape[0] - half), - (half, self.padded_shape[1] - self.img_shape[1] - half), - ), mode=pad_mode) - - return self._window_view_list(img) - - def padding_mask(self): - half = int(self.overlap_size / 2) - padding_mask = np.ones(self.img_shape, dtype=np.bool) - padding_mask = np.pad(padding_mask, ( - (half, self.padded_shape[0] - self.img_shape[0] - half), - (half, self.padded_shape[1] - self.img_shape[1] - half), - ), mode='constant', constant_values=0) - return self._window_view_list(padding_mask) - - def reconstruct(self, img_window_view_list): - grid_shape = self.window_view_shape[:2] - - start = int(self.overlap_size / 2) - end = int(self.block_size - start) - - img_window_view_list = img_window_view_list[..., start:end, start:end] - - return montage( - img_window_view_list, grid_shape=grid_shape - )[:self.img_shape[0], :self.img_shape[1]] - - @property - def padded_shape(self): - padded_shape = np.array(self.img_shape) + self.overlap_size - n = np.ceil((padded_shape - self.block_size) / self.step_size) - padded_shape = (self.block_size + (n * self.step_size)).astype(np.int) - return tuple(padded_shape) - - @property - def window_view_shape(self): - return view_as_windows( - np.empty(self.padded_shape), - self.block_size, self.step_size - ).shape - - def _window_view_list(self, img): - return ( - view_as_windows(img, self.block_size, self.step_size) - .reshape(-1, self.block_size, self.block_size) - ) - -def crop_with_padding_mask(img, padding_mask, return_mask=False): - if np.all(padding_mask == 1): - return (img, padding_mask) if return_mask else img - (r_s, r_e), (c_s, c_e) = [ - (i.min(), i.max() + 1) - for i in np.where(padding_mask == 1) - ] - padded = np.zeros_like(img) - img = img[r_s:r_e, c_s:c_e] - padded[r_s:r_e, c_s:c_e] = 1 - return (img, padded) if return_mask else img \ No newline at end of file