Skip to content

Commit

Permalink
More updates for user-study
Browse files Browse the repository at this point in the history
  • Loading branch information
constantinpape committed Aug 22, 2024
1 parent 9ad6238 commit 67a6039
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 10 deletions.
55 changes: 55 additions & 0 deletions data_prep/proofread_consensus_annotations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import os
from glob import glob

import imageio.v3 as imageio
import napari
from skimage.measure import label


IMAGE_ROOT = "../data/for_annotation"
LABEL_ROOT = "../data/consensus_labels/automatic"
OUT_ROOT = "../data/consensus_labels/proofread"


def proofread_split(split, skip_proofread):
image_folder = os.path.join(IMAGE_ROOT, f"split{split}")
split_images = sorted(glob(os.path.join(image_folder, "*.tif")))

label_folder = os.path.join(LABEL_ROOT, f"split{split}")
split_labels = sorted(glob(os.path.join(label_folder, "*.tif")))
assert len(split_images) == len(split_labels)

out_folder = os.path.join(OUT_ROOT, f"split{split}")
os.makedirs(out_folder, exist_ok=True)

for im_path, label_path in zip(split_images, split_labels):
im = imageio.imread(im_path)
labels = imageio.imread(label_path)

out_path = os.path.join(out_folder, os.path.basename(im_path))
if os.path.exists(out_path) and skip_proofread:
print("Skipping already proof-read file", out_path)
continue

v = napari.Viewer()
v.add_image(im)
v.add_labels(labels)

@v.bind_key("s")
def save_labels(v):
labels = v.layers["labels"].data
labels = label(labels)
print("Saving labels to", out_path)
imageio.imwrite(out_path, labels, compression="zlib")

napari.run()


def main():
skip_proofread = True
for split in [1, 2, 3]:
proofread_split(split, skip_proofread=skip_proofread)


if __name__ == "__main__":
main()
8 changes: 8 additions & 0 deletions export_for_figure.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import os
import imageio.v3 as imageio

import h5py

root = ""
image_name = "VID532_H12_1_11d16h00m.tif"

28 changes: 18 additions & 10 deletions summary_evaluation.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,22 @@

ANN_ROOT = "data/annotations"
ANNOTATORS = ["anwai", "caro", "constantin", "luca", "marei"]
# TODO use the proofread ones instead
CONSENSUS_ROOT = "data/consensus_labels/automatic"
CONSENSUS_ROOT = "data/consensus_labels/proofread"
VERSION_TO_SPLIT = {
"v1": 1, "v2": 1, "v3": 1, "v4": 1,
"v5": 2, "v6": 2,
"v7": 3, "v8": 3,
}


def _size_filter(labels, min_size):
if min_size is not None:
ids, sizes = np.unique(labels, return_counts=True)
filter_ids = ids[sizes < min_size]
labels[np.isin(labels, filter_ids)] = 0
return labels


def _load_labels(version, name, im_name, min_size=None):
# Cellpose
if version in [4, 6, 8]:
Expand All @@ -30,10 +37,7 @@ def _load_labels(version, name, im_name, min_size=None):
label_path = os.path.join(ANN_ROOT, f"v{version}", name, f"{im_name}.tif")
labels = imageio.imread(label_path)
labels = label(labels)
if min_size is not None:
ids, sizes = np.unique(labels, return_counts=True)
filter_ids = ids[sizes < min_size]
labels[np.isin(labels, filter_ids)] = 0
labels = _size_filter(labels, min_size)
return labels


Expand Down Expand Up @@ -181,6 +185,8 @@ def evaluate_annotation_quality():
"msa_ann_dev": [],
}

min_size = 50

for v in range(1, 9):
version = f"v{v}"
split = VERSION_TO_SPLIT[version]
Expand All @@ -190,9 +196,11 @@ def evaluate_annotation_quality():

for label_path in consensus_labels:
consensus = imageio.imread(label_path)
consensus = _size_filter(consensus, min_size)

im_name = Path(label_path).stem
for name in ANNOTATORS:
seg = _load_labels(v, name, im_name, min_size=50)
seg = _load_labels(v, name, im_name, min_size=min_size)
this_msa = mean_segmentation_accuracy(seg, consensus)
msas.append(this_msa)

Expand Down Expand Up @@ -247,8 +255,8 @@ def evaluate_generalization():


def get_main_summary():
# summary_quality = evaluate_annotation_quality()
# return summary_quality
summary_quality = evaluate_annotation_quality()
return summary_quality

summary_time = evaluate_annotation_times()
summary_quality = evaluate_annotation_quality()
Expand All @@ -263,7 +271,7 @@ def get_main_summary():
def main():
summary = get_main_summary()
print(summary)
summary.to_excel("./result_summary.xlsx")
# summary.to_excel("./result_summary.xlsx")

# Times are in seconds / image EXCEPT Training time, which is in hours
# additional time evaluation for runtimes.
Expand Down

0 comments on commit 67a6039

Please sign in to comment.