Skip to content

Issue extracting cell information #91

@Boehmin

Description

@Boehmin

First, such a great tool - I now managed to run cellpose and get cell and nuclei masks. I work with skeletal muscle tissue so I would also potentially have multiple nuclei per cell. I`m not sure if that might be the problem of the below issue:

  1. I run the following code in a jupyter notebook:
fov_results = multistack.extract_cell(
    cell_label=cell_label, 
    ndim=2, 
    nuc_label=nuc_label, 
    rna_coord=spots_no_ts, 
    others_coord={"foci": foci, "transcription_site": ts},
    image=image_contrasted,
    others_image={"dapi": nuclei, "smfish": fish},
    check_nuc_in_cell=False) # IMPORTANT! otherwise it does not identify my cells
print("number of cells identified: {0}".format(len(fov_results)))

for i, cell_results in enumerate(fov_results):
    print("cell {0}".format(i))
    
    # get cell results
    cell_mask = cell_results["cell_mask"]
    cell_coord = cell_results["cell_coord"]
    nuc_mask = cell_results["nuc_mask"]
    nuc_coord = cell_results["nuc_coord"]
    rna_coord = cell_results["rna_coord"]
    foci_coord = cell_results["foci"]
    ts_coord = cell_results["transcription_site"]
    image_contrasted = cell_results["image"]
    print("\r number of rna {0}".format(len(rna_coord)))
    print("\r number of foci {0}".format(len(foci_coord)))
    print("\r number of transcription sites {0}".format(len(ts_coord)))
    
    # plot cell
    plot.plot_cell(
        ndim=2, cell_coord=cell_coord, nuc_coord=nuc_coord, 
        rna_coord=rna_coord, foci_coord=foci_coord, other_coord=ts_coord, 
        image=image_contrasted, cell_mask=cell_mask, nuc_mask=nuc_mask, 
        title="Cell {0}".format(i))
  • sometimes it finds 29 cells (when I rerun the cell)
  • it then sometimes finds 30 cells
  1. As I keep rerunning extract cells and the plots, I sometimes get empty masks, sometimes the first cell has half of the image in it, and sometimes the background crops just fine.
    Screenshot 2023-09-25 at 15 56 27
    Screenshot 2023-09-25 at 15 57 00
    Screenshot 2023-09-25 at 17 01 50
    Screenshot 2023-09-25 at 17 02 25
  2. However, the nuclei are not plotted and as is quite visible, the scale of the cells is off. I have no idea what this could be due to.
  3. I had to also swap the coordinates for the saved spots and clusters - they did not match with the mask arrays, once I did this the cell extraction worked - I now wonder whether this messed up the scale later on, below my thought process:
print("Dimensions of mask array:", nuc_label.shape)
print("Dimensions of mask array:", cell_label.shape)

# Check maximum coordinate values
max_coords = np.max(spots, axis=0)
print("Maximum coordinate values:", max_coords)

# Check minimum coordinate values
min_coords = np.min(spots, axis=0)
print("Minimum coordinate values:", min_coords)

Dimensions of mask array: (1790, 1800)
Dimensions of mask array: (1790, 1800)
Maximum coordinate values: [1799 1789   17]
Minimum coordinate values: [ 0  0 -1]

# Swap x and y coordinates for spots
sw_spots = np.copy(spots)
sw_spots[:, 0], sw_spots[:, 1] = spots[:, 1], spots[:, 0]

# Swap x and y coordinates for clusters
sw_clusters = np.copy(clusters)
sw_clusters[:, 0], sw_clusters[:, 1] = clusters[:, 1], clusters[:, 0]

# Check maximum coordinate values
max_coords = np.max(sw_spots, axis=0)
print("Maximum coordinate values:", max_coords)

# Check minimum coordinate values
min_coords = np.min(sw_spots, axis=0)
print("Minimum coordinate values:", min_coords)

Maximum coordinate values: [1789 1799   17]
Minimum coordinate values: [ 0  0 -1]
  1. This is how I saved the spots and clusters, I`m not sure whether there is a mistake in how they are saved. When I plot the spots, clusters and masks on top of each other I also have to flip the coordinates for the data to represent the original images. I load the .csv exactly as in the (6.) example notebook so I did not think I made a mistake there.
# save in csv files
path = os.path.join("test_spots.csv")
stack.save_data_to_csv(spots_post_clustering, path)
path = os.path.join("test_clusters.csv")
stack.save_data_to_csv(clusters, path)

Happy for any suggestions!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions