Skip to content

Commit 694a7d1

Browse files
author
anna-grim
committed
refactor: added save merged labels routine
1 parent fa5dbe1 commit 694a7d1

File tree

3 files changed

+60
-4
lines changed

3 files changed

+60
-4
lines changed

demo/demo.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
from tifffile import imread
2-
from xlwt import Workbook
3-
41
import os
2+
53
import numpy as np
4+
from tifffile import imread
5+
from xlwt import Workbook
66

77
from segmentation_skeleton_metrics.skeleton_metric import SkeletonMetric
88

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ dynamic = ["version"]
1717
dependencies = [
1818
"networkx",
1919
"numpy",
20+
"pandas",
2021
"scikit-image",
2122
"tensorstore",
2223
"tifffile",

src/segmentation_skeleton_metrics/skeleton_metric.py

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,8 +320,11 @@ def load_fragments(self):
320320
321321
"""
322322
# Read fragments
323-
reader = swc_utils.Reader(anisotropy=self.anisotropy, return_graphs=True)
323+
reader = swc_utils.Reader(
324+
anisotropy=self.anisotropy, return_graphs=True
325+
)
324326
fragment_graphs = reader.load(self.fragments_pointer)
327+
self.fragment_ids = set(fragment_graphs.keys())
325328

326329
# Filter fragments
327330
self.fragment_graphs = dict()
@@ -521,6 +524,9 @@ def detect_merges(self):
521524
for key, label, xyz in self.merged_labels:
522525
self.process_merge(key, label, xyz, update_merged_labels=False)
523526

527+
# Write merges to local machine
528+
self.save_merged_labels()
529+
524530
def count_merges(self, key, kdtree):
525531
"""
526532
Counts the number of label merges for a given graph key based on
@@ -670,6 +676,55 @@ def quantify_merges(self):
670676
n_edges = self.graphs[key].graph["n_edges"]
671677
self.merged_percent[key] = self.merged_edges_cnt[key] / n_edges
672678

679+
def save_merged_labels(self):
680+
"""
681+
Saves merged labels and their corresponding coordinates to a text
682+
file.
683+
684+
Parameters
685+
----------
686+
None
687+
688+
Returns
689+
-------
690+
None
691+
692+
"""
693+
# Save detected merges
694+
prefix = "corrected_" if self.connections_path else ""
695+
filename = f"merged_ids-{prefix}segmentation.txt"
696+
with open(os.path.join(self.output_dir, filename), "w") as f:
697+
f.write(f" Label - xyz\n")
698+
for _, label, xyz in self.merged_labels:
699+
if self.connections_path:
700+
label = self.get_merged_label(label)
701+
f.write(f" {label} - {xyz}\n")
702+
703+
def get_merged_label(self, label):
704+
"""
705+
Retrieves the label present in the corrected fragments that
706+
corresponds to the given label. Note: the given and retrieved label
707+
may differ in the case when two fragments are merged.
708+
709+
Parameters
710+
----------
711+
label : str
712+
The label for which to find the corresponding label present in the
713+
corrected fragments.
714+
715+
Returns:
716+
-------
717+
str or list
718+
The first matching label found in "self.fragment_ids" or the
719+
original associated labels from "inverse_label_map" if no matches
720+
are found.
721+
722+
"""
723+
for l in self.inverse_label_map[label]:
724+
if l in self.fragment_ids:
725+
return l
726+
return self.inverse_label_map[label]
727+
673728
# -- Projected Run Lengths --
674729
def compute_projected_run_lengths(self):
675730
"""

0 commit comments

Comments
 (0)