def obtain_tissue_tmax(self): cbf_seq = np.zeros((256 * 256)) tmax_seq = np.zeros((256 * 256)) comb_seq = np.zeros((256 * 256)) for ii in tqdm(range(256 * 256)): y = int(ii // 256) x = int(ii % 256) if self.brain_mask[y, x] == 0: continue tissue_lst = [0] * len(self.img_lst) for idx, img in enumerate(self.images): tissue_lst[idx] = get_ct_value_neighbor_avg( img, x, y, self.brain_mask, self.img_mask, g_d) array_ct_value_tissue = np.array(tissue_lst) array_ct_value_tissue_bl = baseline_process( array_ct_value_tissue, g_std_t) array_ct_value_tissue_bl_f = filter_lp(array_ct_value_tissue, cutoff_l=None, cutoff_h=0.41, ftype="lowpass") final_signal_tissue, base_tissue = baseline_correction( array_ct_value_tissue_bl_f) tmax_seq[ii] = np.argmax(final_signal_tissue) cbf_seq[ii] = final_signal_tissue.max() comb_seq[ii] = tmax_seq[ii] * cbf_seq[ii] return tmax_seq.reshape((256, 256)), cbf_seq.reshape( (256, 256)), comb_seq.reshape((256, 256))
def get_tissue_signal(self): output = np.zeros((256, 256, len(self.img_lst))) for ii in tqdm(range(256 * 256)): y_t_i = int(ii // 256) x_t_i = int(ii % 256) if self.brain_mask[y_t_i, x_t_i] == 0: continue length = len(self.img_lst) tissue_lst = [0] * length for idx, img in enumerate(self.images): tissue_lst[idx] = get_ct_value_neighbor_avg( img, x_t_i, y_t_i, self.brain_mask, self.img_mask, g_d) array_ct_value_tissue = np.array(tissue_lst) array_ct_value_tissue_bl = baseline_process( array_ct_value_tissue, g_std_t) self.signal_taken[y_t_i, x_t_i, :] = array_ct_value_tissue_bl.copy() # array_ct_value_tissue_bl_f = filter_lp(array_ct_value_tissue_bl, cutoff_l=None, cutoff_h=0.41, # ftype="lowpass") # try: # final_signal_tissue, base_tissue = baseline_correction(array_ct_value_tissue_bl_f) # output[y_t_i, x_t_i, :] = final_signal_tissue # except: # pass return output
def compute_irf_time(self, index): ''' Input: index:the index of pixel in flat image isPad: expand time axis for extensive distribution of Tmax output: Tmax of irf Describe: if the time of peak in tissue is after the time of peak in aif, tmax = tissue_peak_time - aif_peak_time else tmax = total_time - (aif_peak_time - tissue_peak_time) ''' y_t_i = int(index // 256) x_t_i = int(index % 256) if self.brain_mask[y_t_i, x_t_i] == 0: return length = len(self.final_signal_aif) tissue_lst = [0] * length for idx, img in enumerate(self.images): tissue_lst[idx] = get_ct_value_neighbor_avg( img, x_t_i, y_t_i, self.brain_mask, self.img_mask, g_d) array_ct_value_tissue = np.array(tissue_lst) array_ct_value_tissue_bl = baseline_process(array_ct_value_tissue, g_std_t) array_ct_value_tissue_bl_f = filter_lp(array_ct_value_tissue, cutoff_l=None, cutoff_h=0.41, ftype="lowpass") final_signal_tissue, base_tissue = baseline_correction( array_ct_value_tissue_bl_f) aif_delay = np.min(np.where(self.final_signal_aif > 0)) tissue_delay = np.min(np.where(final_signal_tissue > 0)) irf_delay = abs(tissue_delay - aif_delay) aif_peak = np.argmax(self.final_signal_aif) tissue_peak = np.argmax(final_signal_tissue) max_aif = np.max(self.final_signal_aif) self.cbf_img[y_t_i, x_t_i] = (1 / max_aif) * np.max(final_signal_tissue) self.cbv_img[y_t_i, x_t_i] = trapz( final_signal_tissue, np.arange(len(final_signal_tissue)), dx=1) / trapz(self.final_signal_aif, np.arange(len(self.final_signal_aif)), dx=1) if tissue_peak >= aif_peak: self.irf_img[y_t_i, x_t_i] += (tissue_peak - aif_peak)
def compute_irf(self, index): ''' Input: index:the index of pixel in flat image isPad: expand time axis for extensive distribution of Tmax Output: Tmax of irf Describe: Compute irf using Tikhonov svd ''' y_t_i = int(index // 256) x_t_i = int(index % 256) if self.brain_mask[y_t_i, x_t_i] == 0: return tissue_lst = [0] * len(self.img_lst) for idx, img in enumerate(self.images): tissue_lst[idx] = get_ct_value_neighbor_avg( img, x_t_i, y_t_i, self.brain_mask, self.img_mask, g_d) array_ct_value_tissue = np.array(tissue_lst) array_ct_value_tissue_bl = baseline_process(array_ct_value_tissue, g_std_t) array_ct_value_tissue_bl_f = filter_lp(array_ct_value_tissue, cutoff_l=None, cutoff_h=0.41, ftype="lowpass") final_signal_tissue, base_tissue = baseline_correction( array_ct_value_tissue_bl_f) residual_func = deconvolution(self.final_signal_aif, final_signal_tissue) t_idx = np.argmax(residual_func) self.irf_img[y_t_i, x_t_i] += t_idx self.cbf_img[y_t_i, x_t_i] += np.max(residual_func)