Guide d'utilisation de l'outil Spateo (segmentation de la chromatine cellulaire)

Guide d'utilisation de l'outil Spatéo (1)

近期发现Spateo这个神奇的工具能做到细胞分割,里面也有很多有趣的算法

Installer

Il est à noter que le système win ne peut pas être installé actuellement ! ! ! La méthode ne s'applique qu'aux systèmes Linux ! ! !

Nous avons besoin d'au moins la version 3.7 et supérieure de python.

#这里我们使用3.9版本的python
conda create -n spa python=3.9

Il existe trois façons d'installer ce package (pip/pip git/offline). Cependant, en cas de conflits de versions, seul pip est efficace. Voici le code :

#方法一
pip install spateo-release
方法二(有网络条件的可以自己尝试一下)
pip install git+https://github.com/aristoteleo/spateo-release

Problèmes connus et correctifs officiels

S'il y a un conflit, vous pouvez exécuter

pip install h5py==3.7.0
pip install anndata==0.8.0

Il est à noter que le système win ne peut pas être installé actuellement ! ! ! La méthode ci-dessus s'applique uniquement aux systèmes Linux ! ! !

Aller droit au but, utiliser Spateo pour la segmentation de la chromatine cellulaire

Dans ce didacticiel, nous supposons que nous avons associé des images d’ARN et de coloration nucléaire de la même coupe de tissu et que les deux systèmes de coordonnées sont (à peu près) enregistrés. Nous utiliserons la coloration nucléaire comme véritable emplacement du noyau et utiliserons cette information pour obtenir la segmentation cellulaire. Nous le ferons dans les étapes suivantes.

1. En tant qu'étape de prétraitement, nous améliorerons l'alignement entre les images colorées et les coordonnées de l'ARN.
2. Identifiez et étiquetez les noyaux individuels en utilisant une approche basée sur les bassins versants.
3. Effectuez la même opération en utilisant une méthode basée sur l'apprentissage en profondeur appelée StarDist.
4. [Facultatif] Améliorez les balises StarDist avec des balises de bassin versant en copiant les balises qui existent dans la méthode du bassin versant mais qui ne chevauchent aucune balise dans la méthode StarDist.
5. [Facultatif] Développez le marquage nucléaire dans le cytoplasme.

Importer le package installé

L'auteur doit utiliser un ordinateur Apple

import spateo as st
import matplotlib.pyplot as plt

st.config.n_threads = 8
%config InlineBackend.print_figure_kwargs = {
    
    'facecolor' : "w"}
%config InlineBackend.figure_format = 'retina'

Télécharger les données

Nous utiliserons l’ensemble de données de coupe coronale de souris tronqué par Chen et al., 2021. Il s'agit d'un ensemble de données Stereo-seq fournissant une coloration de l'ADNsb (noyau).

!wget "https://drive.google.com/uc?export=download&id=1nONOaUy7utvtXQ3ZPx7R3TePq2Oo4JFM" -nc -O SS200000135IL-D1.ssDNA.tif
!wget "https://drive.google.com/uc?export=download&id=18sM-5LmxOgt-3kq4ljtq_EdWHjihvPUx" -nc -O SS200000135TL_D1_all_bin1.txt.gz

Chargez le nombre UMI téléchargé et les images de taches nucléaires dans un objet AnnData. Aux fins de la segmentation des cellules, nous utiliserons une matrice de comptage agrégée, où les obs et vars d'AnnData correspondent aux coordonnées spatiales X et Y, et chaque élément de la matrice contient le nombre total d'UMI capturés pour chaque coordonnée X et Y. .

adata = st.io.read_bgi_agg(
    'SS200000135TL_D1_all_bin1.txt.gz', 'SS200000135IL-D1.ssDNA.tif',
)
adata

|-----> Construire une matrice de comptage.
|-----> __type à uns dans l'objet AnnData.
|-----> pp à uns dans l'objet AnnData.
|-----> Espace à uns dans l'objet AnnData.
Objet AnnData avec n_obs × n_vars = 2000 × 2000
uns : '__type', 'pp', 'space'
couches : 'taché', 'cousu', 'non cousu'

st.pl.imshow(adata, 'stain')

|-----> Calque de couleur dans l'objet AnnData
Insérer la description de l'image ici

Optimiser l'alignement

L’image colorée doit déjà être à peu près alignée avec les coordonnées de l’ARN, mais peut être légèrement mal alignée. Des désalignements importants peuvent conduire à une agrégation UMI incorrecte (et donc à des cellules incorrectes !). Par conséquent, nous considérons qu’il est recommandé d’améliorer les alignements fournis directement à partir des analyses de transcriptomique spatiale.

Spateo propose deux stratégies d'alignement, mais ici nous utiliserons l'alignement rigide le plus simple car les tests montrent que cela fonctionne bien pour cet échantillon. Pour d’autres échantillons, les méthodes d’alignement non rigides peuvent donner de meilleurs résultats.

before = adata.layers['stain'].copy()
st.cs.refine_alignment(adata, mode='rigid', transform_layers=['stain'])

|-----> Calques tachés dans l'objet AnnData
|-----> Calques non cousus dans l'objet AnnData
|-----> Affiner l'alignement en mode rigide.
|-----> Couche de transformation ['stain']
|-----> Couche de tache dans l'objet AnnData
|-----> Couche de tache dans l'objet AnnData.

fig, axes = plt.subplots(ncols=2, figsize=(8, 4), tight_layout=True)
axes[0].imshow(before)
st.pl.imshow(adata, 'unspliced', ax=axes[0], alpha=0.6, cmap='Reds', vmax=2, use_scale=False, save_show_or_return='return')
axes[0].set_title('before alignment')
st.pl.imshow(adata, 'stain', ax=axes[1], use_scale=False, save_show_or_return='return')
st.pl.imshow(adata, 'unspliced', ax=axes[1], alpha=0.6, cmap='Reds', vmax=2, use_scale=False, save_show_or_return='return')
axes[1].set_title('after alignment')

|-----> Calque non épissé dans l'objet AnnData
|-----> Calque coloré dans l'objet AnnData
|-----> Calque non épissé dans l'objet AnnData
Text(0.5, 1.0, 'Après alignement' )
Insérer la description de l'image ici

approche basée sur les bassins versants

Spateo inclut une méthode personnalisée basée sur les bassins versants pour segmenter et étiqueter les noyaux à partir d'images colorées. À un niveau élevé, il utilise une combinaison de seuils globaux et locaux pour obtenir d'abord des masques de noyaux (rappelez-vous, cela s'appelle segmentation), puis utilise Watershed pour attribuer des étiquettes (rappelez-vous, cela s'appelle étiquetage).

Diviser

st.cs.mask_nuclei_from_stain(adata)
st.pl.imshow(adata, 'stain_mask')

|-----> Calque de coloration dans l'objet AnnData
|-----> Construit un masque nucléaire à partir d'une image colorée.
|-----> tache_mask au calque de l'objet AnnData.
|-----> calque tache_mask dans l'objet AnnData
Insérer la description de l'image ici

Étiquette

st.cs.find_peaks_from_mask(adata, 'stain', 7)
st.cs.watershed(adata, 'stain', 5, out_layer='watershed_labels')

fig, ax = st.pl.imshow(adata, 'stain', save_show_or_return='return')
st.pl.imshow(adata, 'watershed_labels', labels=True, alpha=0.5, ax=ax)

|-----> Le calque tache_mask dans l'objet AnnData
|-----> Recherche les pics avec une distance minimale de 7.
|-----> Aux spots_distances du calque dans l'objet AnnData.
|-----> tache_markers au calque dans l'objet AnnData.
|-----> Couche de taches dans l'objet AnnData
|-----> Couche Stain_mask dans l'objet AnnData
|-----> Couche Stain_markers dans l'objet AnnData
|-----> Division de flux.
|-----> watershed_labels vers la couche dans l'objet AnnData.
|-----> Calque coloré dans l'objet AnnData
|-----> Calque Watershed_labels dans l'objet AnnData

Insérer la description de l'image ici
Pour l’instant c’est fait ! Mais encore faut-il en savoir plus sur sa structure de données ! Il convient de noter que s'il existe des structures de lecture différentes, il se peut qu'il n'y ait pas de couches épissées et non épissées.

Pour plus de connaissances en bioinformatique, bienvenue pour échanger v: coffeeiix (une formation sur l'analyse du transcriptome unicellulaire est également disponible)

Je suppose que tu aimes

Origine blog.csdn.net/coffeeii/article/details/130396112
conseillé
Classement