Skip to content

Commit 70f03b5

Browse files
author
anna-grim
committed
filter via local search
1 parent 0b1fe31 commit 70f03b5

File tree

2 files changed

+49
-21
lines changed

2 files changed

+49
-21
lines changed

src/segmentation_skeleton_metrics/skeleton_metric.py

Lines changed: 48 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,7 @@ def is_fragment_merge(self, key, label, kdtree):
575575
voxel = fragment_graph.voxels[leaf]
576576
gt_voxel = util.kdtree_query(kdtree, voxel)
577577
if self.physical_dist(gt_voxel, voxel) > 60:
578-
visited = self.find_merge_site(
578+
self.find_merge_site(
579579
key, kdtree, fragment_graph, leaf, visited
580580
)
581581

@@ -607,27 +607,55 @@ def find_merge_site(self, key, kdtree, fragment_graph, source, visited):
607607
voxel = fragment_graph.voxels[node]
608608

609609
# Log merge mistake
610-
segment_id = util.get_segment_id(fragment_graph.filename)
611-
xyz = img_util.to_physical(voxel, self.anisotropy)
612-
self.merged_labels.add((key, segment_id, xyz))
613-
self.merge_sites.append(
614-
{
615-
"Segment_ID": segment_id,
616-
"GroundTruth_ID": key,
617-
"Voxel": tuple([int(t) for t in voxel]),
618-
"World": tuple([float(t) for t in xyz]),
619-
}
620-
)
610+
if self.is_valid_merge(fragment_graph, kdtree, node):
611+
filename = fragment_graph.filename
612+
segment_id = util.get_segment_id(filename)
613+
xyz = img_util.to_physical(voxel, self.anisotropy)
614+
self.merged_labels.add((key, segment_id, xyz))
615+
self.merge_sites.append(
616+
{
617+
"Segment_ID": segment_id,
618+
"GroundTruth_ID": key,
619+
"Voxel": tuple([int(t) for t in voxel]),
620+
"World": tuple([float(t) for t in xyz]),
621+
}
622+
)
621623

622-
# Save merged fragment (if applicable)
623-
if self.save_merges:
624-
gutil.write_graph(fragment_graph, self.merge_writer)
625-
gutil.write_graph(
626-
self.gt_graphs[key], self.merge_writer
627-
)
628-
return visited
629-
return visited
624+
# Save merged fragment (if applicable)
625+
if self.save_merges:
626+
gutil.write_graph(
627+
fragment_graph, self.merge_writer
628+
)
629+
gutil.write_graph(
630+
self.gt_graphs[key], self.merge_writer
631+
)
632+
return
630633

634+
def is_valid_merge(self, graph, kdtree, root):
635+
n_hits = 0
636+
queue = list([(root, 0)])
637+
visited = set({root})
638+
while queue:
639+
# Visit node
640+
i, d_i = queue.pop()
641+
voxel_i = graph.voxels[i]
642+
gt_voxel = util.kdtree_query(kdtree, voxel_i)
643+
if self.physical_dist(gt_voxel, voxel_i) < 5:
644+
n_hits += 1
645+
646+
# Check whether to break
647+
if n_hits > 16:
648+
break
649+
650+
# Update queue
651+
for j in graph.neighbors(i):
652+
voxel_j = graph.voxels[j]
653+
d_j = d_i + self.physical_dist(voxel_i, voxel_j)
654+
if j not in visited and d_j < 30:
655+
queue.append((j, d_j))
656+
visited.add(j)
657+
return True #True if n_hits > 16 else False
658+
631659
def process_merge_sites(self):
632660
if self.merge_sites:
633661
# Remove duplicates

src/segmentation_skeleton_metrics/utils/swc_util.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ def read_from_gcs_swcs(self, bucket_name, swc_paths):
322322
with ThreadPoolExecutor() as executor:
323323
# Assign threads
324324
threads = list()
325-
for path in swc_paths[0:16]: # temp
325+
for path in swc_paths[0:5]: # temp
326326
threads.append(
327327
executor.submit(self.read_from_gcs_swc, bucket_name, path)
328328
)

0 commit comments

Comments
 (0)