コード例 #1
0
def build_distance_layers(cyt_coord, nuc_coord, rna_coord, normalized=True):
    """Compute distance layers as input for the model.

    Parameters
    ----------
    cyt_coord : np.ndarray, np.int64
        Array of cytoplasm boundaries coordinates with shape (nb_points, 2).
    nuc_coord : np.ndarray, np.int64
        Array of nucleus boundaries coordinates with shape (nb_points, 2).
    rna_coord : np.ndarray, np.int64
        Array of mRNAs coordinates with shape (nb_points, 2) or
        (nb_points, 3).
    normalized : bool
        Normalized the layers between 0 and 1.
    Returns
    -------
    distance_cyt : np.ndarray, np.float32
        A 2-d tensor with shape (y, x) showing distance to the cytoplasm
        border. Normalize between 0 and 1 if 'normalized' True.
    distance_nuc : np.ndarray, np.float32
        A 2-d tensor with shape (y, x) showing distance to the nucleus border.
        Normalize between 0 and 1 if 'normalized' True.

    """
    # check parameters
    stack.check_array(cyt_coord,
                      ndim=2,
                      dtype=[np.int64])
    if nuc_coord is not None:
        stack.check_array(nuc_coord,
                          ndim=2,
                          dtype=[np.int64])
    if rna_coord is not None:
        stack.check_array(rna_coord,
                          ndim=2,
                          dtype=[np.int64])
    stack.check_parameter(normalized=bool)

    # build surface binary matrices from coordinates
    cyt_surface, nuc_surface, rna_layer, _ = stack.from_coord_to_surface(
        cyt_coord=cyt_coord,
        nuc_coord=nuc_coord,
        rna_coord=rna_coord)

    # compute distances map for cytoplasm and nucleus
    cyt_distance = ndi.distance_transform_edt(cyt_surface)
    nuc_distance_ = ndi.distance_transform_edt(~nuc_surface)
    nuc_distance = cyt_surface * nuc_distance_

    if normalized:
        # cast to np.float32 and normalize it between 0 and 1
        cyt_distance = cyt_distance / cyt_distance.max()
        nuc_distance = nuc_distance / nuc_distance.max()

    # cast layer in float32
    cyt_distance = stack.cast_img_float32(cyt_distance)
    nuc_distance = stack.cast_img_float32(nuc_distance)
    rna_layer = stack.cast_img_float32(rna_layer)

    return cyt_distance, nuc_distance, rna_layer
コード例 #2
0
def build_boundaries_layers(cyt_coord, nuc_coord, rna_coord):
    """

    Parameters
    ----------
    cyt_coord : np.ndarray, np.int64
        Array of cytoplasm boundaries coordinates with shape (nb_points, 2).
    nuc_coord : np.ndarray, np.int64
        Array of nucleus boundaries coordinates with shape (nb_points, 2).
    rna_coord : np.ndarray, np.int64
        Array of mRNAs coordinates with shape (nb_points, 2) or
        (nb_points, 3).

    Returns
    -------
    cyt_boundaries : np.ndarray, np.float32
        A 2-d binary tensor with shape (y, x) showing cytoplasm boundaries.
        border.
    nuc_boundaries : np.ndarray, np.float32
        A 2-d binary tensor with shape (y, x) showing nucleus boundaries.
    rna_layer : np.ndarray, np.float32
        Binary image of mRNAs localizations with shape (y, x).

    """
    # check parameters
    stack.check_array(cyt_coord,
                      ndim=2,
                      dtype=[np.int64])
    if nuc_coord is not None:
        stack.check_array(nuc_coord,
                          ndim=2,
                          dtype=[np.int64])
    if rna_coord is not None:
        stack.check_array(rna_coord,
                          ndim=2,
                          dtype=[np.int64])

    # build surface binary matrices from coordinates
    cyt_surface, nuc_surface, rna_layer, _ = stack.from_coord_to_surface(
        cyt_coord=cyt_coord,
        nuc_coord=nuc_coord,
        rna_coord=rna_coord)

    # from surface binary matrices to boundaries binary matrices
    cyt_boundaries = stack.from_surface_to_boundaries(cyt_surface)
    nuc_boundaries = stack.from_surface_to_boundaries(nuc_surface)

    # cast layer in float32
    cyt_boundaries = stack.cast_img_float32(cyt_boundaries)
    nuc_boundaries = stack.cast_img_float32(nuc_boundaries)
    rna_layer = stack.cast_img_float32(rna_layer)

    return cyt_boundaries, nuc_boundaries, rna_layer
コード例 #3
0
ファイル: input_preparation.py プロジェクト: marcnol/big-fish
def prepare_coordinate_data(cyt_coord, nuc_coord, rna_coord):
    """

    Parameters
    ----------
    cyt_coord
    nuc_coord
    rna_coord

    Returns
    -------

    """
    # convert coordinates in binary mask surfaces
    mask_cyt, mask_nuc, _, rna_coord = stack.from_coord_to_surface(
        cyt_coord=cyt_coord,
        nuc_coord=nuc_coord,
        rna_coord=rna_coord,
        external_coord=True)

    # get mask cytoplasm outside nucleus
    mask_cyt_out = mask_cyt.copy()
    mask_cyt_out[mask_nuc] = False

    # compute distance maps for the cytoplasm and the nucleus
    distance_cyt = ndi.distance_transform_edt(mask_cyt)
    distance_nuc_ = ndi.distance_transform_edt(~mask_nuc)
    distance_nuc = mask_cyt * distance_nuc_

    # cast distance map in float32
    distance_cyt = distance_cyt.astype(np.float32)
    distance_nuc = distance_nuc.astype(np.float32)

    # normalize distance maps between 0 and 1
    distance_cyt_normalized = distance_cyt / distance_cyt.max()
    distance_cyt_normalized = stack.cast_img_float32(distance_cyt_normalized)
    distance_nuc_normalized = distance_nuc / distance_nuc.max()
    distance_nuc_normalized = stack.cast_img_float32(distance_nuc_normalized)

    # get rna outside nucleus
    mask_rna_in = mask_nuc[rna_coord[:, 1], rna_coord[:, 2]]
    rna_coord_out = rna_coord[~mask_rna_in]

    # get centroids
    centroid_cyt = _get_centroid_surface(mask_cyt)
    centroid_nuc = _get_centroid_surface(mask_nuc)
    if len(rna_coord) == 0:
        centroid_rna = centroid_cyt.copy()
    else:
        centroid_rna = _get_centroid_rna(rna_coord)
    if len(rna_coord_out) == 0:
        centroid_rna_out = centroid_cyt.copy()
    else:
        centroid_rna_out = _get_centroid_rna(rna_coord_out)

    # get centroid distance maps
    distance_cyt_centroid = _get_centroid_distance_map(centroid_cyt, mask_cyt)
    distance_nuc_centroid = _get_centroid_distance_map(centroid_nuc, mask_cyt)
    distance_rna_out_centroid = _get_centroid_distance_map(
        centroid_rna_out, mask_cyt)

    prepared_inputs = (mask_cyt, mask_nuc, mask_cyt_out, distance_cyt,
                       distance_nuc, distance_cyt_normalized,
                       distance_nuc_normalized, rna_coord_out, centroid_cyt,
                       centroid_nuc, centroid_rna, centroid_rna_out,
                       distance_cyt_centroid, distance_nuc_centroid,
                       distance_rna_out_centroid)

    return prepared_inputs