Source code for cell_analysis_tools.image_processing.bin_2d

from pathlib import Path

import matplotlib as mpl
import matplotlib.pylab as plt
import numpy as np


mpl.rcParams["figure.dpi"] = 300


import tifffile
from scipy.ndimage import label


[docs] def bin_2d(im, bin_size, stride=1, pad_value=0, debug=False): """ Bins a 2d array by a square kernel length (bin_size*2 + 1). Parameters ---------- im : ndarray 3d ndarray containing FLIM data (x,y,t). bin_size : int number of pixels to look before and after center pixel. kernel = bin_size + 1 + bin_size stride : int, optional Number of pixels to move when raster scanning the image. The default is 1. pad_value : int, optional value to pad the image with. The default is 0. debug : bool, optional Show debugging output. The default is False. Returns ------- im_binned : ndarray binned 3d array of decays """ if stride != 1: print("strides larger than 1 not yet implemented") kernel_length = bin_size * 2 + 1 # bin left center pixel and right sides rows_before = bin_size rows_after = bin_size cols_before = bin_size cols_after = bin_size n_rows, n_cols = im.shape padded_im = np.pad( im, # this takes in width(cols) and height(rows) ((rows_before, rows_after), (cols_before, cols_after)), "constant", constant_values=pad_value, ) im_binned = np.zeros(im.shape) # iterate through original image dimensions for row_idx in np.arange(n_rows): for col_idx in np.arange(n_cols): # starts at 0(row_idx) : kernel_length + 0 # then 1 (row_idx) : kernel_length + 1 ...etc # up to length n-bin_size # get window on padded image conv_decay = padded_im[ row_idx : kernel_length + row_idx, col_idx : kernel_length + col_idx ] # fill in original shape image im_binned[row_idx, col_idx] = conv_decay.sum(axis=(0, 1)) if debug: plt.title(f"kernel: {kernel_length}x{kernel_length}") plt.imshow(im_binned) plt.show() return im_binned
if __name__ == "__main__": ### bin_2d TEST HERE = Path(__file__).resolve().parent # load SDT im = np.random.rand(512, 512) # plt.title("original") # plt.imshow(im) # plt.show() # run with debug on bin_size = 2 im_binned = bin_2d(im, bin_size=bin_size, debug=False) from cell_analysis_tools.visualization import compare_images compare_images("original", im, f"binned {bin_size*2_1}x{bin_size*2_1}", im_binned)