Spaces:
Sleeping
Sleeping
| # imports | |
| import logging, numpy as np, matplotlib.pyplot as plt, os | |
| from pathlib import Path | |
| from model.run_cellpose import CellposeBatchProcessor | |
| from utils.constants import * | |
| from skimage.measure import label | |
| from tifffile import imwrite | |
| from utils.generate_masks import MaskStitcher | |
| from PIL import Image | |
| # # cellpose - masks | |
| # setup_logging(logging.INFO) | |
| # processor = CellposeBatchProcessor(input_dir=Path("/Users/discovery/Downloads/xenium_testing_jit/spinal_cord_samples_fr/cellpose_test"), | |
| # output_dir=Path("/Users/discovery/Downloads/xenium_testing_jit/spinal_cord_samples_fr/cellpose_outs"), | |
| # model_name="cyto3_restore", bsize=1024, overlap=0.15, batch_size=6, gpu=0, channels=(2,0), diameter=CELL_DIAMETER) | |
| # processor.process_all() | |
| setup_logging(logging.INFO) | |
| processor = CellposeBatchProcessor( | |
| input_dir = Path("/Users/discovery/Downloads/xenium_testing_jit/spinal_cord_samples_fr/cellpose_test"), | |
| output_dir = Path("/Users/discovery/Downloads/xenium_testing_jit/spinal_cord_samples_fr/cellpose_outs"), | |
| # point to the folder that contains cellpose_model.pth + .yaml | |
| model_name = "/Users/discovery/Downloads/xenium_testing_jit/spinal_cord_samples_fr/train/models/cellpose_1746568542.462492", | |
| bsize = 1024, | |
| overlap = 0.15, | |
| batch_size = 6, | |
| gpu = 0, # set to –1 if you must run CPU | |
| channels = (2, 0),# or whatever channels you trained with | |
| diameter = CELL_DIAMETER # or None to auto‑scale | |
| ) | |
| processor.process_all() | |
| ## - x - x - x - x - x - x - x - x - x - x - x - x | |
| RANGE_CELL_DIAMETER = list(range(20, 60, 5)) | |
| INPUT_DIR = Path("/Users/discovery/Downloads/xenium_testing_jit/spinal_cord_samples_fr/cellpose_test") | |
| OUTPUT_DIR = Path("/Users/discovery/Downloads/xenium_testing_jit/spinal_cord_samples_fr/cellpose_outs") | |
| # for CELL_DIAMETER in RANGE_CELL_DIAMETER: | |
| # processor = CellposeBatchProcessor(input_dir=INPUT_DIR, output_dir=OUTPUT_DIR / f"{CELL_DIAMETER}", | |
| # model_name="cyto3_restore", bsize=1024, overlap=0.15, batch_size=6, | |
| # gpu=0, channels=(2,0), diameter=CELL_DIAMETER) | |
| # processor.process_all() | |
| MASK_SUBDIR = "masks" | |
| STITCHED_DIR = OUTPUT_DIR / "stitched" | |
| STITCHED_DIR.mkdir(parents=True, exist_ok=True) | |
| first_masks = sorted((OUTPUT_DIR / str(RANGE_CELL_DIAMETER[0]) / MASK_SUBDIR).glob("*.png")) | |
| for mask_path in first_masks: | |
| name = mask_path.name | |
| union_mask = None | |
| for d in RANGE_CELL_DIAMETER: | |
| p = OUTPUT_DIR / str(d) / MASK_SUBDIR / name | |
| arr = np.array(Image.open(p)) > 0 | |
| if union_mask is None: | |
| union_mask = arr | |
| else: | |
| union_mask |= arr | |
| union_lbl = label(union_mask) | |
| out_tif = STITCHED_DIR / name.replace(".png", "tif") | |
| imwrite(out_tif, union_lbl.astype(np.uint16)) | |
| from skimage.io import imsave | |
| imsave(STITCHED_DIR / name, (union_mask * 255).astype(np.uint8)) | |
| print(f"Stitched: {name} → {out_tif.name}") |