
玩深空摄影后期的人几乎都绕不开一个问题怎么把星点和星云背景彻底分开。我第一次接触 starnet是在处理一张银河广域图的时候——那天晚上攒了一周素材但等到缝合时发现银河里密密麻麻的星点跟背景云气粘在一起手动抠星点抠到怀疑人生。后来一个同好推荐了 starnet前后跑了不到十分钟模型把整张图里的星星全部摘了出来一张星点蒙版、一张干干净净的无星背景。我当时就觉得这类工具迟早要改变天文后期的习惯。starnet 不是一个修图插件它是一类基于神经网络的星空图像处理工具。输入一张星空照片它会自动输出两个结果一张只保留星点的蒙版以及一张没有星点的背景图。这个能力最直接的应用就是让深空、广域、星野摄影者在合成、调色、降噪时不再需要花几个小时去处理星点这个环节。这篇文章我打算把从安装、跑到实战的完整流程讲一遍会覆盖我踩过的坑和后来验证有效的参数适合刚接触深空后期、以及长期被星点问题折磨的老玩家。1. 这东西到底解决了什么问题星点分离的前世今生1.1 为什么非要把星星和背景分开很多刚入门的人会觉得奇怪星点不是照片里最漂亮的部分吗为什么要费劲把它摘出去因为在天文后期里星点和背景云气混在一起会带来一连串连锁麻烦。先拿深空天体来说。你拍 NGC 7000 北美星云亮星和暗云气一起出现在画面里直方图拉伸的时候一颗亮星会直接把整个曲线顶到右边背景一压暗云气细节全丢了。强行拉亮暗部星点又会出现一圈难看的光晕。做彩色合成也一样。窄带摄影里三个通道分别拍 Ha、OIII、SII恒星在窄带里会变成又亮又硬的点颜色映射之后经常出现四角星、三角形星、颜色发紫的假星。这种问题如果在后期阶段去逐个修正一颗颗星点处理过去几十上百颗亮星工作量直接爆炸。拼接的时候更头疼。广域银河多张接片星星的位置在不同帧之间会随着视差变化接缝处星点错位是常态。如果先把星点摘掉拼接背景最后用一个统一的星点模板盖回去接缝问题就消失了大半。还有锐化。做高反差保留或者反卷积时星点会被放大成光斑边缘发亮如果用无星背景做锐化干净得多最后再把星点叠回去。可以说星点分离不是一个锦上添花的技巧而是处理上述所有场景的底层能力。1.2 传统方法怎么做starnet为什么不讲武德传统思路无非两种一种是在 Photoshop 里用色彩范围、魔棒、图章工具一点一点抠。银河里星点上万颗颜色和背景接近抽风是常态处理一张图动辄两三个小时。另一种是 PixInsight 里的形态学变换 MT把星点半径缩小、揉进背景里效果还行但暗弱星点和云气小结构经常一起被揉没细节损失控制不住。starnet 的做法完全不一样。它在大量标注过的真实天文图上学到了点状光源与连续云气结构的区分方式输入一张图网络会预测每个像素属于星点的概率输出蒙版然后利用周围背景纹理把星点位置填回去。这就像把一盘菜里的葱花全部挑出来传统方法是拿筷子一粒粒挑AI 的方法是一个见惯了后厨的人扫一眼就手到擒来挑完还会把洞补平。当然它也不是完美无缺。模型对不同画幅、不同焦比、不同滤镜的适应有差异极暗噪声、密集星场偶尔会出问题。但从后期效率上讲它把星点分离从手工活变成了一键批量活这已经是质变了。2. 环境准备与安装最容易栽跟头的第一关2.1 两条路图形界面版 vs 命令行版我建议普通后期爱好者优先用图形界面版。Windows 上有现成的 WinStarNet装好后把 TIFF 文件拖进去勾选几个参数点运行就能等着出结果。不需要装 Python不需要碰命令行对只用 PS 和 SIRIL 的人来说门槛最低。如果你有多张素材要批量处理或者想把这个流程嵌进自己的后期工作流里再考虑命令行版本。项目仓库里提供的是基于 TensorFlow/PyTorch 的推理脚本逻辑上都是三步加载模型、读取图像、推理输出。伪代码大概是长这样的from starnet import StarNet model StarNet(weights_pathmodel/starnet_v2.h5) model.run( input/astro/ngc6992.tiff, starless/astro/ngc6992_ns.tiff, starmask/astro/ngc6992_mask.tiff )不同版本的接口名略有差异具体以你下载的版本 README 为准但整体流程不会变。这里最容易踩坑的是依赖版本老版本模型基于 TensorFlow 1.x新版又迁移到 PyTorch如果你拿新框架去载旧权重大概率直接报错。所以下载代码仓库之前先看清楚它要求的框架和 CUDA 版本按它给的依赖表装别自己乱升级。2.2 模型和数据流它到底在背后做了什么不管哪个版本运行前都要先准备一个训练好的权重文件通常几十MB到几百MB不等。这个文件决定了模型识别星点的能力仓库页面都会提供下载地址。下载后最好单独建一个 model 目录放好路径里不要带中文我曾经因为中文路径折腾了一个晚上才找到原因。starnet 对输入图像有讲究它期望 16 位整型或浮点型 TIFF而不是 8 位 JPG。因为 8 位图星点核心区域容易溢出高光细节已经砍掉了模型在断裂的高光边缘上很容易产生伪影而 16 位图保留了从暗角到亮心的完整信息模型对星点评判的准确度会高一大截。部分版本在推理前会对图像做一次自动拉伸这个参数通常叫 stretch控制着对暗弱星点的敏感度。值调大小星点更容易被识别出来值调小蒙版更干净但暗星会被当成噪声丢掉。新版界面里一般会有开关自动状态拿不准时先用默认值跑完看直方图再手动调。2.3 依赖版本与硬件需求想跑得舒服硬件还是要注意的。我对周围同好的使用情况做了个粗略统计可以给大家做一个参考项目推荐配置说明Python3.6 ~ 3.9版本太高容易和旧版 TensorFlow 冲突深度学习框架按仓库要求装老模型用 TF1.14新模型用 PyTorchCUDA对应框架版本驱动太新也可能不兼容看报错再调显存2GB 可跑 2048x20484GB 可跑 4096x4096显存不够就缩图或分块跑内存建议 16GB 以上CPU 推理时内存占用很夸张硬盘建议 SSD主要是读写大 TIFF 文件HDD 也能跑就是慢如果你是 A 卡或者只有核显也别太担心。CPU 跑是能跑的就是慢实测一张 3000 万像素的图GPU 几分钟的事CPU 可能要四十多分钟到一小时。我自己的解决办法是白天上班挂着跑下班回来素材已经处理好了。3. 实操把一张普通星空照片拆成星点无星背景3.1 输入图像准备从RAW到TIFF别拿 RAW 直接丢给 starnet它不吃这个格式。我习惯先用 SIRIL 或 Photoshop 把 RAW 转成 16 位 TIFF保存选项里选无损压缩或完全不压缩。这里有个细节转换之前先做基础的暗场、平场校准让背景尽量均匀否则模型会把镜头暗角或传感器瑕疵当成云气结构一起保留后面再去处理就很麻烦。如果素材是一张已经拉伸保存的图比如你之前已经用曲线拉过亮度了尽量保留一份线性版本再跑。starnet 对强拉伸后的图也能处理但拉伸会改变星点强度分布蒙版边界容易偏硬合成后会有贴片感。还有一种情况银河广域图里暗弱星特别多整张图看起来灰蒙蒙的。我会在送进模型之前先用曲线把暗部稍微提亮一点让星点对比度更高再去跑 starnet。这样能减少暗弱星被模型当成噪声丢掉的概率算是个花小钱办大事的技巧。3.2 跑一次 starnet结果文件怎么用选好输入图设置输出前缀点运行。等模型跑完输出目录里一般会出现两个文件star_mask 是灰度蒙版像素越亮代表星点概率越高starless 是无星背景图星点部位已经被背景纹理填充了。首次拿到结果我建议先放大检查四角。部分版本会在图像边缘留下小而规整的十字标记用于对齐前后图。这个十字虽然很小但在后续合成时容易被放大最好在合成前裁掉边缘或者用仿制图章修掉。还有一件事很多人会忽略打开 star_mask 看一下直方图。如果中位值接近 0.5说明画面里星点占比过高或者星点太亮模型把很多非星结构也标成了星点。这时候调整 stretch 参数重新跑比后期用曲线硬拉蒙版更干净。3.3 重建星点让星星重新回到无星背景上拿到 mask 和 starless 之后接下来要做的就是把星点放回去。最简单的办法在 Photoshop 里就能完成把原图放在无星背景图的上层把图层的混合模式改为变亮。原理就是变亮模式只保留两图层中较亮的部分——星点区域原图更亮所以显示原图的星点背景区域无星图更干净亮度接近不会干扰背景。如果想对星点的多少做控制可以在原图上先加一个图层蒙版再把 mask 粘贴进蒙版。调整蒙版的色阶就能控制最终星点的数量和亮度。想要更细的星点可以对蒙版做一次最小值滤镜让星点边缘略微收缩想要更多的暗星对蒙版做一次幂次压缩比如在曲线里把中低亮度区域统一提亮。在 PixInsight 里我会直接用 PixelMath 写一个表达式配合 star_mask 完成合成# 假设三个通道 # image - 原图 # starless- 无星背景 # mask - 星点蒙版白1为星点 (1 - mask) * starless mask * image把上面表达式分别填进 RGB 三个通道应用后就能得到一张既有干净背景、又有完整星点的图像。为了让星点亮度和原图更匹配我会把 mask 先做一次幂运算比如 mask^0.8让亮星的权重稍微降一点暗星权重稍微升一点过渡更自然。到这里一次完整的 starnet 单张处理流程就走完了。听起来简单但里面细节不少尤其是参数和蒙版控制值得多试几次找手感。4. 三个实战场景starnet让我从抠星地狱里解放出来4.1 银河接片不接星以前做多张银河接片最痛苦的不是拼接而是接缝两边的星点亮度、大小对不齐。哪怕曝光参数一致边缘视场里的星点也会变形接出来总有一排突兀的星星。用 starnet 之后我的流程是这样第一步把参与接片的每张素材分别跑一遍 starnet得到各自的无星版本。第二步把所有无星图丢进拼接软件无论是 PTGui、Photoshop 还是 PixInsight 的拼接模块这时候拼的是连续的背景结构接缝处理难度大幅下降个别曝光不均的地方用蒙版一擦就干净了。第三步挑一张星点质量最好、变形最小的原图再跑一次 starnet提取出星点层叠到拼接完成的全景图上。最后做一次整体曲线和颜色平衡。这样处理完之后画面里所有星点来自同一次提取亮度、颜色、大小高度一致看起来就像一次曝光出来的。我处理过一幅十一张拼接的银河拱桥以前折腾一晚上都还有瑕疵用这套流程不到一小时就搞定了。4.2 窄带映射里挽救四角星窄带摄影玩家应该都有过这种经验Ha 通道里的亮星边缘非常硬R、G、B 三通道对应恒星通量不平衡SHO 映射出来星点经常带紫色或绿色色差甚至因为 OIII 通道里星点饱和形成难看的十字星芒。我现在处理窄带数据会先对三张窄带原图分别跑 starnet得到三张无星背景。颜色映射只针对无星背景做星点完全不参与调色这样可以大胆地拉曲线、做色彩平衡不用担心星点颜色被带跑偏。等背景颜色定稿再把从 RGB 或 L 通道里提取出来的星点叠回去。我处理 M42 窄带的时候这套流程让背景云气的细节层次和星点的自然颜色都保住了两边都不妥协。顺带说一个细节如果窄带图里星点非常密集starnet 跑出来的无星图偶尔会残留一些暗弱星点核心这时候可以在 stack 之前对三个通道的 mask 做一次 OR 合并用合并后的蒙版统一提取星点背景会更干净。4.3 城市光害背景的均匀化城市周边拍摄的星空图背景通常带着明显的梯度街灯光晕、远处光害、月晕混在一起。直接在原图上做 DBE、ABE星点经常被当成背景亮点干扰背景取样导致提取结果里出现一圈圈的黑斑。我的做法是先用 starnet 去星在无星图上做背景提取和均匀化这个时候画面里只有平滑的梯度DBE 的采样点放到任何位置都很安全。处理完背景后再把星点叠回去整张图的光害梯度和星点分离得干干净净。后来我甚至养成了个习惯不管是深空还是星野凡是背景有明显梯度的图先跑 starnet 再 DBE已经成为标准流程。4.4 一个顺带发现的冷门玩法救急用的伪平场有一次出门拍摄平场拍得一团糟回家校准全靠暗场硬扛。后来我发现如果拍了一组多张短曝光的银河素材可以先用 starnet 把每张的星点都去掉再把无星图叠加起来做平均。星点变化被抹掉之后叠加结果里剩下的基本就是相对稳定的镜头渐晕和天空背景梯度用它当作伪平场来校准其他素材居然能救回不少细节。需要说明的是这个方法只能救急不能替代正规平场因为平场里的尘埃阴影、光学暗角信息和它并不完全等价。但如果你有过拍完才发现没拍平场的惨痛经历这招至少能让你少哭一晚。5. 常见问题与排查技巧速查表用 starnet 的人多了遇到的问题五花八门。我把这几年代码群里高频出现的问题整理成了一个速查表方便直接对号入座常见现象可能原因解决办法显存不足报错 Out of Memory输入图太大或分块设置不当降低输入分辨率或开启分块推理关掉其他占用显存的程序CUDA 相关报错框架版本和显卡驱动不匹配按仓库要求重装对应 CUDA 和 cuDNN别用最新版硬怼模型文件下载慢或中断服务器在国外网络不稳定先校验文件完整性有 MD5 就对一下断了就续传或者找同好网盘分流进度条卡住不动首次运行要加载权重CPU 推理耗时确认线程数没被限制大图就耐心等小图先试跑确认流程输出图像整体发灰、颜色失真输入是 8 位图或拉伸过度回退到 16 位 TIFF用线性版本重新跑检查自动拉伸参数四角出现规律的小十字模型留下的对齐标记合成前裁掉边缘或用仿制图章修掉别留到后期放大无星背景糊成一片像水彩晕染星点过暗被模型当噪声处理先用曲线适度提亮暗部再跑降低 stretch 中的暗星敏感度深空里的小星系被当成星点摘掉目标结构小且亮度集中调低 stretch 值或者局部选区把目标区域保护起来再合成除了速查表我还有一个想重点提示的操作习惯别把无星图当成原始背景直接拿去锐化。starnet 的无星图是模型重建出来的它不是真实信号的直接拷贝暗部纹理多少带有 AI 修补的特征。在高反差保留、反卷积这类操作里半径不要给太大宁可多锐两次也不要一次拉过头。另外跑完 starnet 之后最好对比原图和无星图在同一位置的背景像素值。如果背景亮度明显升高或降低说明模型把部分云气结构也当成星点清掉了这种时候不要硬用换个参数重新跑一遍往往就好了。下面再说两个我实际摸索出来的心得。第一个是如果你要批量处理几十张素材别一张一张去点 GUI写个脚本批量调用命令行版本下班前挂着跑第二天起来直接收获。第二个是有些版本内置了scale或upres选项专门用来处理小幅面高分辨率图跑之前先看清楚默认值这个参数对最终蒙版的精细度影响很大。我第一次跑通 starnet 的时候心里想的是以后不用再抠星了。但用久了才明白它改变的不只是一个操作环节而是整个后期流程的组织方式背景和星点成为两条独立的处理线背景线负责云气、颜色、降噪星点线负责表现力和自然度最后再合成。每一步都可以单独调整不再互相拖累。如果你第一次接触它先别急着追求完美参数。拿一张自己熟悉的素材把流程从头到尾走通一遍看看蒙版长什么样感受一下参数变化带来的差异然后再去处理真正的大项目。我身边不少朋友就是从这一晚开始彻底告别了手动抠星。