Пример #1
0
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
Пример #2
0
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 ...")
Пример #4
0
# 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 ...")