Skip to content

Commit d6f7f52

Browse files
Merge pull request #142 from bioimage-io/update_scale_range
Update scale range
2 parents c2458e7 + 529bb56 commit d6f7f52

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

bioimageio/core/prediction_pipeline/_processing.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ class ScaleRange(Processing):
166166
axes: Optional[Sequence[str]] = None
167167
min_percentile: float = 0.0
168168
max_percentile: float = 100.0
169+
eps: float = 1e-6
169170
reference_tensor: Optional[str] = None
170171

171172
def get_required_dataset_statistics(self) -> Dict[str, Set[Measure]]:
@@ -209,7 +210,7 @@ def apply(self, tensor: xr.DataArray) -> xr.DataArray:
209210
v_lower = get_stat(ref_name, Percentile(self.min_percentile, axes=axes))
210211
v_upper = get_stat(ref_name, Percentile(self.max_percentile, axes=axes))
211212

212-
return ensure_dtype((tensor - v_lower) / v_upper, dtype="float32")
213+
return ensure_dtype((tensor - v_lower) / (v_upper - v_lower + self.eps), dtype="float32")
213214

214215
def __post_init__(self):
215216
super().__post_init__()

tests/prediction_pipeline/test_preprocessing.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,14 @@ def test_scale_range():
131131
)
132132
)
133133

134-
exp_data = (np_data - np_data.min()) / np_data.max()
134+
eps = 1.0e-6
135+
mi, ma = np_data.min(), np_data.max()
136+
exp_data = (np_data - mi) / (ma - mi + eps)
135137
expected = xr.DataArray(exp_data, dims=("x", "y"))
136138

137139
result = preprocessing(data)
138-
xr.testing.assert_allclose(expected, result)
140+
# NOTE xarray.testing.assert_allclose compares irrelavant properties here and fails although the result is correct
141+
np.testing.assert_allclose(expected, result)
139142

140143

141144
def test_scale_range_axes():
@@ -156,13 +159,15 @@ def test_scale_range_axes():
156159
)
157160
)
158161

162+
eps = 1.0e-6
159163
p_low = np.percentile(np_data, min_percentile, axis=(1, 2), keepdims=True)
160164
p_up = np.percentile(np_data, max_percentile, axis=(1, 2), keepdims=True)
161-
exp_data = (np_data - p_low) / p_up
165+
exp_data = (np_data - p_low) / (p_up - p_low + eps)
162166
expected = xr.DataArray(exp_data, dims=("c", "x", "y"))
163167

164168
result = preprocessing(data)
165-
xr.testing.assert_allclose(expected, result)
169+
# NOTE xarray.testing.assert_allclose compares irrelavant properties here and fails although the result is correct
170+
np.testing.assert_allclose(expected, result)
166171

167172

168173
def test_sigmoid():

0 commit comments

Comments
 (0)