coordinate system of xenium explorer and stada are inconsistent

Aperta
#1,194 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
45/100
Tipo di issue
Bug
Chiarezza
Da chiarire
Stato di attività
Attiva
Stack tecnologico
python

Direzione di ricerca

Inizia tracciando i punti di ingresso xenium() e xenium_aligned_image() utilizzando l’output Xenium e il CSV di allineamento forniti, quindi esamina i metadati delle coordinate per morphology_focus, cell_labels, cell_boundaries e cell_circles. Documenta le unità e la trasformazione richiesta, e mostra come estrarre e visualizzare ciascun campione preservando il sistema di coordinate di Xenium Explorer.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Dear sir:
Hi, I’m currently a beginner working with Xenium spatial transcriptomics, and I have a question about coordinate systems in SpatialData.

I have one Xenium slide containing 8 samples. In Xenium Explorer, the coordinate system appears to be in micrometer-scale units. However, when I load the data into SpatialData using:

sdata = xenium(
path="/STtonsil/Data/output/",
cells_as_circles=True
)

sdata.images["he_image"] = xenium_aligned_image(
image_path="../slide_1/0104154_Default_Extended.ome.tif",
alignment_file="../slide_1/slide1_HE_staining_matrix.csv"
)

I obtain the following SpatialData object:

SpatialData object
├── Images
│ ├── 'he_image': DataArray[cyx] (3, 111104, 56320)
│ └── 'morphology_focus': DataTree[cyx] (4, 112141, 54121), ...
├── Labels
│ ├── 'cell_labels': DataTree[yx] ...
│ └── 'nucleus_labels': DataTree[yx] ...
├── Points
│ └── 'transcripts': DataFrame ... (3D points)
├── Shapes
│ ├── 'cell_boundaries': GeoDataFrame ...
│ ├── 'cell_circles': GeoDataFrame ...
│ └── 'nucleus_boundaries': GeoDataFrame ...
└── Tables
└── 'table': AnnData ...

All of these elements are currently associated with the global coordinate system.

When I visualize the images using:

import matplotlib.pyplot as plt

axes = plt.subplots(1, 2, figsize=(10, 10))[1].flatten()

sdata.pl.render_images("he_image").pl.show(
ax=axes[0],
title="H&E image"
)

sdata.pl.render_images("morphology_focus").pl.show(
ax=axes[1],
title="Morphology image"
)

the x-axis of the resulting plot ranges from approximately 0 to 50,000. However, in Xenium Explorer, the corresponding coordinate system appears to range only up to approximately 10,000 µm.

Therefore, the coordinates do not seem to match. For example, when I extract the coordinates of sample C1 from my AnnData object:

xy_C1 = adata_slide1[
adata_slide1.obs["sampleid"] == "C1"
].obsm["spatial"]

xmin_C1, ymin_C1 = xy_C1.min(axis=0)
xmax_C1, ymax_C1 = xy_C1.max(axis=0)

print(
xmin_C1,
ymin_C1,
xmax_C1,
ymax_C1
)

the resulting coordinates do not correspond to the coordinates I see in Xenium Explorer.

Could you please explain how I can correctly convert or transform the SpatialData global coordinates into the actual Xenium micrometer coordinate system?

More specifically, I would like to know:

What coordinate system are morphology_focus, cell_labels, cell_boundaries, and cell_circles using in this SpatialData object?
How can I convert their coordinates to the same micrometer-scale coordinate system used by Xenium Explorer?
What is the correct way to extract and visualize each of the 8 samples separately while keeping the spatial coordinates consistent with Xenium Explorer?
Is there a recommended SpatialData function or transformation for converting between the image pixel coordinates and the Xenium physical (µm) coordinates?

I would really appreciate any guidance on this, as I’m still learning how Xenium and SpatialData handle coordinate systems. Thank you very much for your help!

spatialdata figure coordinate:

Image
Lingua principale
Python
Stelle
394
Fork
95
Merge medio
3g 9h
PR unite (30g)
5

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di scverse/spatialdata

Tutte le issue di scverse/spatialdata

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.