ASTROMETRY · PLATE SOLVING · GEOMETRIC HASHING

Astrometry.net 如何“认出”一片陌生星空

从像素中的亮点出发,经四星组几何哈希、全天分尺度索引、候选 WCS 拟合与贝叶斯验证,恢复图像的天球位置、比例尺、旋转、镜像关系及畸变。

中文技术报告资料核对:2026-06-22核心论文:Lang et al., 2010单文件 HTML · 可离线阅读

核心结论:它把“全球搜索”拆成了“稀疏提案 + 全场验真”

Astrometry.net 解决的是盲天体测量标定(blind astrometric calibration,也常称 plate solving):只看图像像素,不要求已知拍摄方向,甚至不要求已知视场尺度,输出标准 WCS。论文将问题称为更一般的“lost in space”问题。[1]

01 · DETECT提取紧致亮源

把图像压缩成按亮度排序的二维坐标表;允许漏检,也允许混入热像素、星系或伪源。

02 · DESCRIBE构造四星组

用 4 个点的相对几何关系形成 4 维描述子,消去平移、旋转和统一缩放。

03 · RETRIEVE查询全天索引

在按天空区域和角尺度预建的 k-d 树中做近邻搜索,快速提出少量 WCS 候选。

04 · VERIFY用其余星点验真

比较“候选为真”和“纯偶然对齐”两个概率模型;证据不足宁可返回无解。

一句话心智模型:四星组只负责告诉系统“可能是这里”;整幅图中几十到几百个源共同决定“确实是这里”。

1. 它究竟在求什么

输入是一张星空图像,输出是一套从像素坐标 (x,y) 到天球坐标 (RA, Dec) 的映射。最基本的未知量包括:

天球指向

图像中心位于哪个赤经、赤纬;这是天球上的两个自由度。

相机姿态

图像绕光轴旋转了多少,以及图像是否发生镜像翻转(parity)。

角尺度与畸变

每像素对应多少角秒、视场多大,以及镜头或望远镜带来的非线性形变。

若把天球位置、旋转和尺度逐点暴力枚举,搜索空间连续且巨大。论文指出,待识别图像可能只覆盖全天不到百万分之一的面积;因此关键不是把每个可能姿态都试一遍,而是从图像内部提取一种能直接“跳到”少量候选位置的几何线索。[1]

像素坐标 ── WCS ──► 切平面坐标 ── 球面投影 ──► (RA, Dec)

2. 端到端流程

STEP 1预处理与源提取去背景、估噪、检测峰、求亚像素质心。
STEP 2排序与均匀化优先使用亮源,并避免所有源挤在局部区域。
STEP 3枚举候选四星组从亮源开始逐步增加深度,不必一次生成全部组合。
STEP 4计算 4D 几何码规范化 A、B、C、D,得到平移/旋转/缩放不变量。
STEP 5索引近邻检索在相应角尺度的代码 k-d 树中查找相似四星组。
STEP 6拟合并验证 WCS由 4 对点提出 TAN 解,再用全场星点计算贝叶斯因子。
STEP 7精化与写出重拟合匹配关系,计算 SIP 畸变,输出标准 WCS。

当前代码结构仍清晰地对应这条链路:solve-field 负责高层入口,augment-xylist 生成源坐标表,核心求解器形成四星组并检索代码树,verify.c 验证候选,成功后再计算 SIP 系数。[3]

3. 从图像得到“星点表”

求解器真正需要的主要输入不是漂亮的星空照片,而是一列二维位置:

S = {(x1, y1), (x2, y2), …},通常按亮度从高到低排列

论文中的鲁棒源提取思路

  1. 背景压平:从原图减去中值平滑版本,以削弱渐变天光、散射光和灵敏度变化。
  2. 估计噪声:用许多相隔一定距离的像素对之差估计像素噪声方差,避免依赖完整的相机噪声模型。
  3. 检测显著像素并连通成对象:寻找高于背景噪声的局部结构。
  4. 峰值清理与去混叠:利用邻域和鞍点关系抑制同一对象内部的次峰或随机噪声峰。
  5. 亚像素质心:论文实现用峰值周围小网格进行近似高斯定位;定位精度直接影响四星组代码的搜索半径。

这些步骤的目的不是完美分类“恒星/星系/坏点”,而是稳定地产生一批紧致源。论文明确允许源表缺星或含有污染,因为后续几何匹配与概率验证会处理这些不完美。[1]

当前前端还做什么

官方代码结构文档列出了源提取后的若干工程步骤:移除近直线排列的伪源、重新按亮度与背景信息排序,以及从图像各处选取空间上更均匀的子集。这样可减少卫星轨迹、读出坏列或局部密集星团对组合枚举的支配。[3]

“星”是算法术语。参与求解的点可以是恒星,也可以是足够紧致的星系核;反过来,行星、热像素或宇宙线也可能混入。求解依赖的是整体几何一致性,而不是先完成天体分类。

4. 四星组几何哈希:核心特征如何构造

单颗星没有身份;两颗星只有距离;三颗星能形成三角形,但在全天大索引中仍容易产生大量偶然近似。Astrometry.net 通常使用 4 个源组成的 quad,在辨识度、缺星鲁棒性和检索维数之间取得平衡。[1]

特征消去二维平移、旋转和统一缩放后的维数直观权衡
三角形2×3−4 = 2检索快,但代码空间容易“过度订阅”,偶然碰撞多。
四星组2×4−4 = 4相当于两个共享基线的三角形,辨识度显著提高。
五星组2×5−4 = 6更独特,但任一成员缺失就失效,且高维近邻查询更慢。

4.1 选择基线 A–B

在四个点中选取最远的一对作为 AB。把局部坐标系定义为 A=(0,0)B=(1,1),其余两点记为 C=(xC,yC)D=(xD,yD)。通常要求 C、D 位于以 AB 为直径的圆内,以保证 AB 确实是最长基线。

A=(0,0) B=(1,1) C D xy 以 AB 为直径的圆 代码 q = (xC, yC, xD, yD) 平移不变旋转不变统一缩放不变
本报告示意图。原论文图 1 给出了同一几何构造:A、B 建立局部坐标,C、D 的 4 个坐标成为连续几何哈希码。

4.2 一个紧凑的数学写法

把二维点写成复数。对任一点 P,可定义:

z(P) = (1 + i) · (P − A) / (B − A)

于是 z(A)=0z(B)=1+i;取 z(C)z(D) 的实部与虚部,就得到四维代码:

q = (Re z(C), Im z(C), Re z(D), Im z(D))
为什么它对平移、旋转和缩放不变

设整幅图经历相似变换 P′ = s·eP + t。代入上式:

z′(P) = (1+i) · [s e(P−A)] / [s e(B−A)] = z(P)

平移项被差分消掉,旋转与统一尺度在分子、分母中相消。镜像会引入复共轭/奇偶性变化,因此求解器会测试相应 parity,而不是假定图像一定未翻转。

4.3 消除同一个四星组的多种标号

交换 A/B 或 C/D 会给出等价但数值不同的代码。论文与实现通过规范化规则选定唯一排列;典型条件包括 xC ≤ xD 以及 xC+xD ≤ 1,并分别测试允许的镜像奇偶性。当前代码结构文档也明确记录了对 C、D 排列和 parity 的遍历。[1][3]

4.4 “哈希”不是精确相等

质心噪声、光学畸变和大气扰动会让代码稍微移动,因此查询不是查一个精确键值,而是在 4 维代码空间中搜索一个邻域。Astrometry.net 将代码存入 k-d 树,返回半径内的近邻。换言之,它是连续几何哈希 + 近邻检索,而不是密码学哈希,也不是普通字典的精确键查找。[1]

5. 全天索引如何预先建好

识别速度的代价被提前支付:先把参考星表转成大量“天空地标”(skymarks/quads),再保存为按角尺度划分的索引文件。论文使用过 USNO-B、2MASS、GALEX 和 SDSS;当前官方 README 也提到更近年的 Gaia 索引。[1][4]

5.1 均匀而不是单纯“取最亮”

银河面星源极密,银河高纬较稀。若直接取全表最亮星,索引密度会严重不均。Astrometry.net 用 HEALPix 把天球分成等面积单元,在每个单元中按亮度选取固定数量的源,再多轮构造中心落在单元内的四星组。这样同时获得:

  • 全天近似均匀覆盖;
  • 优先使用更容易在查询图像中出现的亮源;
  • 通过限制单颗星被重复使用的次数,避免少数亮星垄断所有四星组;
  • 多轮铺设带来冗余,使裁剪、漏检或局部缺失时仍有可用地标。

官方建索引文档概括得很直接:选亮且均匀的“星”,构造大量局部形状相似的四星组,每个特征再指回组成它的参考源。[2] HEALPix 本身是一种层次化、等面积的球面离散结构。[8]

等面积天空单元多轮铺设、尺度分层、适度重叠
概念示意:每个天空单元优先选亮源,并构造中心落在该单元附近的多个四星组。真实 HEALPix 单元位于球面,不是此处的矩形网格。

5.2 为什么要按角尺度分文件

一个 10° 广角镜头中的可见四星组,和一幅 5′ 小视场中的四星组角直径完全不同。官方索引把四星组直径限制在窄范围内;知道图像尺度时,只需加载可能容纳于该图像的索引。官方经验法则是下载四星组尺寸约为图像尺寸 10%–100% 的索引。[4]

代表性索引四星组直径范围适合的图像量级
52002.0–2.8′几角分的小视场
52048–11′十几角分视场
520616–22′几十角分视场
410830–42′约 0.5–数度视场
411060–85′数度级视场
4114240–340′广角镜头
41191400–2000′超广角/近全天量级

上表摘取官方 README 中的代表性范围,未列出全部系列。实际使用应以安装版本和数据站说明为准。

5.3 一个索引文件里有什么

代码侧

  • 每个 quad 的四维几何码
  • 代码 k-d 树
  • quad → 4 个参考源编号的反向引用
  • 索引角尺度、天空分片等元数据

星表侧

  • 参考源的天球位置
  • 源位置 k-d 树
  • 用于候选验证时快速取出“该视场应出现的其他星”
  • 可选的附带光度等列

论文和当前代码均使用 k-d 树同时加速“代码近邻查询”和“候选视场内参考源查询”。[1][3]

6. 从一个相似四星组生成 WCS 候选

6.1 亮源优先、逐步加深

查询图像中的源按亮度排序。求解器先用前若干个亮源形成四星组;若未解出,再逐步纳入更暗源。当前实现不会朴素地一次枚举全部 C(n,4) 组合,而是预处理可能的 A–B“骨架”,每加入一个新源时形成包含它的新四星组,并用尺度约束尽早剪枝。[3]

6.2 近邻命中意味着四对点的身份假设

查询 quad 的代码在某个索引中找到近邻后,系统取回索引 quad 的 4 个天球坐标。此时产生一个明确假设:

查询图像中的 (A,B,C,D) ↔ 天空目录中的 (A*,B*,C*,D*)

由这 4 对对应点可拟合一个初始 TAN(切平面/gnomonic)投影,得到候选的中心位置、旋转、尺度和 parity。当前代码结构文档将该阶段描述为“由匹配 quadrangle 拟合 TAN 投影”,随后进入 verify_hit()[3]

6.3 提示信息只是在缩小搜索,不是算法前提

已知近似尺度、中心坐标或搜索半径时,系统可以跳过不可能的索引和天空区域,速度会显著提高;不给这些信息仍可进行全盲求解。论文的实验表明,放宽尺度先验主要增加计算量,并不改变理论上可找到的正确解。[1]

一个常被忽略的实现选择:论文发现,与其累计多个 quad 对同一姿态的“投票”,不如每得到一个候选就立即运行全场验证,通常更快且更省内存。[1]

7. 贝叶斯验证:为什么一个偶然相似的 quad 不会骗过系统

几何码检索故意允许误差,因此会产生许多假候选。真正决定是否接受的是全场验证:若候选 WCS 正确,它应当准确预测图像中许多其他星的位置;若错误,预测星与观测源只会偶然靠近。

7.1 两个竞争模型

前景模型 F:候选为真

每个观测源可能来自某颗预测参考星附近的二维误差分布,也可能是无对应物的干扰源。因而模型是“若干星位周围的概率团 + 均匀离群项”的混合。

背景模型 B:候选为假

参考星表无法预测当前图像中的源位置;最简单模型把源视为在图像面积内近似均匀分布。

p(ti|B) = 1/A
p(ti|F) ≈ ε/A + (1−ε) · Σj wj 𝒩(ti; rj, Σj)
K = p(D|F) / p(D|B) = Πi [p(ti|F) / p(ti|B)]
log K = Σi log[p(ti|F) / p(ti|B)]

其中 A 是图像面积,ti 是检测源,rj 是候选 WCS 投影得到的参考星位置,ε 表示污染/漏配比例。上式是用于理解的简化表达;实现还要处理匹配唯一性、位置误差及边界等细节。

青色圆:候选 WCS 预测位置 白点:观测源 孤立白点:污染源/无目录对应物
正确候选会在整幅图内反复作出准确预测;错误候选即便有一个 quad 碰巧对齐,也很难让其余大量源同时靠近预测位置。

7.2 顺序累积证据

验证从最亮的查询源开始,逐个累积似然比。正确解的 log K 往往很快上升;错误解则停滞或下降。达到高阈值即接受,否则继续尝试下一个候选。原论文将先验设得很保守,并通过效用函数对“假阳性”施加远高于“无解”的代价;常见实现运行点相当于要求约 K > 109 量级的证据。[1]

7.3 为什么能容忍漏星与伪星

  • 漏星:前景模型不要求每颗目录星都被检测到。
  • 伪星:均匀离群项允许部分观测源没有目录对应物。
  • 波段差异:不同滤镜会改变亮度顺序,但只要仍有足够多共同源,正确几何仍可积累证据。
  • 局部畸变:位置误差分布给预测位置留出容差,之后再用更多匹配精化畸变。
“无假阳性”应怎样理解:论文在其测试数据上报告了无假阳性,且系统设计明确偏向“宁可无解,也不返回错解”;这不是对任何图像、任何配置的数学绝对保证。

8. 从候选姿态到标准 WCS 与 SIP 畸变

通过验证后,系统使用更多的匹配源重新拟合。当前代码结构显示:quad 命中先拟合 TAN 投影,验证成功后由 solver_tweak2() 计算 SIP 系数。[3]

PIXEL像素偏移相对 CRPIX 的坐标。
DISTORTSIP 多项式修正镜头/光学非线性。
LINEARCD 矩阵编码比例尺、旋转与微小斜切。
PROJECTTAN 投影在局部切平面与天球之间转换。
SKYRA / Dec以 CRVAL 为投影中心的天球坐标。

FITS WCS 标准规定如何用头关键字表达世界坐标;天球投影由 Greisen、Calabretta 等的 WCS 论文定义。[5][6] SIP 则用 FITS 头中的多项式系数表达非线性几何畸变。[7]

关键字/输出作用
CRPIX1/2参考像素位置。
CRVAL1/2参考像素对应的赤经、赤纬。
CD1_1 … CD2_2局部线性变换:像素尺度、旋转、奇偶性与斜切。
CTYPE1/2 = RA---TAN-SIP / DEC--TAN-SIP声明 TAN 天球投影及 SIP 畸变。
A_i_j, B_i_j像素到无畸变中间坐标的 SIP 多项式项。
.wcs / .newWCS 头文件 / 写入新 WCS 的 FITS 图像。
.corr / .match图像源与参考源的对应关系 / 触发成功解的 quad 匹配信息。

官方 README 列出了 solve-field 的这些标准输出,以及 .rdls.solved 和可视化叠加图等文件。[4]

9. 为什么这个架构特别稳健

把连续姿态搜索变成近邻检索

四星组消去 4 个相似变换自由度,使未知尺度和旋转不再需要穷举。

提案和验真使用不同信息量

只用 4 星快速提出候选,再用全场源拒绝偶然碰撞;速度与可靠性不必二选一。

索引追求覆盖与冗余

均匀取星、分尺度建库、多轮铺设,让不同裁剪、曝光深度和缺星情况仍有入口。

不依赖亮度精确一致

亮度主要用于搜索次序,而非要求图像与星表中的星等完全相同,因此跨波段仍可能求解。

统计模型显式容纳污染

前景混合模型允许漏检与伪源,避免“一颗坏点毁掉整个匹配”。

决策阈值偏向安全失败

错误答案的代价被设得很高,系统宁可给出“未求解”,也不轻易接受脆弱候选。

99.9%
原论文用 USNO-B 索引在当时的近紫外/可见光现代巡天测试中报告的成功率;加入 2MASS 索引后,该测试集达到 100%,均未观察到假阳性。

这是论文特定数据、索引和实验流程的历史结果,不应直接当作所有用户图像的承诺。[1]

10. 性能、复杂度与工程权衡

10.1 主要成本在哪里

单次 k-d 树查询通常很快;总耗时更多取决于需要尝试多少查询 quad、每个 quad 命中多少索引近邻,以及要验证多少假候选。因此“代码空间碰撞率”是设计三角形/四星组/五星组时的核心指标。

参数调大后的好处调大后的代价
索引 quad 密度图像更可能包含至少一个已索引 quad代码空间更拥挤,偶然命中和内存增多
参与组合的源深度亮星不足或波段差异时更有机会组合数量快速增长,伪源参与更多
代码搜索半径更能容忍质心误差和畸变近邻数上升,假候选增多
特征点数 3→4→5特征更独特成员全部出现的概率下降,高维查询变慢
可加载尺度范围真正全盲,适配未知视场需要查询更多索引,CPU/I/O/内存增加

10.2 为什么尺度提示最有价值

给出大致像素尺度或图像宽度,系统可直接排除绝大多数索引;即使只知道“约 1°”而不是精确到百分之一,也常能把搜索量大幅压缩。官方 README 还建议大图先下采样,并用 --depth 控制在不同索引之间切换的源深度。[4]

10.3 Astrometry.net 的角色

它最擅长的是从没有可信初值的状态得到可靠全局 WCS。之后如需更高精度,可用更多源、更复杂畸变模型或专门的相对天体测量工具进一步精化。原论文也明确把它视为能为传统精细标定器提供“好初值”的系统。[1]

11. 常见失败模式与原因

现象为什么会失败典型处理
可用源太少无法形成足够稳定的 quad,或图中没有任何已索引地标。延长曝光、降低检测阈值、换更深索引、扩大裁剪范围。
热像素、坏列、卫星线很多伪源占据亮源榜前列,组合预算被浪费。坏点校正、去线、下采样、改用外部源表并正确排序。
强星云/背景梯度背景估计和亮度排序失真,紧致源提取不稳定。先做背景平坦化;尝试不同源提取器或 --resort
极端拥挤场局部源密度过高,偶然几何近似变多,源去混叠困难。限制源数、空间均匀化、提供尺度/位置提示、使用匹配波段索引。
鱼眼或超大畸变单一局部 TAN/相似几何在大范围内不够近似,quad 代码被拉扯。分块求解、预去畸变、构建适配尺度/镜头的定制流程。
索引尺度不匹配图中可形成的 quad 角直径不在已安装索引范围内。根据 FOV 下载合适索引;优先覆盖图像尺寸约 10%–100% 的 quad。
错误的强先验错误 RA/Dec、半径、尺度或 parity 限制把真解剪掉。放宽或移除提示,先做真正盲解。
特殊波段或古老底片亮星排序差异、目录不完备、历元与高自行星位置偏移。改用更合适目录构建索引,放宽容差或先更新目录到观测历元。
内存/I/O 瓶颈加载过多小尺度全天索引非常占空间,反而拖慢搜索。只加载必要尺度与天空分片,使用本地 SSD,合理配置并行。
错误理解:“图里有很多星就一定好解。”事实上,太少不行,太密也可能不利;真正重要的是有一批定位可靠、分布适中、与参考目录有足够交集的紧致源。

12. 本地使用时如何把原理转化为参数

12.1 一个带尺度提示的示例

solve-field image.fits \
  --scale-units degwidth \
  --scale-low 0.8 \
  --scale-high 1.2 \
  --downsample 2 \
  --overwrite

这表示图像宽度大约 0.8–1.2°。尺度边界会用于选择索引,并在 quad 匹配阶段过滤不可能的候选。大图下采样通常不妨碍 plate solve,因为算法主要依赖源的相对位置,而不是保留每个像素的细节。官方文档给出了同类参数与优化建议。[4]

12.2 已知大致中心时

solve-field image.fits \
  --ra 83.8 --dec -5.4 --radius 5 \
  --scale-units arcsecperpix \
  --scale-low 1.5 --scale-high 2.0

中心提示将检索限制到给定半径;这已经是“半盲”求解。提示应宁宽勿错。

12.3 已有自己的源表时

可直接提交 FITS 二进制表形式的 x/y 列表。关键要求是:

  • 源按亮度由亮到暗排序,或指定排序列;
  • 提供原图宽高;
  • 坐标系和像素原点约定正确;
  • 不要让热像素或线状伪源占据最亮几十个条目。

官方 README 对 xylist、排序列、图像尺寸以及 --keep-xylist 复用源提取结果有完整说明。[4]

12.4 如何检查结果不是“只看着像”

  1. 查看 .corr 中匹配源是否遍布全场,而不是只集中在一角。
  2. 把目录源投影回图像,检查边缘残差;边缘系统性弯曲通常提示畸变模型不足。
  3. wcsinfo 检查中心、尺度、旋转是否合理。
  4. 将若干像素通过 wcs-xy2rd 转成天球坐标,再反向转换验证闭合误差。
  5. 对已有 WCS 的图像,可让 solve-field 先验证现有头;必要时用 --no-verify 强制重新盲解。

13. 最小化伪代码

function solve(image, index_set, optional_hints):
    sources = detect_compact_sources(image)
    sources = remove_lines_resort_uniformize(sources)
    sources = sort_by_brightness(sources)

    candidate_indexes = select_by_scale_and_sky(index_set, optional_hints)

    for depth in increasing_source_depths:
        for quad in newly_available_quads(sources[0:depth]):
            q = canonical_geometric_code(quad)

            for index in candidate_indexes:
                for indexed_quad in index.code_kdtree.neighbors(q, tolerance):
                    wcs0 = fit_TAN_from_four_correspondences(
                              quad, indexed_quad.sky_stars)

                    if violates_hints_or_scale(wcs0):
                        continue

                    expected = index.star_kdtree.stars_inside(wcs0.footprint)
                    log_bayes = verify_all_sources_bright_first(
                                  sources, expected, wcs0)

                    if log_bayes > acceptance_threshold:
                        matches = establish_full_correspondences(
                                    sources, expected, wcs0)
                        return refine_TAN_and_SIP(matches)

    return NO_SOLUTION   # 安全失败,而不是猜一个答案

这段伪代码省略了大量边界、误差模型、组合剪枝和 FITS 工程细节,但准确保留了 Astrometry.net 的核心思想。

14. 术语速查

Astrometry测量天体位置及其随时间变化;在此主要指建立像素与天球坐标的关系。
Plate solving从星空图像求 WCS。名称源于摄影底片时代,但同样适用于 CCD/CMOS 与普通照片。
Blind solve不需要初始位置、旋转或尺度;给提示后仍是同一求解器,只是搜索空间更小。
Quad / asterism用于几何识别的一组 4 星;asterism 泛指小型星点图案。
Geometric hashing把几何形状变成对某些变换不变的代码,再在预建索引中检索。
k-d tree用于低维连续空间近邻查询的数据结构;此处既索引 4D quad 代码,也索引星表位置。
HEALPix层次化等面积球面像素化,用于让全天选星与特征覆盖更均匀。
WCSWorld Coordinate System;FITS 中描述像素坐标到物理/天球坐标变换的标准约定。
TAN天球到局部切平面的 gnomonic 投影,常用于小到中等视场的星图。
SIPSimple Imaging Polynomial;用多项式在 FITS WCS 中表达非线性成像畸变。
Parity坐标映射的手性/镜像关系;光路、图像处理或坐标约定可能造成翻转。

15. 原论文、阅读路线与参考资料

你记得的论文就是这一篇

Dustin Lang, David W. Hogg, Keir Mierle, Michael Blanton, Sam Roweis (2010)
Astrometry.net: Blind astrometric calibration of arbitrary astronomical images
The Astronomical Journal, 139, 1782–1800.

arXiv 摘要与 PDF · 期刊 DOI

建议阅读顺序:先看 §2 的四个组件;重点读 §2.2(quad 哈希)、§2.3(索引)、§2.4(验证);再看 §3 中关于波段、尺度先验、索引密度以及 triangle/quad/quint 的实验。

  1. Lang et al. (2010). Astrometry.net: Blind astrometric calibration of arbitrary astronomical images. 核心算法、概率验证和实验结果。
    arXiv · DOI
  2. Astrometry.net 官方文档:Building Index Files。说明参考星表、HEALPix 分片、亮星均匀化、quad 铺设和自定义索引。
    官方页面
  3. Astrometry.net 官方代码结构:solve-field、quad 组合、代码树检索、TAN 拟合、验证到 SIP 精化的调用链。
    GitHub 文档
  4. Astrometry.net 官方 README:索引系列与尺度、命令行参数、输出文件、xylist 和性能建议;并提到 USNO-B、2MASS 及较新的 Gaia 索引。
    官方 README
  5. Greisen & Calabretta (2002). Representations of world coordinates in FITS. FITS WCS 总体框架。
    arXiv
  6. Calabretta & Greisen (2002). Representations of celestial coordinates in FITS. 天球投影与 FITS 表达。
    arXiv
  7. Shupe et al. (2005). The SIP Convention for Representing Distortion in FITS Image Headers.
    NASA FITS 注册说明
  8. Górski et al. (2005). HEALPix: A Framework for High-Resolution Discretization and Fast Analysis of Data Distributed on the Sphere.
    arXiv