组织覆盖评估的概念与意义

做 Visium 实验,第一步就是把组织切片贴到捕获玻片上。贴得好不好,直接影响后面数据的质量。嗯,我见过不少新手拿到漂亮的组织照片就觉得万事大吉,结果跑完 SpaceRanger 一看捕获点读数稀疏得像秃头——原因很简单:组织压根没贴牢。

组织覆盖评估,说白了就是检查切片在捕获区域上的贴合情况。包括组织面积够不够大、有没有破损、有没有气泡或皱褶、边缘是否完全落在捕获点阵列内。这一步不是可有可无的仪式,它是质量控制的第一道关卡。

概念:到底在评估什么?

Visium 玻片上有四个捕获区域(Capture Area),每个区域包含约 5000 个捕获点。切片贴上去后,只有被组织直接覆盖的捕获点才能有效抓取 mRNA。那么问题来了——

  • 覆盖面积:组织覆盖了多少个捕获点?太少,数据稀疏;太多(超出区域),边缘浪费。
  • 覆盖完整性:组织有没有断裂、卷曲、折叠?一处破损可能让几十个点同时失效。
  • 贴合度:组织是否完全接触玻片?气泡或组织边缘翘起会导致局部捕获效率骤降。
  • 对齐度:组织是否居中?如果偏向一侧,另一侧的捕获点就白费了。

我个人习惯每贴一片就立刻用明场显微镜拍一张低倍镜照片,对照玻片上的标记框检查这些指标。别等到 SpaceRanger 跑完再后悔,那时候组织已经固定了,没法补救。

小技巧: 拍照时加个比例尺,方便后续用 ImageJ 或 Python 自动计算组织面积百分比。我常用 ImageJ 的「Analyze Particles」功能快速筛选破碎组织。

意义:为什么不能跳过这一步?

你可能觉得既然 SpaceRanger 会自动检测组织区域,自己肉眼看看就得了。我在项目里踩过这个坑:有一次样本是小鼠脑冠状切片,贴片时没注意边缘卷了一小块,SpaceRanger 默认的 tissue detection 把那块卷起来的边缘也算成有效覆盖。结果那个区域输出的基因表达谱里混入了大量背景噪声,差点把差异分析带偏。

组织覆盖评估的意义体现在三个层面:

  1. 数据质量:只有贴合良好的组织才能保证每个捕获点的 mRNA 捕获效率一致。
  2. 资源效率:一块玻片四个捕获区域,成本不低。提前发现覆盖问题可以及时重做,省时省钱。
  3. 可重复性:统一的质量评估标准让不同批次的数据具有可比性。
评估指标 理想状态 常见问题
组织面积覆盖率 > 80% 的捕获点被覆盖 < 30%,数据稀疏
组织完整性 无断裂、无卷边 褶皱、气泡、边缘翘起
对齐度 完全落在捕获区域内 部分超出或偏离中心
背景干净度 无组织碎片、无残留 OCT 背景信号干扰
注意: 即使组织看起来覆盖得很好,如果固定时间不够或贴片后有气泡,捕获效率也会严重下降。我曾经遇到一个样本,HE 染色后组织形态完美,但 CEL 数据里 UMI 计数低得离谱,后来发现是贴片时残留了一小滴 OCT 介质,阻挡了组织与捕获点的直接接触。

评估流程:一张图说清楚

下面这个流程图展示了我平时做组织覆盖评估的标准步骤。从切片贴片到最终决策,每一步都可以加入自动化脚本辅助判断。

组织覆盖评估标准流程 组织切片 贴片到捕获区域 明场成像 组织检测 评估指标 面积 | 完整性 | 对齐度 | 气泡 决策 通过 / 重做 不合格则返回 Tips 决策标准:组织面积覆盖 >80% 且无气泡/卷边 → 通过;否则建议重做切片。 可以在明场拍照后使用 Python 脚本自动计算覆盖比例,减少人为误差。

实操中常见的坑

评估说起来简单,做起来全是细节。我把自己踩过的坑列出来,各位少走弯路。

  • 气泡陷阱:贴片时稍微用力不均就会产生微小气泡,明场下根本看不清。等到 SpaceRanger 输出结果,那个区域 UMI 计数几乎为 0。我后来改用倒置显微镜从玻片背面观察,气泡会呈现亮色圆斑,一目了然。
  • OCT 残留:冰冻切片用 OCT 包埋,冲洗不干净会在组织周围留下透明薄膜。这类薄膜在明场下几乎看不见,但它会阻挡 mRNA 透过。我曾经被坑过一次,后来每批样本都用 0.1% 甲苯胺蓝染色 30 秒,残留 OCT 会被染成浅蓝色,方便识别。
  • 组织边缘卷曲:尤其对于脂肪含量高的样本(如乳腺、肝脏),切片边缘容易翘起。我现在的处理方法是贴片后立刻放在 37°C 加热板上烘 2 分钟,让组织充分软化贴合。
  • 固定时间:Visium 需要的固定时间与常规 IHC 不同,过长或过短都会影响组织形态。标准是甲醇固定 30 分钟,但如果是大组织(如全脑冠状切片),我建议延长到 45 分钟,否则组织中央区容易塌陷。
我个人的经验检查清单:
✅ 明场照片清晰,能看到完整组织轮廓
✅ 组织边缘距离捕获区域边界至少 1 mm
✅ 无可见气泡(可借助暗场或相位差观察)
✅ OCT 冲洗干净(背景无色透明)
✅ 组织无撕裂、无折叠

自动化评估思路

手动评估效率低,尤其是当你有几十个切片时。我写过一个简单的 Python 脚本,核心代码只用了 OpenCV 的几行。思路是这样:

# 基于明场图像自动计算组织覆盖面积
import cv2
import numpy as np

img = cv2.imread('tissue_image.jpg', cv2.IMREAD_GRAYSCALE)
_, binary = cv2.threshold(img, 30, 255, cv2.THRESH_BINARY)

# 计算组织区域(白色)面积
tissue_pixels = cv2.countNonZero(binary)
total_pixels = binary.size
coverage = tissue_pixels / total_pixels * 100
print(f"组织覆盖面积比例: {coverage:.1f}%")

# 检测气泡:气泡在二值图中呈现圆形暗斑
bubbles = cv2.HoughCircles(binary, cv2.HOUGH_GRADIENT, 1, 20,
                           param1=50, param2=30, minRadius=5, maxRadius=50)
if bubbles is not None:
    print(f"检测到 {len(bubbles[0])} 个气泡,建议重做")

当然,这个脚本只能作为初步筛选,组织边缘卷曲和 OCT 残留还是需要人工复核。但至少能帮你快速排除那些覆盖面积明显不足的样本。

为什么我特别强调这一步?因为 Visium 实验的每个环节都有成本,组织覆盖评估是成本最低、最前置的一步。多花 5 分钟检查,后面省掉 5 小时的数据处理补救。嗯,道理大家都懂,但真正做的时候容易着急。你想想看,一块玻片上四个捕获区域,如果有一个因为组织覆盖问题作废,损失的不只是样本,还有后续整个实验时间线。