Skip to content

Commit 7f6c798

Browse files
authored
Merge pull request #9 from openproblems-bio/segm_m_cellpose
Segm m cellpose
2 parents bfe6af5 + 6e09ff7 commit 7f6c798

File tree

3 files changed

+153
-1
lines changed

3 files changed

+153
-1
lines changed
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
name: cellpose
2+
label: "Cellpose Segmentation"
3+
summary: "Output of the segmantation methot cellpose"
4+
description: "Output of the segmantation methot cellpose"
5+
links:
6+
documentation: "https://github.com/openproblems-bio/task_ist_preprocessing"
7+
repository: "https://github.com/openproblems-bio/task_ist_preprocessing"
8+
references:
9+
doi: "10.1038/s41592-020-01018-x"
10+
11+
12+
__merge__: /src/api/comp_method_segmentation.yaml
13+
14+
arguments:
15+
- name: --batch_size
16+
type: integer
17+
default: 8
18+
- name: --model_type
19+
type: string
20+
default: "cyto"
21+
- name: --channel_axis
22+
type: string
23+
default: "None"
24+
- name: --z_axis
25+
type: string
26+
default: "None"
27+
- name: --normalize
28+
type: boolean
29+
default: True
30+
- name: --invert
31+
type: boolean
32+
default: False
33+
- name: --rescale
34+
type: string
35+
default: "None"
36+
- name: --diameter
37+
type: double
38+
default: 30.0
39+
- name: --do_3D
40+
type: boolean
41+
default: False
42+
- name: --anisotropy
43+
type: string
44+
default: "None"
45+
# - name: --net_avg
46+
# type: boolean
47+
# default: False
48+
- name: --augment
49+
type: boolean
50+
default: False
51+
#- name: --tile
52+
# type: boolean
53+
# default: True
54+
- name: --tile_overlap
55+
type: double
56+
default: 0.1
57+
- name: --resample
58+
type: boolean
59+
default: True
60+
- name: --interp
61+
type: boolean
62+
default: True
63+
- name: --flow_threshold
64+
type: double
65+
default: 0.4
66+
- name: --cellprob_threshold
67+
type: double
68+
default: 0.0
69+
- name: --min_size
70+
type: integer
71+
default: 15
72+
- name: --stitch_threshold
73+
type: double
74+
default: 0.0
75+
76+
resources:
77+
- type: python_script
78+
path: script.py
79+
80+
engines:
81+
- type: docker
82+
image: openproblems/base_python:1.0.0
83+
setup:
84+
- type: python
85+
pypi: spatialdata
86+
__merge__:
87+
- /src/base/setup_txsim_partial.yaml
88+
- type: native
89+
90+
runners:
91+
- type: executable
92+
- type: nextflow
93+
directives:
94+
label: [ midtime, lowcpu, lowmem ]
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import txsim as tx
2+
import numpy as np
3+
import os
4+
import yaml
5+
import spatialdata as sd
6+
import anndata as ad
7+
import shutil
8+
import numpy as np
9+
from spatialdata.models import Labels2DModel
10+
import xarray as xr
11+
import datatree as dt
12+
13+
14+
def convert_to_lower_dtype(arr):
15+
max_val = arr.max()
16+
if max_val <= np.iinfo(np.uint8).max:
17+
new_dtype = np.uint8
18+
elif max_val <= np.iinfo(np.uint16).max:
19+
new_dtype = np.uint16
20+
elif max_val <= np.iinfo(np.uint32).max:
21+
new_dtype = np.uint32
22+
else:
23+
new_dtype = np.uint64
24+
25+
return arr.astype(new_dtype)
26+
27+
## VIASH START
28+
par = {
29+
"input": "../task_ist_preprocessing/resources_test/common/2023_10x_mouse_brain_xenium/dataset.zarr",
30+
"output": "segmentation.zarr"
31+
}
32+
33+
## VIASH END
34+
35+
hyperparameters = par.copy()
36+
37+
hyperparameters = {k:(v if v != "None" else None) for k,v in hyperparameters.items()}
38+
del hyperparameters['input']
39+
del hyperparameters['output']
40+
41+
sdata = sd.read_zarr(par["input"])
42+
image = sdata['morphology_mip']['scale0'].image.compute().to_numpy()
43+
transformation = sdata['morphology_mip']['scale0'].image.transform.copy()
44+
45+
sd_output = sd.SpatialData()
46+
image = sdata['morphology_mip']['scale0'].image.compute().to_numpy()
47+
transformation = sdata['morphology_mip']['scale0'].image.transform.copy()
48+
img_arr = tx.preprocessing.segment_cellpose(image[0], hyperparameters)
49+
image = convert_to_lower_dtype(img_arr)
50+
data_array = xr.DataArray(image, name=f'segmentation', dims=('y', 'x'))
51+
parsed_data = Labels2DModel.parse(data_array, transformations=transformation)
52+
sd_output.labels['segmentation'] = parsed_data
53+
54+
print("Writing output", flush=True)
55+
if os.path.exists(par["output"]):
56+
shutil.rmtree(par["output"])
57+
sd_output.write(par["output"])
58+

0 commit comments

Comments
 (0)