Skip to content

Commit ed02fe3

Browse files
Update La-Vision processing
1 parent 71b46ce commit ed02fe3

File tree

4 files changed

+90
-29
lines changed

4 files changed

+90
-29
lines changed

scripts/la-vision/import_mouse_lsm.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import imageio.v3 as imageio
44
from mobie import add_image
5+
from mobie.metadata import read_dataset_metadata
56

67
INPUT_ROOT = "/mnt/ceph-hdd/cold/nim00007/cochlea-lightsheet/keppeler-et-al/mouse"
78
MOBIE_ROOT = "/mnt/vast-nhr/projects/nim00007/data/moser/cochlea-lightsheet/mobie_project/cochlea-lightsheet"
@@ -17,6 +18,12 @@ def add_mouse_lsm():
1718
chunks = (96, 96, 96)
1819

1920
for channel_id, channel_name in enumerate(channel_names, 1):
21+
mobie_ds_folder = os.path.join(MOBIE_ROOT, DS_NAME)
22+
ds_metadata = read_dataset_metadata(mobie_ds_folder)
23+
if channel_name in ds_metadata["sources"]:
24+
print(channel_name, "is already in MoBIE")
25+
continue
26+
2027
input_path = os.path.join(INPUT_ROOT, f"Mouse_cochlea_04_LSFM_ch{channel_id}_raw.tif")
2128
print("Load image data ...")
2229
input_data = imageio.imread(input_path)

scripts/la-vision/predict_blocks.py

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,50 @@
33
from glob import glob
44

55
import imageio.v3 as imageio
6+
import numpy as np
7+
8+
from skimage.segmentation import watershed
9+
from skimage.measure import label
610
from torch_em.util import load_model
711
from torch_em.util.prediction import predict_with_halo
812

9-
INPUT_ROOT = "/mnt/vast-nhr/home/pape41/u12086/Work/my_projects/flamingo-tools/scripts/more-annotations/LA_VISION_M04" # noqa
1013

14+
def _get_files(sgn=True):
15+
input_root = "/mnt/vast-nhr/home/pape41/u12086/Work/my_projects/flamingo-tools/scripts/more-annotations/LA_VISION_M04" # noqa
16+
input_root2 = "/mnt/vast-nhr/home/pape41/u12086/Work/my_projects/flamingo-tools/scripts/more-annotations/LA_VISION_M04_2" # noqa
17+
input_root3 = "/mnt/vast-nhr/home/pape41/u12086/Work/my_projects/flamingo-tools/scripts/more-annotations/LA_VISION_Mar05" # noqa
18+
19+
input_root_ihc = "/mnt/vast-nhr/home/pape41/u12086/Work/my_projects/flamingo-tools/scripts/more-annotations/LA_VISION_Mar05-ihc" # noqa
20+
21+
if sgn:
22+
input_files = glob(os.path.join(input_root, "*.tif")) +\
23+
glob(os.path.join(input_root2, "*.tif")) +\
24+
glob(os.path.join(input_root3, "*.tif"))
25+
else:
26+
input_files = glob(os.path.join(input_root_ihc, "*.tif"))
27+
28+
return input_files
1129

12-
def predict_blocks(model_path, name):
30+
31+
def predict_blocks(model_path, name, sgn=True):
1332
output_folder = os.path.join("./predictions", name)
1433
os.makedirs(output_folder, exist_ok=True)
1534

16-
input_blocks = glob(os.path.join(INPUT_ROOT, "*.tif"))
35+
input_blocks = _get_files(sgn)
1736

18-
model = load_model(model_path)
37+
model = None
1938
for path in input_blocks:
39+
out_path = os.path.join(output_folder, os.path.basename(path))
40+
if os.path.exists(out_path):
41+
continue
42+
if model is None:
43+
model = load_model(model_path)
2044
data = imageio.imread(path)
2145
pred = predict_with_halo(data, model, gpu_ids=[0], block_shape=[64, 128, 128], halo=[8, 32, 32])
22-
out_path = os.path.join(output_folder, os.path.basename(path))
2346
imageio.imwrite(out_path, pred, compression="zlib")
2447

2548

2649
def _segment_impl(pred, dist_threshold=0.5):
27-
import numpy as np
28-
from skimage.segmentation import watershed
29-
from skimage.measure import label
30-
3150
fg, center_dist, boundary_dist = pred
3251
mask = fg > 0.5
3352

@@ -37,35 +56,42 @@ def _segment_impl(pred, dist_threshold=0.5):
3756
return seg
3857

3958

40-
def check_segmentation(name):
59+
def check_segmentation(name, sgn):
4160
import napari
4261

43-
input_blocks = sorted(glob(os.path.join(INPUT_ROOT, "*.tif")))
62+
input_files = _get_files(sgn)
4463

4564
output_folder = os.path.join("./predictions", name)
46-
pred = sorted(glob(os.path.join(output_folder, "*.tif")))
4765

48-
for path, pred_path in zip(input_blocks, pred):
66+
for path in input_files:
4967
image = imageio.imread(path)
68+
pred_path = os.path.join(output_folder, os.path.basename(path))
5069
pred = imageio.imread(pred_path)
51-
seg = _segment_impl(pred)
70+
if sgn:
71+
seg = _segment_impl(pred)
72+
else:
73+
seg = label(pred[0] > 0.5)
5274
v = napari.Viewer()
5375
v.add_image(image)
5476
v.add_image(pred)
5577
v.add_labels(seg)
78+
v.title = os.path.basename(path)
5679
napari.run()
5780

5881

5982
# Model path for original training on low-res SGNs:
6083
# /mnt/vast-nhr/home/pape41/u12086/Work/my_projects/flamingo-tools/scripts/training/checkpoints/cochlea_distance_unet_low-res-sgn # noqa
6184
def main():
6285
parser = argparse.ArgumentParser()
63-
parser.add_argument("--model_path", "-m", required=True)
6486
parser.add_argument("--name", "-n", required=True)
87+
parser.add_argument("--model_path", "-m")
88+
parser.add_argument("--check", action="store_true")
89+
parser.add_argument("--ihc", action="store_true")
6590
args = parser.parse_args()
6691

67-
# predict_blocks(args.model_path, args.name)
68-
check_segmentation(args.name)
92+
predict_blocks(args.model_path, args.name, sgn=not args.ihc)
93+
if args.check:
94+
check_segmentation(args.name, sgn=not args.ihc)
6995

7096

7197
if __name__ == "__main__":

scripts/la-vision/segment_sgns.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
from mobie import add_segmentation
88
from mobie.metadata import add_remote_project_metadata
99

10-
MODEL_PATH = "/mnt/vast-nhr/home/pape41/u12086/Work/my_projects/flamingo-tools/scripts/training/checkpoints/cochlea_distance_unet_low-res-sgn" # noqa
10+
MODEL_PATH = "/mnt/vast-nhr/home/pape41/u12086/Work/my_projects/flamingo-tools/scripts/training/checkpoints/cochlea_distance_unet_low-res-sgn-v2" # noqa
1111
RESOLUTION = (3.0, 1.887779, 1.887779)
12-
SEG_NAME = "SGN_LOWRES"
12+
SEG_NAME = "SGN_LOWRES-v2"
1313

1414

1515
def segment_sgns(input_path, input_key, output_folder):
@@ -56,6 +56,7 @@ def upload_to_s3(mobie_dir, dataset_name):
5656

5757
add_remote_project_metadata(mobie_dir, bucket_name, service_endpoint)
5858

59+
# run(["module", "load", "rclone"])
5960
run(["rclone", "--progress", "copyto",
6061
f"{mobie_dir}/{dataset_name}/dataset.json",
6162
f"cochlea-lightsheet:cochlea-lightsheet/{dataset_name}/dataset.json"])
@@ -92,7 +93,7 @@ def segment_Mar05():
9293

9394

9495
def main():
95-
# segment_M04()
96+
segment_M04()
9697
segment_Mar05()
9798

9899

scripts/more-annotations/extract_sgn_annotations.py

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -96,21 +96,48 @@ def downscale_segmentation():
9696

9797
# Note: consider different normalization strategy for these cochleae and normalize by local intensity
9898
# rather than by global values.
99-
10099
# Also double check empty positions again and make sure they don't contain SGNs
101-
# Additional positions for LaVision annotations:
102-
# {"position":[2031.0655170248258,1925.206039671767,249.14546086048554],"timepoint":0}
103-
# {"position":[2378.3720460599393,2105.471228531872,303.9285928812524],"timepoint":0}
104-
# {"position":[1619.3251178227529,3444.7351705689553,271.2360278843609],"timepoint":0}
105-
# {"position":[2358.2784398426843,1503.2211953830192,762.7325586759833],"timepoint":0}
100+
def download_lavision_crops2():
101+
input_key = "s0"
102+
output_key = None
106103

107-
# Position in Marmoset:
108-
# {"position":[2462.7875134103206,2818.067344942212,1177.1380214828991],"timepoint":0}
104+
# Additional positions for LaVision annotations:
105+
input_path = "LaVision-M04/images/ome-zarr/PV.ome.zarr"
106+
new_positions_m04 = [
107+
[2031.0655170248258, 1925.206039671767, 249.14546086048554],
108+
[2378.3720460599393, 2105.471228531872, 303.9285928812524],
109+
[1619.3251178227529, 3444.7351705689553, 271.2360278843609],
110+
[2358.2784398426843, 1503.2211953830192, 762.7325586759833],
111+
]
112+
113+
output_folder = "./LA_VISION_M04_2"
114+
os.makedirs(output_folder, exist_ok=True)
115+
for pos in new_positions_m04:
116+
halo = [128, 128, 32]
117+
extract_block(
118+
input_path, pos, output_folder, input_key, output_key, RESOLUTION_LA_VISION, halo,
119+
tif=True, s3=True,
120+
)
121+
122+
# Position in Marmoset:
123+
new_positions_mar05 = [
124+
[2462.7875134103206, 2818.067344942212, 1177.1380214828991]
125+
]
126+
input_path = "LaVision-Mar05/images/ome-zarr/PV.ome.zarr"
127+
output_folder = "./LA_VISION_Mar05"
128+
os.makedirs(output_folder, exist_ok=True)
129+
for pos in new_positions_mar05:
130+
halo = [128, 128, 32]
131+
extract_block(
132+
input_path, pos, output_folder, input_key, output_key, RESOLUTION_LA_VISION, halo,
133+
tif=True, s3=True,
134+
)
109135

110136

111137
def main():
112138
# download_lavision_crops()
113-
downscale_segmentation()
139+
# downscale_segmentation()
140+
download_lavision_crops2()
114141

115142

116143
if __name__ == "__main__":

0 commit comments

Comments
 (0)