Skip to content

Commit 6474587

Browse files
committed
voxel size in UI and scale is automatically calculated if there is enough information
1 parent 3a13825 commit 6474587

File tree

3 files changed

+40
-21
lines changed

3 files changed

+40
-21
lines changed

synaptic_reconstruction/tools/distance_measure_widget.py

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,14 @@ def _add_lines_and_table(self, lines, properties, table_data, name):
102102
def on_measure_seg_to_object(self):
103103
segmentation = self._get_layer_selector_data(self.image_selector_name1)
104104
object_data = self._get_layer_selector_data(self.image_selector_name2)
105-
resolution = segmentation.shape
106-
print("on_measure_seg_to_object resolution", resolution)
107-
# get image metadata
105+
# get metadata from layer if available
106+
metadata = self._get_layer_selector_data(self.image_selector_name1, return_metadata=True)
107+
resolution = metadata.get("voxel_size", None)
108+
if resolution is not None:
109+
resolution = [v for v in resolution.values()]
110+
# if user input is present override metadata
111+
if self.voxel_size_param.value() != 0.0: # changed from default
112+
resolution = [self.voxel_size_param.value() for _ in range(len(segmentation.shape))]
108113

109114
(distances,
110115
endpoints1,
@@ -127,8 +132,14 @@ def on_measure_pairwise(self):
127132
if segmentation is None:
128133
show_info("Please choose a segmentation.")
129134
return
130-
resolution = segmentation.shape
131-
# get image metadata
135+
# get metadata from layer if available
136+
metadata = self._get_layer_selector_data(self.image_selector_name1, return_metadata=True)
137+
resolution = metadata.get("voxel_size", None)
138+
if resolution is not None:
139+
resolution = [v for v in resolution.values()]
140+
# if user input is present override metadata
141+
if self.voxel_size_param.value() != 0.0: # changed from default
142+
resolution = [self.voxel_size_param.value() for _ in range(len(segmentation.shape))]
132143

133144
(distances,
134145
endpoints1,
@@ -151,6 +162,11 @@ def _create_settings_widget(self):
151162

152163
self.save_path, layout = self._add_path_param(name="Save Table", select_type="file", value="")
153164
setting_values.layout().addLayout(layout)
165+
166+
self.voxel_size_param, layout = self._add_float_param(
167+
"voxel_size", 0.0, min_val=0.0, max_val=100.0,
168+
)
169+
setting_values.layout().addLayout(layout)
154170

155171
settings = self._make_collapsible(widget=setting_values, title="Advanced Settings")
156172
return settings

synaptic_reconstruction/tools/segmentation_widget.py

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -77,24 +77,29 @@ def on_predict(self):
7777

7878
metadata = self._get_layer_selector_data(self.image_selector_name, return_metadata=True)
7979
voxel_size = metadata.get("voxel_size", None)
80-
81-
if self.scale_param.value() != 1.0: # changed from default
82-
scale = []
83-
for k in range(len(image.shape)):
84-
scale.append(self.scale_param.value())
85-
elif voxel_size:
80+
scale = None
81+
82+
if self.voxel_size_param.value() != 0.0: # changed from default
83+
voxel_size = {}
84+
# override voxel size with user input
85+
if len(image.shape) == 3:
86+
voxel_size["x"] = self.voxel_size_param.value()
87+
voxel_size["y"] = self.voxel_size_param.value()
88+
voxel_size["z"] = self.voxel_size_param.value()
89+
else:
90+
voxel_size["x"] = self.voxel_size_param.value()
91+
voxel_size["y"] = self.voxel_size_param.value()
92+
if voxel_size:
8693
# calculate scale so voxel_size is the same as in training
8794
scale = compute_scale_from_voxel_size(voxel_size, model_type)
88-
else:
89-
scale = None
90-
print(f"Rescaled the image by {scale} to optimize for the selected model.")
95+
print(f"Rescaled the image by {scale} to optimize for the selected model.")
9196

9297
segmentation = run_segmentation(
9398
image, model=model, model_type=model_type, tiling=self.tiling, scale=scale
9499
)
95100

96101
# Add the segmentation layer
97-
self.viewer.add_labels(segmentation, name=f"{model_type}-segmentation")
102+
self.viewer.add_labels(segmentation, name=f"{model_type}-segmentation", metadata=metadata)
98103
show_info(f"Segmentation of {model_type} added to layers.")
99104

100105
def _create_settings_widget(self):
@@ -130,11 +135,9 @@ def _create_settings_widget(self):
130135
)
131136
setting_values.layout().addLayout(layout)
132137

133-
134-
# calculate scale: read voxcel size from layer metadata
135-
self.viewer
136-
self.scale_param, layout = self._add_float_param(
137-
"scale", 1.0, min_val=0.0, max_val=8.0,
138+
# read voxel size from layer metadata
139+
self.voxel_size_param, layout = self._add_float_param(
140+
"voxel_size", 0.0, min_val=0.0, max_val=100.0,
138141
)
139142
setting_values.layout().addLayout(layout)
140143

synaptic_reconstruction/tools/util.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ def get_model_training_resolution(model_type):
8181
resolutions = {
8282
"active_zone": {"x": 1.44, "y": 1.44, "z": 1.44},
8383
"compartments": {"x": 3.47, "y": 3.47, "z": 3.47},
84-
"mitochondria": 1.0, # FIXME: this is a dummy value, we need to determine the real one
84+
"mitochondria": {"x": 1.0, "y": 1.0, "z": 1.0}, # FIXME: this is a dummy value, we need to determine the real one
8585
"vesicles_2d": {"x": 1.35, "y": 1.35},
8686
"vesicles_3d": {"x": 1.35, "y": 1.35, "z": 1.35},
8787
"vesicles_cryo": {"x": 1.35, "y": 1.35, "z": 0.88},

0 commit comments

Comments
 (0)