software

Space Ranger 的点为什么落在组织外?用三个地标查坐标、缩放和裁图

作者:发布于 2026-11-14约 7 分钟阅读
同一个点怎样落回裁剪图。教学算例|像素行给纵坐标,列给横坐标。原图,横 2000,纵 1200,保留全分辨率位置及其原图。缩小,横 400,纵 240,高分辨率展示图的缩放因子设为 0.2。裁剪,横 300,纵 200,从展示图左裁 100、上裁 40 后再减去偏移。

在空间转录组结果里,将表达最高的点叠到组织照片上,本该位于上皮的一排点却落进了空白。有人想先调点的大小,有人怀疑那块组织捕获失败。更快的办法是暂时不看表达,只挑三个不在同一直线上的地标,把它们从软件提供的原图位置逐一换算到准备绘制的底图。如果连三个位置都对不上,基因表达图上的偏移就不该先用生物学解释。

弄清正在用的坐标属于哪张图

Space Ranger 的空间输出区分阵列中的行列和显微图像上的像素位置。阵列行列表示点在芯片布局中的编号,全分辨率的像素行、列则描述它在对应原图中的中心。画点时一般由列给出横坐标、行给出纵坐标。如果把第一列读作横轴只是因为英文名里有一个“行”,得到的图可能沿对角线翻过去。另一个细节是常见图像坐标的纵向向下,普通散点图纵轴向上。在绘图库中应让点和底图使用同一方向。Space Ranger 空间文件与坐标定义

从原图换到软件生成的高分辨率或低分辨率展示图时,要取对应的缩放因子。同一张切片的两种展示图有不同的因子,不能看到文件名都含组织图像就互换。也不要拿一个样本的因子批量用于其他样本。整理数据时,把切片编号、坐标文件、缩放文件、实际使用的组织图和参考输出目录放在同一个清单里。对于高密度数据,确认所选文件属于哪个分箱层级,部分位置表以列式文件保存,普通点位的示例读法未必直接适用。

手算一个点从原图到裁剪图的坐标

假设原图里某个点的像素行是一千二百、列是两千。现在叠在高分辨率展示图上,对应缩放因子假设为零点二。横坐标来自原列,即四百,纵坐标来自原行,即二百四十。如果又在这张展示图上从左边裁去一百像素、从上面裁去四十像素,点在新图上的坐标应为三百、二百。这里每一步都注明位移使用哪张图的像素单位,便不会将原图上的一百误减成展示图的一百。

底图 横坐标 纵坐标
对应的全分辨率原图 2000 1200
缩小到原来的 0.2 倍 400 240
在缩小图上再从左裁 100、从上裁 40 300 200
同一个点怎样落回裁剪图。教学算例|像素行给纵坐标,列给横坐标。原图,横 2000,纵 1200,保留全分辨率位置及其原图。缩小,横 400,纵 240,高分辨率展示图的缩放因子设为 0.2。裁剪,横 300,纵 200,从展示图左裁 100、上裁 40 后再减去偏移。
教学算例|像素行给纵坐标,列给横坐标。

这个数值只用于教学。若实际流程是先裁原图再缩放,则应先减去以原图像素给出的裁切起点,再乘缩放系数。两个运算的顺序不能随意交换。再多一步旋转或镜像时,要保存实际变换记录,同时对点坐标应用相同变换。两个图像的宽高碰巧成比例,也不能保证它们真的共享原点、方向和视野。若底图是另一台设备采集的连续切片,应另行处理配准与组织形变,单个缩放因子无法解决这个问题。

用三个不共线地标区分常见错误

选择一个靠近左侧的组织特征、一个靠近右上角的特征和一个远离这条连线的内部特征。用软件提供的组织检测或配准质控图作参照,分别核对中心位置。若三个点都向同一方向偏几乎相同的距离,优先查裁图起点或平移。如果靠近原点的大体吻合,越到边缘偏得越多,检查缩放因子。若两个轴像互换、左右或上下关系颠倒,检查行列顺序和图像原点。只看图中心一个位置,很多错误恰好都不明显。

如果所有点的中心都对,局部区域仍显得“画出组织”,再检查点的绘制直径和组织筛选状态。绘图时半径与直径相差一倍,把圆画得过大能让组织边缘的正确点位也覆盖到组织外。还应区分原始位置表包含的全部点位与组织内标记筛出的点位。如果先筛除所有组织外点再检查配准,失去了观察组织边缘标志的重要参照。质控图可同时显示内外点,用不同轮廓区分。

以下示意针对含列名的位置表和同批高分辨率组织图。若对象已经提前换算过坐标,再乘一次因子会把表达区域挤向原点,必须先查数值来源。示例按原始条形码保留索引,方便和表达矩阵的列名精确对齐。

import json
import pandas as pd

pos = pd.read_csv("spatial/tissue_positions.csv").set_index("barcode")
with open("spatial/scalefactors_json.json", encoding="utf-8") as src:
    scale = json.load(src)["tissue_hires_scalef"]
pos["x_hires"] = pos["pxl_col_in_fullres"] * scale
pos["y_hires"] = pos["pxl_row_in_fullres"] * scale
print(pos[["in_tissue", "x_hires", "y_hires"]].head())

实跑经验|把坐标交换一次,看范围检查能否报警

我们下载了官方人淋巴结样本的空间输出,用 Python 和 Pillow 13.0.0 读取高分辨率组织图并重算位置。图片宽 1,921、高 2,000 像素,缩放因子为 0.17011142。位置表有 4,992 行,组织内标记为一的有 4,035 行。这份旧版输出的文件名带有 list,而且没有表头。如果让读取函数自动把首行当作字段名,会静默丢掉第一个条形码。先按六个字段显式命名,再与软件网页报告的组织内点数交叉核对,可以区分读表问题和组织识别问题。该样本的官方运行报告

我们在组织内点中取最靠左和最靠右的点,再取离这两点连线最远的点。下表列的是展示图坐标,原始全分辨率行、列可用条形码在位置表中反查。这样挑到的三个点彼此分开,适合回到组织图检查它们相对哪些空白和组织边缘。这次实跑使用已发布的空间输出,覆盖坐标变换与读表,没有重新处理测序读段。

位置表条形码 展示图横坐标 展示图纵坐标
CTAACAGCACAATAAC-1 237.48 1,414.82
TGTTGATCACTGTTTA-1 1,628.14 209.24
AGGAGCGTTTATTATC-1 1,573.19 1,737.52

还有一个值得故意试的错误。照列、行顺序换算,全部点都在图框中。将两轴交换,同样没有一个点越界。然而第一个标记会从左下方跑到右上方。仅检查坐标的最小值和最大值,即使全部通过,也不足以确认配准正确。把坐标、条形码和组织参考图放在一处,才能查到这类错误。

放回表达之后,再回答分辨率问题

对于高密度切片,较大的分箱会汇总多个较小空间单元。边界附近更大的方块可能同时包括上皮和相邻间质,所以某个基因的带状区域显得变宽,有时是空间汇总带来的混合。可以固定同一组织范围、相同方向和一致的表达色标,在两个分箱层级重画,比较变化主要集中在边界还是遍及整张切片。此时还应说明颜色代表总计数、归一化表达还是检出比例,改变色标和改变几何位置是两件独立的操作。10x 对 Visium HD 分箱与表达的说明

交付一张图时,可以附上一小块测试区域及其中三个地标的原始与展示坐标,另存未裁剪底图和最终变换记录。这些信息足以让同事在不同软件里检验同一基因是否真的贴着组织边界。需要按同一流程批量复核多张切片、保留原图和各级分箱结果时,可了解云生信的生物信息分析服务器。

把知识用于当前任务

下一步可以直接开始分析

按研究目标查找在线工具、课程、计算资源或完整分析服务。

按目标找方案仍有疑问,联系客服 ↗