Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions tests/preprocessing/test_norm_stats.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import numpy as np
from viscy.utils.mp_utils import get_val_stats


def test_get_val_stats():
sample_values = np.arange(0, 101)
stats = get_val_stats(sample_values)
expected_stats = {
"mean": 50.0,
"std": np.std(sample_values),
"median": 50.0,
"iqr": 50.0,
"p1": 1.0,
"p5": 5.0,
"p95": 95.0,
"p99": 99.0,
"p99_p1": 98.0,
"p95_p5": 90.0,
}
assert stats == expected_stats
10 changes: 9 additions & 1 deletion viscy/utils/meta_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,15 @@ def write_meta_field(position: ngff.Position, metadata, field_name, subfield_nam
"""
if field_name in position.zattrs:
if subfield_name in position.zattrs[field_name]:
position.zattrs[field_name][subfield_name].update(metadata)
# Need to create a new dict and reassign to trigger zarr write
updated_subfield = {
**position.zattrs[field_name][subfield_name],
**metadata,
}
position.zattrs[field_name] = {
**position.zattrs[field_name],
subfield_name: updated_subfield,
}
else:
D1 = position.zattrs[field_name]
field_metadata = {
Expand Down
17 changes: 13 additions & 4 deletions viscy/utils/mp_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import iohub.ngff as ngff
import numpy as np
import scipy.stats

import viscy.utils.image_utils as image_utils
import viscy.utils.masks as mask_utils
Expand Down Expand Up @@ -260,11 +259,21 @@ def get_val_stats(sample_values):
indices
:return dict meta_row: Dict with intensity data for image
"""

percentiles = [1, 5, 25, 50, 75, 95, 99]
percentile_values = {
k: float(v)
for k, v in zip(percentiles, np.nanpercentile(sample_values, percentiles))
}
meta_row = {
"mean": float(np.nanmean(sample_values)),
"std": float(np.nanstd(sample_values)),
"median": float(np.nanmedian(sample_values)),
"iqr": float(scipy.stats.iqr(sample_values)),
"median": percentile_values[50],
"iqr": percentile_values[75] - percentile_values[25],
"p5": percentile_values[5],
"p95": percentile_values[95],
"p95_p5": percentile_values[95] - percentile_values[5],
"p1": percentile_values[1],
"p99": percentile_values[99],
"p99_p1": percentile_values[99] - percentile_values[1],
}
return meta_row