Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Segm m cellpose #9

Merged
merged 5 commits into from
Nov 22, 2024
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
2 changes: 1 addition & 1 deletion common
94 changes: 94 additions & 0 deletions src/methods_segmentation/cellpose/config.vsh.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
name: cellpose
label: "Cellpose Segmentation"
summary: "Output of the segmantation methot cellpose"
description: "Output of the segmantation methot cellpose"
links:
documentation: "https://github.com/openproblems-bio/task_ist_preprocessing"
repository: "https://github.com/openproblems-bio/task_ist_preprocessing"
references:
doi: "10.1038/s41592-020-01018-x"


__merge__: /src/api/comp_method_segmentation.yaml

arguments:
- name: --batch_size
type: integer
default: 8
- name: --model_type
type: string
default: "cyto"
- name: --channel_axis
type: string
default: "None"
- name: --z_axis
type: string
default: "None"
- name: --normalize
type: boolean
default: True
- name: --invert
type: boolean
default: False
- name: --rescale
type: string
default: "None"
- name: --diameter
type: double
default: 30.0
- name: --do_3D
type: boolean
default: False
- name: --anisotropy
type: string
default: "None"
# - name: --net_avg
# type: boolean
# default: False
- name: --augment
type: boolean
default: False
#- name: --tile
# type: boolean
# default: True
- name: --tile_overlap
type: double
default: 0.1
- name: --resample
type: boolean
default: True
- name: --interp
type: boolean
default: True
- name: --flow_threshold
type: double
default: 0.4
- name: --cellprob_threshold
type: double
default: 0.0
- name: --min_size
type: integer
default: 15
- name: --stitch_threshold
type: double
default: 0.0

resources:
- type: python_script
path: script.py

engines:
- type: docker
image: openproblems/base_python:1.0.0
setup:
- type: python
pypi: spatialdata
__merge__:
- /src/base/setup_txsim_partial.yaml
- type: native

runners:
- type: executable
- type: nextflow
directives:
label: [ midtime, lowcpu, lowmem ]
58 changes: 58 additions & 0 deletions src/methods_segmentation/cellpose/script.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import txsim as tx
import numpy as np
import os
import yaml
import spatialdata as sd
import anndata as ad
import shutil
import numpy as np
from spatialdata.models import Labels2DModel
import xarray as xr
import datatree as dt


def convert_to_lower_dtype(arr):
max_val = arr.max()
if max_val <= np.iinfo(np.uint8).max:
new_dtype = np.uint8
elif max_val <= np.iinfo(np.uint16).max:
new_dtype = np.uint16
elif max_val <= np.iinfo(np.uint32).max:
new_dtype = np.uint32
else:
new_dtype = np.uint64

return arr.astype(new_dtype)

## VIASH START
par = {
"input": "../task_ist_preprocessing/resources_test/common/2023_10x_mouse_brain_xenium/dataset.zarr",
"output": "segmentation.zarr"
}

## VIASH END

hyperparameters = par.copy()

hyperparameters = {k:(v if v != "None" else None) for k,v in hyperparameters.items()}
del hyperparameters['input']
del hyperparameters['output']

sdata = sd.read_zarr(par["input"])
image = sdata['morphology_mip']['scale0'].image.compute().to_numpy()
transformation = sdata['morphology_mip']['scale0'].image.transform.copy()

sd_output = sd.SpatialData()
image = sdata['morphology_mip']['scale0'].image.compute().to_numpy()
transformation = sdata['morphology_mip']['scale0'].image.transform.copy()
img_arr = tx.preprocessing.segment_cellpose(image[0], hyperparameters)
image = convert_to_lower_dtype(img_arr)
data_array = xr.DataArray(image, name=f'segmentation', dims=('y', 'x'))
parsed_data = Labels2DModel.parse(data_array, transformations=transformation)
sd_output.labels['segmentation'] = parsed_data

print("Writing output", flush=True)
if os.path.exists(par["output"]):
shutil.rmtree(par["output"])
sd_output.write(par["output"])