空間トランスクリプトーム解析(spatial transcriptomics)のうちシーケンス型(Visium・Stereo-seq など NGS で読み出す方式)は、測定の単位(フィーチャ)と細胞の単位が一致しません。Visium HD の 2 µm ビンや Stereo-seq のネイティブ解像度では、1つの細胞が何十個ものビンに分かれています。そのまま解析するのか、それとも細胞に組み立て直すのか。この判断を先に済ませないと、そのあとの QC もクラスタリングも、何を数えているのか分からないものになります。
1. 選べる単位は、プラットフォームで決まっている
| プラットフォーム | 選べる単位 | 判断の余地 |
|---|---|---|
| Visium v1 / v2 | 55 µm スポットのみ | なし。デコンボリューションへ進む |
| Curio Seeker | 10 µm ビーズのみ | なし。ビーズのまま進む |
| Visium HD | 2 / 8 / 16 µm ビン、または細胞 | ここが判断のしどころ |
| Stereo-seq | bin1〜bin200、または cellbin | 同上 |
Visium と Curio Seeker には選択肢がありません。フィーチャが細胞より大きい(または同程度)なので、細胞型を割り当てるにはデコンボリューションを使います。判断が必要なのは、フィーチャが細胞より小さいプラットフォームです。
2. カウントは、面積の分だけ減る
判断の土台になるのは、単純な事実です。1つのフィーチャで捕まえられる転写産物の量は、その面積に比例する。

2 µm ビンの面積は 4 µm²、8 µm ビンは 64 µm²。一辺が 4 倍なら面積は 16 倍です。総カウントも、おおよそこの比で変わります。
総カウントが 1/16 になると、検出できる遺伝子数はそれ以上に減ります。カウントが薄くなるほど、多くの遺伝子が「0 回」になるからです。たとえば 8 µm ビンで遺伝子数の中央値が 80 でも、2 µm ビンでは 80/16 = 5 ではなく、もっと小さい値に落ち込みます。「解像度を上げれば情報が増える」わけではないのは、これが理由です。
自分のデータで確かめるのが確実です。3つのビンサイズを同じ物差しで比べます。
python
import numpy as np
import scanpy as sc
# 3つのビンサイズを、同じ物差しで比べる
for key in ["square_002um", "square_008um", "square_016um"]:
ad = sdata[key]
sc.pp.calculate_qc_metrics(ad, inplace=True, log1p=False)
print(
key,
"フィーチャ数:", ad.n_obs,
"総カウント中央値:", int(np.median(ad.obs["total_counts"])),
"遺伝子数中央値:", int(np.median(ad.obs["n_genes_by_counts"])),
)
# square_002um 総カウント中央値: 6 遺伝子数中央値: 6
# square_008um 総カウント中央値: 95 遺伝子数中央値: 79
# square_016um 総カウント中央値: 380 遺伝子数中央値: 262
# 総カウントは おおよそ 16 倍・64 倍。遺伝子数はそこまで増えない
3. 判断の条件は2つ ─ カウントと画像
細胞に組み立てるには、次の2つが両方必要です。
- 核が見える画像がある:Visium HD なら H&E や DAPI、Stereo-seq なら ssDNA か DAPI。核が写っていなければ、どこが細胞かを決める手がかりがない。
- カウントが足りている:組み立てた細胞1個あたりのカウントが、下流の解析に耐えるだけ残っていること。
STOmics は Stereo-seq について、具体的な目安を出しています。bin20 あたりの遺伝子数の中央値が 200 を超え、かつ核染色画像の品質が良いとき、細胞単位(cellbin)での解析を勧めています。どちらかが欠けるなら、bin50 や bin100 に下げます。
python
# Stereo-seq:bin20 の遺伝子数中央値が判断材料になる
med = np.median(adata_bin20.obs["n_genes_by_counts"])
print("bin20 の遺伝子数中央値:", med)
if med > 200 and has_good_nuclear_image:
print("cellbin へ進める")
else:
print("bin50 または bin100 に下げる")
# 判断は2つの条件の AND。片方でも欠けたら、細胞単位には進まない
サブセル解像度のデータを手にすると、「せっかくだから一番細かい単位で解析したい」と考えたくなります。しかし単位を細かくするほど、1個あたりのカウントは薄くなり、クラスタリングもデコンボリューションも不安定になります。解像度は、カウントが許す範囲で上げる。組織によっては、8 µm ビンや bin50 が最適解であることは珍しくありません。
4. 細胞に組み立てる ─ Visium HD の場合
bin2cell(Polański et al., Bioinformatics, 2024)は、2 µm ビンを細胞にまとめ直すための Python パッケージです。Scanpy と互換で、GPU なしで動きます。論文によれば、マウス脳のデモデータで生の入力から細胞オブジェクトまでCPU で 15 分、メモリは 10 GB 以内です。

これは Visium HD 固有の、あまり知られていない技術的な問題です。チップを印刷する工程で、2 µm ビンの幅と高さに、ばらつきが生じます。その結果、総カウントを描くと行と列に縞模様が現れます。ある行やある列だけが、系統的に転写産物を取り逃がすのです。これは生物学ではありません。bin2cell の destripe() は、行と列ごとに分位点(既定 0.99)を求めて、この縞を補正します。補正後の値は整数ではなくなるので、整数が必要な下流処理では丸めてください。
python
import bin2cell as b2c
# 2 µm ビンを読む
adata = b2c.read_visium(
"data/visium_hd/binned_outputs/square_002um",
source_image_path="data/tissue_image.btf",
spaceranger_image_path="data/visium_hd/spatial",
)
adata.var_names_make_unique()
# チップ印刷のばらつきで、行と列に縞が出る。これを補正する
b2c.destripe(adata)
# H&E 画像をセグメンテーション用の解像度にそろえる
mpp = 0.3 # microns per pixel
b2c.scaled_he_image(adata, mpp=mpp, save_path="stardist/he.tiff")
# StarDist で核を検出する。prob_thresh は既定より下げる
b2c.stardist(
image_path="stardist/he.tiff",
labels_npz_path="stardist/he.npz",
stardist_model="2D_versatile_he", prob_thresh=0.01,
)
b2c.insert_labels(adata, labels_npz_path="stardist/he.npz", mpp=mpp, labels_key="labels_he")
# 核を膨張させて細胞にする(既定は 2 ビン分)
b2c.expand_labels(adata, labels_key="labels_he", expanded_labels_key="labels_he_expanded")
# ビンを細胞にまとめる
cdata = b2c.bin_to_cell(adata, labels_key="labels_he_expanded")
print(cdata.shape) # (細胞数, 遺伝子数)
核の膨張には2つの方法があります。既定では、核から外へ最大 2 ビン分ひろげます。もう一方は、細胞と核の体積比(bin2cell の既定は 4)を使って、核の大きさに応じた膨張距離を決める方法です。大きい核には大きい細胞を、小さい核には小さい細胞を割り当てます。
2つの核から同じ距離にあるビンは、機械的に決められません。bin2cell は、こうしたビンを発現の近さで割り当てます。PCA 空間で、どちらの細胞に近いかを見るのです。形態だけでも、発現だけでもなく、両方を使うのがこの手法の要点です。
核が切片の断面に写っていない細胞や、モデルが検出できない形をした核は、H&E からは拾えません。bin2cell はこれを救うために、総カウントを画像として描き、StarDist の蛍光モデルにかけます。この二次セグメンテーションは形態ベースより不安定で、細胞が密な領域では苦戦しますが、取りこぼしを補う役には立ちます。
2025 年 6 月に公開された Space Ranger v4.0 以降、H&E 画像があれば核ベースの細胞セグメンテーションが自動で行われます。手軽ですが、bin2cell のように destripe や二次セグメンテーションを挟むわけではありません。まず Space Ranger の結果を見て、取りこぼしや過剰な膨張が気になるなら bin2cell を試す、という順序が現実的です。なお、関数の引数名はバージョンで変わります。実行前に公式のデモノートブックを確認してください。
5. 細胞に組み立てる ─ Stereo-seq の場合
Stereo-seq では、SAW パイプラインの CellBin が同じ役割を担います。ssDNA または DAPI の核染色画像から核の輪郭を検出し、一定の距離だけ外へ広げて細胞の範囲とします。考え方は bin2cell と同じです。
マウス脳の Stereo-seq データでは、bin20(10 µm × 10 µm、哺乳類の細胞とほぼ同じ大きさ)で切ると約 90% の細胞が複数のビンに分断されました。一方、核染色画像からセグメンテーションした cellbin では、分断は約 2% でした。「ビンの大きさが細胞と同じくらいだから、細胞として扱ってよい」とはなりません。格子は、細胞がどこにあるかを知らないからです。
6. 組み立てない道 ─ segmentation-free
核染色画像が使えない。カウントも足りない。それでも粗いビンに落としたくない。そういう場面があります。
FICTURE(Si et al., Nature Methods, 2024)は、細胞という単位を仮定せずに、サブミクロン解像度のデータから直接、組織の構造を取り出します。転写産物の分布を因子分解して、空間的に連続した「発現のまとまり」を見つける発想です。細胞の境界を決める必要がないので、セグメンテーション誤差も入りません。

8 µm ビンで見つけたクラスタと、組み立てた細胞で見つけたクラスタは、同じ名前が付いていても別の対象です。ビンのクラスタは「その場所にある発現の混合」を表し、細胞のクラスタは「1個の細胞の状態」を表します。論文や発表では、どの単位で解析したのかを必ず明記してください。書かれていない論文を読むときは、まずそこを疑ってください。
7. 決めたあと、正しいかを確かめる
細胞に組み立てたら、そのまま先へ進まず、まともな結果になっているかを確認します。
python
# 組み立てた細胞が、まともかどうかを確かめる
sc.pp.calculate_qc_metrics(cdata, inplace=True, log1p=False)
# 1. 細胞あたりのカウントと遺伝子数
print(cdata.obs[["total_counts", "n_genes_by_counts"]].describe())
# 2. 細胞の面積(=まとめられたビンの数)
# 極端に大きい細胞があるなら、膨張しすぎている
print(cdata.obs["bin_count"].describe())
# 3. 8 µm ビンでの結果と比べる
print("8 µm ビン数:", sdata["square_008um"].n_obs)
print("組み立てた細胞数:", cdata.n_obs)
# 細胞数がビン数より極端に多いなら、核を過剰に検出している
| 確認すること | 見るもの | おかしい場合 |
|---|---|---|
| 細胞あたりのカウント | total_counts の分布 | 極端に少ないなら、単位を粗くし直す |
| 細胞の面積 | 1細胞にまとめられたビンの数 | 極端に大きい細胞があるなら、膨張しすぎている |
| 細胞の数 | 8 µm ビンの数と比べる | ビン数より極端に多いなら、核を過剰に検出している |
| クラスタと組織像 | クラスタを組織の上に描く | 組織構造と対応しないなら、どこかで失敗している |
セグメンテーションは完璧ではありません。隣の細胞の転写産物が混ざり込むこと(spillover)は必ず起きます。組み立てた細胞に対しても、参照 scRNA-seq を使った細胞型の割り当てや、混合を明示的に扱う手法(cell2location、RCTD)が有効な場面があります。「細胞に組み立てたから、あとは scRNA-seq と同じ」とは考えないでください。
8. 判断のまとめ
| 状況 | 選ぶ単位 | 次にやること |
|---|---|---|
| Visium v1 / v2 | 55 µm スポット | デコンボリューション |
| Curio Seeker | 10 µm ビーズ | デコンボリューション(doublet モード) |
| Visium HD + H&E あり + カウント十分 | 細胞(bin2cell / Space Ranger v4) | 細胞型アノテーション |
| Visium HD + 画像かカウントが不足 | 8 µm ビン | デコンボリューション |
| Stereo-seq + 核染色あり + bin20 で遺伝子数中央値 200 超 | cellbin | 細胞型アノテーション |
| Stereo-seq + カウント不足 | bin50 / bin100 | デコンボリューション |
| 画像が使えず、粗いビンにも落としたくない | segmentation-free(FICTURE) | 因子として組織構造を読む |
まとめ
- 解析単位は、QC より先に決める。決めないと、その先が全部意味を失う。
- カウントは面積に比例して減る。8 µm ビンから 2 µm ビンにすると、総カウントは おおよそ 1/16。検出遺伝子数はそれより急に落ちる。
- 細胞に組み立てるには、核が見える画像と足りるカウントの両方が要る。片方でも欠けたら、粗いビンに下げる。
- Stereo-seq の目安は、bin20 の遺伝子数中央値が 200 超かつ画像が良好であること。
- Visium HD の 2 µm ビンは、物理的な大きさが揃っていない。総カウントに行と列の縞が出る。bin2cell の destripe で補正する。
- 格子は細胞の境界を知らない。bin20 では約 90% の細胞が分断される(cellbin なら約 2%)。
- 単位が違えば結果は比較できない。どの単位で解析したかを必ず明記する。
関連記事
- シーケンス型 空間トランスクリプトーム 前処理の全体像
- シーケンス型 空間トランスクリプトーム:QC と組織検出
- シーケンス型 空間トランスクリプトーム:正規化とクラスタリング
- シーケンス型 空間トランスクリプトーム:デコンボリューションの原理と手法分類
- シーケンス型 空間トランスクリプトーム:segmentation-free 解析
- scRNA-seq解析:細胞型アノテーション手法の全体像
- scRNA-seq解析:データの読み込みと品質管理(QC)
- scRNA-seq解析:正規化・特徴選択・次元削減・クラスタリング
- scRNA-seq解析の土台:AnnData のデータ構造をリレーショナルDBの発想で理解する
参考文献
- Polański, K., Bartolomé-Casado, R., Sarropoulos, I., et al. (2024). Bin2cell reconstructs cells from high resolution Visium HD data. Bioinformatics, 40(9), btae546. doi:10.1093/bioinformatics/btae546
- Schmidt, U., Weigert, M., Broaddus, C., & Myers, G. (2018). Cell detection with star-convex polygons. In Medical Image Computing and Computer Assisted Intervention (MICCAI) 2018, 265–273. doi:10.1007/978-3-030-00934-2_30
- Chen, A., Liao, S., Cheng, M., et al. (2022). Spatiotemporal transcriptomic atlas of mouse organogenesis using DNA nanoball-patterned arrays. Cell, 185(10), 1777–1792. doi:10.1016/j.cell.2022.04.003
- Si, Y., Lee, C., Hwang, Y., et al. (2024). FICTURE: scalable segmentation-free analysis of submicron-resolution spatial transcriptomics. Nature Methods, 21(10), 1843–1854. doi:10.1038/s41592-024-02415-2
- Kleshchevnikov, V., Shmatko, A., Dann, E., et al. (2022). Cell2location maps fine-grained cell types in spatial transcriptomics. Nature Biotechnology, 40(5), 661–671. doi:10.1038/s41587-021-01139-4
- Cable, D. M., Murray, E., Zou, L. S., et al. (2022). Robust decomposition of cell type mixtures in spatial transcriptomics. Nature Biotechnology, 40(4), 517–526. doi:10.1038/s41587-021-00830-w
- Marconato, L., Palla, G., Yamauchi, K. A., et al. (2025). SpatialData: an open and universal data framework for spatial omics. Nature Methods, 22(1), 58–62. doi:10.1038/s41592-024-02212-x
- Wolf, F. A., Angerer, P., & Theis, F. J. (2018). SCANPY: large-scale single-cell gene expression data analysis. Genome Biology, 19, 15. doi:10.1186/s13059-017-1382-0
- Palla, G., Spitzer, H., Klein, M., et al. (2022). Squidpy: a scalable framework for spatial omics analysis. Nature Methods, 19(2), 171–178. doi:10.1038/s41592-021-01358-2


コメント