星空摄影圈的玩家应该都听过这句话:拍星轨不难,难的是把星轨拍得干净、漂亮、不显脏。玩了三四年延时和深空,我手里的星野素材少说也有十几万张,真正让我觉得“这工具能改变习惯”的,就是 starnet——一个专门用来做星轨合成与星空降噪的免费神器。这篇文章我想把它的原理、正确用法、常见坑和压箱底的操作技巧一次性讲清楚,帮你少走我走过的那些弯路。
适合谁来读?两类人:一是刚入门星野摄影、想把几百张连续照片叠加成星轨但被PS图层搞到头大的新手;二是已经在用传统堆栈方式、但对画面噪点和拖线不满意、想进一步提升画质的老玩家。读完你至少能明白三个核心问题:starnet 到底比传统堆栈强在哪、关键参数怎么调、遇到花屏和内存崩溃时怎么排查。
1. 先搞清楚 starnet 解决的是什么问题
1.1 传统星轨合成的“脏”与“钝”
过去我们用 Photoshop 的“最大值堆栈”做星轨,原理很简单:把几十张到几百张照片对齐,然后每个像素点取最亮值。因为星星是移动的,不同时间点的星星会落在不同位置,最大值叠加就把所有轨迹都保留了。
听起来很完美,对吧?但实际操作中你会遇到三个麻烦:
- 地景会漂:除非你做了严格的地景对齐,否则风吹草动、脚架微移都会让山体和建筑产生虚影。
- 噪点全部暴露:最大值堆栈会把每张照片里的热噪点和随机噪点一网打尽,结果就是星轨成了“花轨”,满天都是不该有的光斑。
- 星星拖线生硬:叠加出的星轨边缘锐利但缺乏过渡,放大看会觉得很“数码”。
1.2 starnet 的思路:先分离,再合成
starnet 的处理逻辑和传统方式完全不同。它先把每一帧照片里的星星和地景分离,然后只对星星部分做轨迹合成,地景则单独取一张最清晰的做基底,最后再融合。这个思路的妙处在于:地景不动,就没机会出现重影;星星单独合成,就不会把地面的噪点一起叠进来。
用一句话概括:传统堆栈是在“同一张图里”解决问题,starnet 是把问题“拆开”再合起来。这也是为什么用了 starnet 之后,成片的地景部分是那种干净、稳、有质感的静态照片模样,而星轨部分又是细腻连续的线条,两者反差非常讨喜。
2. 核心细节解析:starnet 的原理与关键参数
2.1 它是怎么识别星星的
starnet 的官方全称是 Star Network,最早是用于天文图像处理的神经网络工具,后来被摄影爱好者改造成了星轨合成工具。它识星轨不靠“亮度阈值”,而是通过卷积神经网络逐像素判断哪些是星星、哪些是背景。也就是说,它会把图片分成两个图层:stars(星点/星轨)和 starsless(无星背景)。
这一步非常关键,因为它直接决定了后面的合成质量。你如果自己用蒙版去抠,会遇到星星边缘的半透明过渡、密集星场的粘连、以及背景发光的弥散星云——这些用传统手段很难处理干净,而网络模型做这件事又快又稳。
2.2 四个你早晚要碰到的参数
不管你在哪个平台跑 starnet,都会遇到这组常见配置:
- upscale_factor:模型放大的倍数,一般填 2。
- downscale_factor:预降采样倍数,机器性能不够时可以填 2,速度更快,但细节略有损失。
- color_mode:rgb 或 grayscale。拍彩色星轨当然选 rgb。
- 线程数(threads / num_workers):多核 CPU 或 GPU 并行处理,填 CPU 核心数附近的数值能明显提速。
很多人上手就默认跑,结果彩色输出偏色或处理超慢。我的经验是:如果不打算做大幅裁切,就先不要开 upscale_factor=2,直接跑原始分辨率即可,输出速度能快三分之一,画质肉眼无明显差别。
2.3 为什么说“先叠加、后增强”只有方向对了才有意义
starnet 的输出结果是分层的,你可以只合成星轨层,也可以只取背景层。因此常规工作流可以有两种:
- 方案 A:先用 starnet 把所有帧的 starsless 背景去掉,再把剩下的星星帧做最大值堆栈,得到干净星轨,最后叠回一张地景图。
- 方案 B:直接用 starnet 的 star 层做轨迹合成,再用 startrails 合成功能叠加。
我更推荐方案 A。原因是方案 B 对单帧星星的亮度一致性要求很高,一旦中间某几帧有云飘过,那几帧的星星被模型识别得七零八落,合成出的轨迹就断断续续。方案 A 则是在星星已经分离之后再堆栈,容错率明显更高。
3. 实操过程与核心环节实现
3.1 环境准备:拿到 starnet 并跑通第一次
starnet 最方便的获取方式是下载编译好的发行包,目前支持 Windows、Linux、macOS。以 Windows 为例,解压后你会看到 star.exe / starnet.exe 这样的可执行文件。
第一步,打开命令行,进入解压目录,先处理一张测试图:
starnet.exe --input test.jpg --output test_stars.png --stars这条命令的含义是:输入 test.jpg,输出只包含星星的 test_stars.png。你也可以加--no-stars输出背景。先跑通这一条,确认模型文件路径正常、CUDA 或 CPU 后端可用,再进行批量操作。
第二步,批量提取星星层。假设你有 200 张 RAW 转出的 TIFF(建议 16-bit TIFF,保留更多亮度信息,比 JPEG 后期空间大得多),可以用一个很简单的循环:
for %%f in (*.tif) do ( starnet.exe --input "%%f" --output "stars_%%f" --stars starnet.exe --input "%%f" --output "bg_%%f" --no-stars )这一步会占不少硬盘空间,因为每组输入产出两张图。我实际跑 200 张 2400 万像素原图,大概需要 80GB 空闲空间。建议先算好存储再开工。
3.2 核心合成:从星星层到星轨
星星层都提取完之后,用支持最大值堆栈的软件进行合成(Photoshop、Siril、StarStaX 都行)。我个人最常用的是 StarStaX,因为它有专门的“流星/星轨”模式,而且支持对每帧做轻微对齐。
在 StarStaX 里把 200 张 stars_*.tif 拖进去,选择“堆栈模式 = 最大亮度”,输出一张星轨图。
这时候你会得到一张底色接近纯黑、只有细密星轨的画面。它可能看起来对比度不高,这是正常的——不要急着拉色阶,后面叠底图时还会统一调整。
3.3 融合地景:把星轨“放回”画面里
用之前提取的某一张背景图(建议选一张地景清晰、无云遮挡的 bg_xxx.tif),在 Photoshop 里置于底层,把堆栈出的星轨图放上层,混合模式选“变亮(Lighten)”或“滤色(Screen)”。
- 变亮模式:取两层中较亮的像素,适合星轨本身比较亮、地景亮度较低的场景。
- 滤色模式:整体提亮,星轨会更明显,但地景也会被稍微照亮,具体看你要的氛围。
我的习惯是先用变亮,再对星轨层加一点点外发光或柔光效果,让轨迹边缘有自然过渡。
3.4 参数与输出规格速查
为了让操作更直观,我把最常用的一套参数组合放在表格里:
| 环节 | 推荐设置 | 说明 |
|---|---|---|
| 输入格式 | 16-bit TIFF | 保留暗部星点细节,避免 8-bit JPEG 出现色阶断层 |
| starnet 颜色模式 | rgb | 彩色星野摄影必须用,grayscale 会丢掉星点颜色 |
| upscale_factor | 1(若原图分辨率够) | 2 更适合小图放大,但耗时明显增加 |
| downscale_factor | 1(速度不足时再调 2) | 调 2 后速度提升明显,星点细节轻微损失 |
| 堆栈模式 | 最大亮度 | 星轨合成的核心逻辑 |
| 地景混合模式 | 变亮 / 滤色 | 按地景亮度灵活选择 |
| 输出位深 | 16-bit TIFF 或 PNG | 方便后期再调色 |
这套参数是我在多种场景下反复试出来的,适合 90% 的地景星轨照片,你可以把它当成默认起点来微调。
4. 常见问题与排查技巧实录
4.1 星星层变成“马赛克”
这是最常遇到的问题,尤其在密集星场区域。原因通常是模型输入分辨率被压得太低,星点之间的间距小于一个像素,神经网络无法区分。解决办法是保持原始分辨率运行,或者先用双线性插值把图片放大一倍再喂给模型。
4.2 地景与星轨之间出现亮边
明明我用了变亮混合,星轨边缘却有灰边或者亮边?这是因为星星层里残留了一些地景的亮部信息,例如山体反光。我的排查顺序是:先看单张 stars 输出,确认地景是否干净;如果地景仍有残留,可以在提取星星层之前先用蒙版把地景区涂黑,只让天空参与 starnet 提取。
4.3 内存不足 / 程序崩溃
批量跑几百张大图时,Linux 下容易 OOM(内存溢出),Windows 下容易直接崩。建议每次批处理不要超过 50 张,处理完后把临时 stars 文件移到另一块盘。如果仍然崩溃,把 downscale_factor 临时调整为 2 重新提取,后面再用后期软件把星星层放大回原尺寸,画质损失是可控的。
4.4 星轨断层,轨迹中间消失
通常不是 starnet 的问题,而是拍摄间隙有云或飞机等遮挡物。这种情况下,重新提取星星层意义不大,要从素材源头解决——删掉有遮挡的帧再合成。
5. 一些压箱底的经验补充
5.1 拍星野之前就为 starnet 做准备
既然是聊实操,我就多说几句关于“前期拍摄怎么配合后期工具”的话。starnet 对单帧画质的要求不低,尤其是噪点控制。ISO 尽量控制在原生 ISO 的 1-2 档之内(比如很多机器是 ISO 100 原生,那你就别超过 ISO 400 太多),单帧曝光不要过短,否则暗星太少,合成出来轨迹稀疏。
另外,间隔越短、张数越多,星轨越连贯。建议单张 10-20 秒、间隔 1-2 秒、总张数 200 张以上。拍北天极附近时,轨迹是同心圆,特别适合这种后期手法。
5.2 批量处理时优先跑“背景层”
starnet 的模型在做星星提取时更花时间,而背景层提取因为几乎没有星点识别压力,速度快得多。如果你只想要一张干净地景,完全可以先只跑--no-stars,省下大量时间。实验表明,同样一张图,只提取背景比只提取星星能快 20%-40%。
5.3 多平台选择建议
Windows 图形界面下用 StarStaX + starnet 是最舒服的组合;Linux 服务器上可以考虑 starnet 的命令行版加批量脚本;macOS 用户注意文件路径带空格时要用引号包住。还有一点,GPU 加速版本依赖于 CUDA 环境,没有独立显卡的电脑跑 CPU 版本就行,只是慢一些——200 张图大概多等半小时,不算离谱。
6. 我的真实体会
我个人实际跑 starnet 最惊艳的一次,是在海拔 4200 米的垭口拍的猎户座星轨。当时天气不算好,薄云飘过好几次,数值上噪点也不低。要是以前直接叠加,肯定废了。但用 starnet 把星星层分出来后、剔除掉有云的帧再合成,成片居然像是“只有干净天空”的感觉,地景的雪山轮廓是完整稳的,星轨从猎户座中心一圈圈散开,那种画面质感,传统流程真的很难做到。
这个方法后来我也试过拿来处理星野延时摄影的单帧降噪、甚至月面拼接的预处理,虽然软件本身主要是面向星轨,但“先分离再合成”的思路确实能迁移到多个星空后期场景里。如果你也拍了大量星野素材还没处理,强烈推荐找个周末跑一遍这个流程,相信你会在看到干净星轨图层的那一刻理解我现在的心情。