Skip to content

Commit efde95f

Browse files
committed
Read intensity values for marker check
1 parent 30339b3 commit efde95f

File tree

2 files changed

+34
-6
lines changed

2 files changed

+34
-6
lines changed

flamingo_tools/measurements.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,17 @@ def _regionprops_features(seg_id, table, image, segmentation, resolution, backgr
188188
return features
189189

190190

191+
def get_object_measures_from_table(arr_seg, table_measures):
192+
"""Return object measurements for label IDs wthin array.
193+
"""
194+
# iterate through segmentation ids in reference mask
195+
ref_ids = list(np.unique(arr_seg)[1:])
196+
measure_ids = list(table_measures["label_id"])
197+
object_ids = [id for id in ref_ids if id in measure_ids]
198+
measures = pd.DataFrame({k: float(table_measures[table_measures["label_id"] == id, "median"]) for k in object_ids})
199+
return measures
200+
201+
191202
# Maybe also support:
192203
# - spherical harmonics
193204
# - line profiles

scripts/intensity_annotation/gfp_annotation.py

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import imageio.v3 as imageio
55
import napari
66
import numpy as np
7+
import pandas as pd
78

89
import matplotlib.pyplot as plt
910
import seaborn as sns
@@ -14,7 +15,8 @@
1415
from elf.parallel.distance_transform import distance_transform
1516
from elf.parallel.seeded_watershed import seeded_watershed
1617

17-
from flamingo_tools.measurements import compute_object_measures_impl
18+
from flamingo_tools.measurements import compute_object_measures_impl, get_object_measures_from_table
19+
from flamingo_tools.s3_utils import get_s3_path
1820

1921

2022
class HistogramWidget(QWidget):
@@ -132,7 +134,7 @@ def _create_mask(seg_extended, stain):
132134
return mask
133135

134136

135-
def gfp_annotation(prefix, default_stat="median", background_norm=None, is_otof=False):
137+
def gfp_annotation(prefix, default_stat="median", background_norm=None, is_otof=False, seg_version=None):
136138
assert background_norm in (None, "division", "subtraction")
137139

138140
direc = os.path.dirname(os.path.abspath(prefix))
@@ -179,9 +181,22 @@ def gfp_annotation(prefix, default_stat="median", background_norm=None, is_otof=
179181
mask = _create_mask(seg_extended, stain1)
180182
assert mask.shape == seg_extended.shape
181183
feature_set = "default_background_norm" if background_norm == "division" else "default_background_subtract"
182-
statistics = compute_object_measures_impl(
183-
stain1, seg_extended, feature_set=feature_set, background_mask=mask, median_only=True
184-
)
184+
185+
if seg_version is not None:
186+
seg_string = "-".join(seg_version.split("_"))
187+
cochlea = os.path.basename(prefix).split("_crop_")[0]
188+
189+
table_measurement_path = f"{cochlea}/tables/{seg_version}/{stain1_name}_{seg_string}_object-measures.tsv"
190+
table_path_s3, fs = get_s3_path(table_measurement_path)
191+
with fs.open(table_path_s3, "r") as f:
192+
table_measurement = pd.read_csv(f, sep="\t")
193+
194+
statistics = get_object_measures_from_table(seg, table=table_measurement)
195+
196+
else:
197+
statistics = compute_object_measures_impl(
198+
stain1, seg_extended, feature_set=feature_set, background_mask=mask, median_only=True
199+
)
185200

186201
# Open the napari viewer.
187202
v = napari.Viewer()
@@ -281,9 +296,11 @@ def main():
281296
parser.add_argument("--otof", action="store_true",
282297
help="Whether to run the annotation tool for otof samples with VGlut3, "
283298
"Alphatag and IHC segmentation.") # noqa
299+
parser.add_argument("--seg_version", type=str, default=None,
300+
help="Supply segmentation version, e.g. SGN_v2, to use intensities from object measure table.")
284301
args = parser.parse_args()
285302

286-
gfp_annotation(args.prefix, background_norm=args.background_norm, is_otof=args.otof)
303+
gfp_annotation(args.prefix, background_norm=args.background_norm, is_otof=args.otof, seg_version=args.seg_version)
287304

288305

289306
if __name__ == "__main__":

0 commit comments

Comments
 (0)