def get_bleach_spots(log_pd: pd.DataFrame, label_nucleoli: np.array, analyze_organelle: str, num_dilation=3): """ Generate bleach spots mask and corresponding pd.DataFrame table :param log_pd: pd.DataFrame, requires columns 'x', 'y', 'nucleoli' 'x': x coordinates of all possible bleach spots 'y': y coordinates of all possible bleach spots 'nucleoli': pointer corresponding nucleoli label index originally imports from .log file :param label_nucleoli: np.array, grey scale labeled nucleoli image :param analyze_organelle: str, 'sg' or 'nucleoli' :param num_dilation: int, optional (default: 3) number of dilation applied from the coordinates determines the size of the generated mask for each point default number was determined for FRAP analysis :return: bleach_spots_ft: np.array, 0-and-1 bleach spots mask pointer_pd: pd.DataFrame pointer dataframe, add corresponding bleach spots/nucleoli information sorted based on bleach spots, ascending """ # link pointer with corresponding detected bleach spots bleach_spots = ana.analysis_mask(log_pd['y'], log_pd['x'], label_nucleoli, num_dilation) label_bleach_spots = label(bleach_spots, connectivity=1) log_pd['bleach_spots'] = obj.points_in_objects(label_bleach_spots, log_pd['x'], log_pd['y']) # filter bleach spots pointer_pd = filter_bleach_spots(log_pd, analyze_organelle) # generate bleach spots mask (after filtering) bleach_spots_ft = ana.analysis_mask(pointer_pd['y'], pointer_pd['x'], label_nucleoli, num_dilation) label_bleach_spots_ft = label(bleach_spots_ft, connectivity=1) # link pointer with corresponding filtered bleach spots pointer_pd['bleach_spots'] = obj.points_in_objects(label_bleach_spots_ft, pointer_pd['x'], pointer_pd['y']) pointer_pd = pointer_pd.sort_values(by='bleach_spots').reset_index( drop=True) return bleach_spots_ft, pointer_pd
def get_spots(x_lst: list, y_lst: list, pixels_same_size: np.array, num_dilation=3): """ Generate spots mask and corresponding pd.DataFrame table :param x_lst: list, list of x coordinates :param y_lst: list, list of y coordinates :param pixels_same_size: np.array, any image of the same size :param num_dilation: int, number of dilation applied, default: 3 :return: """ spots = ana.analysis_mask(y_lst, x_lst, pixels_same_size, num_dilation) label_spots = label(spots, connectivity=1) pd_spots = pd.DataFrame({'x': x_lst, 'y': y_lst}) pd_spots['spots'] = obj.points_in_objects(label_spots, pd_spots['x'], pd_spots['y']) # filter spots pointer_same_spots = [ item for item, count in collections.Counter( pd_spots['spots'].tolist()).items() if count > 1 ] pd_spots = pd_spots[~pd_spots['spots'].isin(pointer_same_spots)] del pd_spots['spots'] # delete previous bleach_spots information pd_spots = pd_spots.reset_index(drop=True) # reset index spots_ft = ana.analysis_mask(pd_spots['y'], pd_spots['x'], pixels_same_size, num_dilation) label_spots_ft = label(spots_ft, connectivity=1) # link pointer with corresponding filtered bleach spots pd_spots['spots'] = obj.points_in_objects(label_spots_ft, pd_spots['x'], pd_spots['y']) pd_spots = pd_spots.sort_values(by='spots').reset_index(drop=True) return spots_ft, pd_spots
label_organelle = label(organelle, connectivity=1) data_log['num_%s_detected' % analyze_organelle] = [obj.object_count(organelle)] print("Found %d %s." % (data_log['num_%s_detected' % analyze_organelle][0], analyze_organelle)) # organelle pd dataset organelle_pd = organelle_analysis(pix, organelle, '%s' % analyze_organelle, pos) if analyze_organelle == 'nucleoli': # link nucleoli with corresponding nuclear round_x = [round(num) for num in organelle_pd['x']] round_y = [round(num) for num in organelle_pd['y']] organelle_pd['nuclear'] = obj.points_in_objects( label_nuclear, round_y, round_x) # nuclear pd dataset nuclear_pd = nuclear_analysis(label_nuclear, organelle_pd, pos) data_log['num_nucleoli_in_nuclei'] = [ len(organelle_pd[organelle_pd['nuclear'] != 0]) ] print("Found %d out of %d nucleoli within nuclei." % (data_log['num_nucleoli_in_nuclei'][0], obj.object_count(organelle))) # ---------------------------------- # BLEACH SPOTS DETECTION # ---------------------------------- print("### Image analysis: bleach spots detection ...")
# nucleoli detection nucleoli = find_organelle(pix, thresholding, min_size=min_size, max_size=max_size) label_nucleoli = label(nucleoli, connectivity=1) data_log['num_nucleoli_detected'] = [obj.object_count(nucleoli)] print("Found %d nucleoli." % data_log['num_nucleoli_detected'][0]) # nucleoli pd dataset nucleoli_pd = organelle_analysis(pix, nucleoli, 'nucleoli', pos) # link nucleoli with corresponding nuclear round_x = [round(num) for num in nucleoli_pd['x']] round_y = [round(num) for num in nucleoli_pd['y']] nucleoli_pd['nuclear'] = obj.points_in_objects(label_nuclear, round_y, round_x) data_log['num_nucleoli_in_nuclei'] = [ len(nucleoli_pd[nucleoli_pd['nuclear'] != 0]) ] print("Found %d out of %d nucleoli within nuclei." % (data_log['num_nucleoli_in_nuclei'][0], obj.object_count(nucleoli))) # nuclear pd dataset nuclear_pd = nuclear_analysis(label_nuclear, nucleoli_pd, pos) # ---------------------------------- # BLEACH SPOTS DETECTION # ---------------------------------- print("### Image analysis: bleach spots detection ...")