11import numpy as np
22import pandas as pd
33from skimage .draw import line
4- from skimage .measure import regionprops_table
5-
6- from .draw_line import *
4+ from .common_func import (
5+ extract_single_image ,
6+ df_from_cellpose_mask ,
7+ df_from_stardist_mask ,
8+ )
9+ from .draw_line import (
10+ line_equation ,
11+ calculate_intersection ,
12+ calculate_closest_point ,
13+ calculate_distance ,
14+ )
15+ import matplotlib .pyplot as plt
716
817
918def extract_ROIs (histo_img , index , cellpose_df , mask_stardist ):
10- single_cell_img = histo_img [
11- cellpose_df .iloc [index , 5 ] : cellpose_df .iloc [index , 7 ],
12- cellpose_df .iloc [index , 6 ] : cellpose_df .iloc [index , 8 ],
13- ].copy ()
14- nucleus_single_cell_img = mask_stardist [
15- cellpose_df .iloc [index , 5 ] : cellpose_df .iloc [index , 7 ],
16- cellpose_df .iloc [index , 6 ] : cellpose_df .iloc [index , 8 ],
17- ].copy ()
19+ single_cell_img = extract_single_image (histo_img , cellpose_df , index )
20+ nucleus_single_cell_img = extract_single_image (mask_stardist , cellpose_df , index )
1821 single_cell_mask = cellpose_df .iloc [index , 9 ]
19- single_cell_img [~ single_cell_mask ] = 0
20- nucleus_single_cell_img [~ single_cell_mask ] = 0
21-
22- props_nuc_single = regionprops_table (
23- nucleus_single_cell_img ,
24- intensity_image = single_cell_img ,
25- properties = [
26- "label" ,
27- "area" ,
28- "centroid" ,
29- "eccentricity" ,
30- "bbox" ,
31- "image" ,
32- "perimeter" ,
33- "feret_diameter_max" ,
34- ],
22+ df_nuc_single = df_from_stardist_mask (
23+ nucleus_single_cell_img , intensity_image = single_cell_img
3524 )
36- df_nuc_single = pd .DataFrame (props_nuc_single )
3725 return single_cell_img , nucleus_single_cell_img , single_cell_mask , df_nuc_single
3826
3927
@@ -47,13 +35,20 @@ def single_cell_analysis(
4735 internalised_threshold = 0.75 ,
4836 draw_and_return = False ,
4937):
38+ if draw_and_return :
39+ fig_size = (5 , 5 )
40+ f , ax = plt .subplots (figsize = fig_size )
41+ ax .scatter (x_fiber , y_fiber , color = "white" )
42+
5043 n_nuc , n_nuc_intern , n_nuc_periph = 0 , 0 , 0
5144 new_row_lst = []
5245 new_col_names = df_nuc_single .columns .tolist ()
5346 new_col_names .append ("internalised" )
5447 new_col_names .append ("score_eccentricity" )
5548 new_col_names .append ("cell label" )
5649 for _ , value in df_nuc_single .iterrows ():
50+ if draw_and_return :
51+ ax .scatter (value [3 ], value [2 ], color = "red" )
5752 n_nuc += 1
5853 value = value .tolist ()
5954 # Extend line and find closest point
@@ -69,6 +64,21 @@ def single_cell_analysis(
6964 m , b , (single_cell_img .shape [0 ], single_cell_img .shape [1 ])
7065 )
7166 border_point = calculate_closest_point (value [3 ], value [2 ], intersections_lst )
67+ if draw_and_return :
68+ ax .plot (
69+ (x_fiber , border_point [0 ]),
70+ (y_fiber , border_point [1 ]),
71+ "ro--" ,
72+ linewidth = 1 ,
73+ markersize = 1 ,
74+ )
75+ ax .plot (
76+ (x_fiber , value [3 ]),
77+ (y_fiber , value [2 ]),
78+ "go--" ,
79+ linewidth = 1 ,
80+ markersize = 1 ,
81+ )
7282 rr , cc = line (
7383 int (y_fiber ),
7484 int (x_fiber ),
@@ -96,6 +106,8 @@ def single_cell_analysis(
96106 value .append (ratio_dist )
97107 value .append (cell_label )
98108 new_row_lst .append (value )
109+ if draw_and_return :
110+ ax .scatter (coords [1 ], coords [0 ], color = "red" , s = 10 )
99111 break
100112 except IndexError :
101113 coords = list (zip (rr , cc ))[index3 - 1 ]
@@ -115,8 +127,13 @@ def single_cell_analysis(
115127 value .append (ratio_dist )
116128 value .append (cell_label )
117129 new_row_lst .append (value )
130+ if draw_and_return :
131+ ax .scatter (coords [1 ], coords [0 ], color = "red" , s = 10 )
132+ ax .axis ("off" )
118133 break
119134 df_nuc_single_stats = pd .DataFrame (new_row_lst , columns = new_col_names )
135+ if draw_and_return :
136+ return n_nuc , n_nuc_intern , n_nuc_periph , df_nuc_single_stats , ax
120137 return n_nuc , n_nuc_intern , n_nuc_periph , df_nuc_single_stats
121138
122139
@@ -173,20 +190,7 @@ def paint_histo_img(histo_img, cellpose_df, prediction_df):
173190
174191
175192def run_he_analysis (image_ndarray , mask_cellpose , mask_stardist , eccentricity_thresh ):
176- props_cellpose = regionprops_table (
177- mask_cellpose ,
178- properties = [
179- "label" ,
180- "area" ,
181- "centroid" ,
182- "eccentricity" ,
183- "bbox" ,
184- "image" ,
185- "perimeter" ,
186- "feret_diameter_max" ,
187- ],
188- )
189- df_cellpose = pd .DataFrame (props_cellpose )
193+ df_cellpose = df_from_cellpose_mask (mask_cellpose )
190194 df_nuc_analysis , all_nuc_df_stats = predict_all_cells (
191195 image_ndarray , df_cellpose , mask_stardist , eccentricity_thresh
192196 )
0 commit comments