File size: 1,595 Bytes
c843d82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# imports
from pathlib import Path
import os, re, numpy as np
from cellpose import models
from skimage import io as skio
from tqdm import tqdm


def cellpose_sam_detect_images_eval(model_path, image_input_dir, image_output_dir, image_ext=".png", flow_threshold=0.9, cellprob_threshold=-6, min_size=1):
    """
    Detect images using Cellpose SAM.
    
    Args:
        model_path (str): Path to the Cellpose SAM model.
        image_input_dir (Path): Directory containing the images.
        image_output_dir (Path): Directory to save the masks.
        image_ext (str): Image file extension.
        flow_threshold (float): Flow threshold for Cellpose SAM.
        cellprob_threshold (float): Cell probability threshold for Cellpose SAM.
        min_size (int): Minimum size for Cellpose SAM.
    """
    print(image_output_dir)
    image_files = [f for f in image_input_dir.glob("*"+image_ext) if "_masks" not in f.name and "_flows" not in f.name]
    model = models.CellposeModel(gpu=True, pretrained_model=model_path)
    os.makedirs(image_output_dir, exist_ok=True)

    for image_file in tqdm(image_files, desc="Segmenting images"):
        image_path = os.path.join(image_input_dir, image_file)
        img = skio.imread(image_path)
        masks, flows, styles = model.eval([img], batch_size = 16, flow_threshold=flow_threshold, cellprob_threshold=cellprob_threshold, augment=True, resample=True, min_size=min_size)
        mask = masks[0]
        base_name = Path(image_file).stem
        mask_path = os.path.join(image_output_dir, f"{base_name}.npy")
        np.save(mask_path, mask)