关键是基于shapely模块中的within方法,判断信号点与ROI的包含关系。

### 根据单细胞分割的ROI进行过滤
from roifile import roiread 
from shapely import geometry as geo
from shapely import within

fp = r"D:\data\xxd\250219\s2-z5-1_rois.zip"  
# cellpose 分割后导出的roi记录,ImageJ兼容
rois = roiread(fp)

pts = rois[0].integer_coordinates
pixelsize = 0.0313   
# 单位与 imaris 保持一致,为微米
roi = geo.Polygon(pts*pixelsize)

info = []
for idx, row in data2.iterrows():
    p = geo.Point([row['x'], row['y']])
    if within(p, roi):
        info.append([idx, row['mean'], row['volume'], row['Nearest 1 Neighbors Distance'], 1])
        # idx 为 cluster 的索引,最后一个为细胞的索引
data3 = pd.DataFrame(data=info, columns=['pid', 'mean', 'volume', 'NND', 'cell'])

注意 ROI 记录是 cellpose 分割出来的。

2025-02-19T05:43:15.png

python中可以使用 roifile 模块读取,顺带检查一下,是对的。

2025-02-19T05:41:29.png

最后修改:2025 年 05 月 21 日
请大力赞赏以支持本站持续运行!