星空缩星处理--自定义可调--专业图片处理
把一张星空 / 星野照片里的「星点」本身变小、变暗,让星云 / 深空细节更突出。
(注意:这是缩星,不是堆栈/降噪——它只压星点,不碰背景星云。)
什么时候用
- 用户给了单张(或一批)星空 / 银河 / 星云照片,要求「缩星 / 压星 / 把星点变小变暗 / 让星云显出来」。
- 关键词:缩星、星点缩小、压星、减星、星空缩星、star shrink、reduce stars、星点抑制。
- 典型场景:银河带里星点太密太亮盖住了星云;星野人像想让背景星点更收敛;深空摄影想突出目标细节。
两种缩星方法(--method)
| 方法 | 效果 | 适用 |
|---|---|---|
power(默认,推荐) |
幂律比例缩星:对星点亮度层做 star^p,每颗星按比例同时变小 + 变暗,保留核心、无硬边、过渡自然。星点半径约 ×1/√p,峰值压低。 |
想要自然、保留星点质感的缩星(绝大多数场景) |
erode |
形态学腐蚀:星点外圈回填星云背景(变小)+ 核心压暗,效果更「硬」,小星点会被整颗去除。 | 想强力去除密集小星点、只留大星 |
幂指数 p = 1 + strength × (power-max-1),--power-max 默认 4.0:--power-max 越大、同样强度缩得越狠。
工作流程
- 收图:让用户给出图片文件 / 文件夹 / 通配符(例如
"D:/astro/stacked.tif"或"D:/astro/*.png")。支持 JPG/PNG/TIFF 与 RAW。 - 确认要素:按下方「可自定义要素」确认缩星强度、出图数量与方法。默认是 幂律缩星 + 轻度/中度/重度 3 档自动出图 + 不调色 + 自动拉伸;想省事用
--preset light/medium/heavy;想精细控制用--strength 0~1或--levels N/--strengths。 - 跑脚本:用 managed python venv 运行
star_shrink.py(命令见下)。大图加--resize 2400省内存。 - 交付:把结果图用
present_files展示,说明方法、缩星强度档位、是否调色、处理了 N 张。
可自定义要素(给用户的选择项)
| 要素 | 可选值 | 说明 / 默认 |
|---|---|---|
缩星方法 --method |
power(幂律比例,默认) · erode(腐蚀,更硬) |
自然保留质感选 power;强力去小星选 erode |
强度预设 --preset |
light(轻度·0.35) · medium(中度·0.60) · heavy(重度·0.85) |
一键套用,最省事 |
自定义强度 --strength |
0.0~1.0 任意小数 |
覆盖预设;0=几乎不动,1=压得最狠。例 --strength 0.5 |
出图档位数 --levels |
整数 N(默认 3) | 自动输出 N 档强度(默认 0.25→0.90 均匀分),方便挑最满意的一张 |
精确档位 --strengths |
逗号分隔,如 0.2,0.5,0.8 |
想固定哪几档就写哪几档,数量完全自定义 |
前后对比图 --compare |
开关 | 每档额外输出 …_compare.png(左=缩星前 右=缩星后),便于快速判断 |
幂指数上限 --power-max |
浮点(默认 4.0) | (power) 控制最大缩星力度 |
光晕外扩 --halo |
整数(默认 5) | (power) 让星点光晕一起收缩,更干净 |
腐蚀核上限 --max-kernel |
整数(默认 13) | (erode) 限制重度时星点被完全抹掉 |
调色 --grade |
none(默认不调色) · 10 个模板名(见 --list-grades) |
缩星后想顺手调色;--grade-strength 0~1 调强度 |
输出格式 --format |
png(8bit,默认易预览) · tiff(16bit 无损) · jpg |
要后期空间用 -o xxx.tif 或 --format tiff |
色调拉伸 --stretch |
on(默认) / off |
让暗部星云更通透;可 --p-low/--p-high/--gamma 微调 |
光污染校正 --bg-neutralize |
开关 | 按暗部像素做白平衡,抵消城市光造成的背景偏色 |
星点检测灵敏度 --star-thr |
K 倍(默认 5.0) | 阈值 = K × 噪点标准差;越大越只压最亮的大星 |
背景估计半径 --bg-sigma |
整数(默认 14) | 越大越平滑,星点判定越保守 |
缩小边长 --resize |
整数(最长边像素) | 大图防内存溢出,如 2400 |
> 出图数量 = 输入张数 × 强度档位数(每档一张;用 --compare 则每档再加一张对比图)。例如 1 张图 + --levels 3 = 3 张;3 张图 + --strengths 0.3,0.7 = 6 张。
命令示例
# 1) 默认:幂律缩星,单张图自动出 轻/中/重 3 档(PNG 易预览)
python star_shrink.py -i "D:/astro/stacked.tif" -o "D:/astro/out"
# 2) 轻度缩星 + 银河金核调色 + 前后对比图
python star_shrink.py -i "D:/astro/galaxy.png" --preset light --grade milky_gold --compare -o "D:/astro/out"
# 3) 自定义强度 0.5,只出这 1 档
python star_shrink.py -i "D:/astro/nebula.tif" --strength 0.5 -o "D:/astro/out"
# 4) 用腐蚀法强力去小星点
python star_shrink.py -i "D:/astro" --method erode --strength 0.6 -o "D:/astro/out"
# 5) 精确 3 档:0.2 / 0.5 / 0.8
python star_shrink.py -i "D:/astro" --strengths 0.2,0.5,0.8 -o "D:/astro/out"
# 6) 出 16bit TIFF 留后期,且做光污染校正
python star_shrink.py -i "D:/astro/stacked.tif" --levels 4 --bg-neutralize -o "D:/astro/out.tif"
> 运行用的 python 指 ~/.workbuddy/binaries/python/envs/default/Scripts/python.exe(已预装 numpy/Pillow/opencv-python-headless/rawpy/tifffile)。
算法简述(说人话)
- 抠星点:先用大尺度高斯模糊得到「星云背景」,照片减背景 = 只剩亮的高频星点;再用「K × 噪点标准差」自适应阈值得到星点掩膜(抗噪点、不误伤星云)。
- 幂律缩星(默认):在星点区域把亮度层做幂变换
star^p。数学上高斯星点的p次方 = 一个更小的高斯星点(半径 ×1/√p)且峰值更低——于是每颗星同时变小变暗,核心仍在、边缘平滑无硬边。 - 腐蚀缩星(可选):把星点掩膜「腐蚀」缩一圈,被削掉的外圈用星云背景回填(变小),残留核心按强度压暗(变暗)。
- 星点区域之外(星云高频细节)完全不动,于是星点越小越暗、星云越显形。