先说结论
打开图片堆栈,把整串连拍放进去,然后按你想甩掉什么来挑手法:
- 噪点,而且什么都没动过 | 平均值。
- 噪点,但有东西动过 | Sigma 裁剪。
- 人、车、飞机 | 中位数。
- 想变成星轨的暗夜空 | 最亮。
- 景深浅得可怜的微距 | 景深合成。
降噪时先用自动透视校正,三脚架拍摄的夜空也一样:相机不动,星星仍会移动。要有意保留星轨,或各帧已经对齐时,用不对齐。RAW 文件内含可用 JPEG 预览图时可以直接放进来,列表会显示图片的实际尺寸。
下面所有内容,都在说那五行为什么是那五行。
为什么一串帧比一张带的东西多
光线不好时拍的照片,是画面加上噪点,而噪点每一次都不一样。堆栈能成立,靠的正是最后这半句。同一个场景拍十六次,画面十六张都一样,噪点却不一样,所以取平均值就留下了画面,抵消了大部分噪点。
改善的幅度是帧数的平方根:四帧把噪点减半,十六帧减到四分之一,一百帧减到十分之一。这条曲线待着很难受,因为从十六帧走到六十四帧才能再改善同样多,而拍摄量是四倍。几乎所有实际的堆栈都落在八到三十帧之间,原因就在这里。
取平均还能让色调估计更稳定,因为每张有噪点的帧取整后的值略有不同。工具用更宽的累加器,最后才对合成值取整。保存的 PNG 或 JPEG 仍是每通道八位,平均值更干净不等于输出位深更高。
决定手法的那个问题
问题不是「我想留下什么」,而是各帧之间有什么是不一样的。别的都从这里推出来。
什么都没动:平均值
就是普通的平均。对一组帧与帧之间只差噪点的照片,这是能拿到的最有效的消噪方式,也是最容易被毁掉的那一种:只要有一帧里飞进来一只鸟,整个堆栈上就多了一只淡淡的鸟。平均值对一个跟别人不合的数值没有任何看法,它只是照单收进去。
有东西横穿过画面:中位数
把一个人来人往的广场拍的十几张对齐,盯住其中一个像素。多数张里它是地砖,一两张里它是某人的外套。把这十几个值排一下取中间那个,得到的是地砖,因为外套从来就不是多数。
每个像素都这么来一遍,广场就空了。所有那些「把游客从旅行照里去掉」的文章,背后就是这个把戏,而它需要的不过是一串连拍和一点耐心。它只要求一件事:场景里没有哪一处被占住的时间超过一半。在你那十二帧里站着不动了八帧的人,在那些像素上就是多数,中位数会把他留下。
两样都要:Sigma 裁剪
降低独立随机噪点时,中位数比平均值效率低。它使用中间一个或两个值,而不是所有值的平均。换来的好处是,不容易被少量与其余差距很大的值影响。
Sigma 裁剪先估计各通道的平均值和分散程度,再只对所选阈值内的数值取平均。经过少数帧的物体可能被排除,其余背景仍可平均。帧数少或物体频繁出现时,可靠性更低。默认阈值下,四个相同值中的一个不同值仍可能被接受。移除物体比最大程度降噪更重要时,请用中位数。
阈值以标准差为单位,初始值为二。降低阈值会排除更多值,也可能排除真实细节。如果某通道的值全部被排除,工具会保留该通道原来的平均值,而不是留下空洞。
只有亮的东西要紧:最亮
留下每个像素出现过的最亮值。把夜空拍成两百张三十秒的曝光,再用最亮合起来,每颗星都会在结果上画出自己那道弧,也就是一条星轨,由一堆单张从没过曝的短曝光拼出来。同一个手法能把一场烟花从它自己爆开的那些帧里重新拼起来,也能把一个人举着手电在暗屋里走一圈变成一幅光绘。
它的反面是最暗,是这一对里安静的那个:一个像素只有在每一帧里都亮才会保持亮,所以窗户上的反光、开过去的车灯、被闪光灯打亮的雨滴,全都会消失。
被摄体比景深厚:景深合成
f/8 的微距大概只有一毫米是清楚的,对一只虫子来说远远不够。办法是沿着对焦环拍二十张,再从每一张里只留下它自己清楚的那一部分。工具会量每个像素跟邻居差多少,在边缘上很大,在虚化处接近零,然后取赢的那一个。
这一种比别的都更需要三脚架,因为用手拧对焦环会带动相机,而一张从稍远一点拍到的帧,并不是同一个画面换了个焦点。
更亮的混合:相加
相加把解码后的图像值求和,再乘以曝光倍率。这些是八位图片值,得到的是加法混合,而不是模拟相机更长的曝光。明亮区域可能溢出。归一化亮度把倍率设为一除以帧数,也可以直接输入更小的倍率。
对齐各帧
堆栈是逐像素的算术,所以它默认某个像素在每一帧里都是场景的同一处。手持的时候并不是:一串连拍会漂开几十个像素,把那样的东西平均起来,出来的是一团糊而不是一张干净的画面。第一次堆栈让人失望,头号原因就是这个。
每一帧与标着基准的帧比较,找到可靠的修正后再移回原位。默认用第一帧,拿它当基准可更换标记而不重排列表。请选择静态细节清楚、对焦准确的一帧。有四种对齐设置:
- 自动透视校正是默认设置。它校正偏移、旋转和缩放,在整张图上的可靠测量支持时也校正透视。适合中央对齐、边缘星星却仍有拖影的广角夜空连拍。无法找到稳定的透视拟合时,就使用较简单的修正。
- 只平移用于位置偏移但没有旋转或透视变化的连拍,只校正平移。
- 平移、旋转、缩放适用于稍有转动或变焦发生变化的一组。每帧都需要额外测量,即使这些帧原本很正。
- 静态各帧已经对齐,或想让移动的星星形成星轨时,用不对齐。三脚架并不能让星星在整个夜空序列中保持在同一像素。
任何对齐都修不好的,是动了的被摄体而不是动了的相机,也修不好往左挪了一步再拍的那一张。横着挪会改变近处的东西相对远处的东西挪了多少,而没有哪一个统一的修正能同时说清这两者。原地转身没问题,走动就不行。
堆栈后打开对齐详情,查看每帧的状态和修正。无法对齐的帧仍会按原位置加入,如果它让结果变模糊,请移除并重新堆栈。结果打开时,左侧为基准,右侧为堆栈。用鼠标或手指拖动分隔线,或让分隔线获得焦点后使用左右方向键。移到任一边缘就能看到完整图片。分隔线仅在适应窗口下可用。选 100% | 实际像素会显示完整的堆栈结果,并移除对比选项。在 100% 下,拖动图片即可移动查看,也可以让预览获得焦点后使用方向键。用显示单独检查基准或堆栈。回到适应窗口即可再次使用分隔线对比。
RAW 文件在这里是什么位置
CR2、CR3、NEF、ARW、DNG、RAF、RW2、ORF 等文件内含可用 JPEG 预览图时可以打开。这里的处理与冲洗 RAW 传感器数据不同,需要说明清楚。
很多 RAW 文件内含一张相机渲染的 JPEG 预览图。工具会找到最大的可用预览图,用浏览器常规图片解码器打开。它可能比传感器图像小,有些文件则没有预览图。请检查每帧显示的尺寸。
由此有两个结果,一个是好处,一个值得知道:
- 省去传感器解码。寻找预览图通常只需少量读取目录和文件头,随后浏览器读取 JPEG 片段来解码。页面显示的检查读取量统计这些目录和文件头,不包括图片解码器读取的所有字节。
- 那是相机的解释,不是你的。每通道八位,带着相机当时设定的白平衡和照片风格,而不是转换器会给你的那十二位或者十四位线性传感器数据。
可用的预览图可能足够用于降噪、星轨、移除路人和景深合成,限制是尺寸和相机的渲染。要自选白平衡、调整色调或恢复 RAW 暗部,请先冲洗各帧,导出 JPEG 或 PNG,再来这里堆栈。保存的结果仍是八位图片。
跑一次要花多少
值得知道,因为这是一次八秒和一次两分钟的分别。
六种手法的累加器大小不随帧数增加。平均值、最亮、最暗、相加和景深合成每条堆栈一遍,Sigma 裁剪两遍:先估计平均值和分散程度,再对保留的数值取平均。检查和对齐也会解码文件,所以一遍堆栈不等于总共只读取一次。
中位数必须保存正在合成的条带中每一帧的值。二十张 2400 万像素的帧,仅这些值就需要约 1.4 GB。分条可以减少同时处理的行数,代价是每条都要重新解码各帧。其他手法的工作缓冲区超过预算时,也可以分条。
开始前,工具会显示计划结果尺寸、估计工作内存、堆栈计划解码次数和检查读取字节数。内存估计包括建模的工作缓冲区,浏览器内部和内存回收可能让总用量更大。工作分辨率每降一档,图像面积缩小到四分之一,可能减少重复解码。对齐后裁剪的结果可能比原计划需要更少的条带。
为堆栈而拍
一次堆栈的质量,大半在任何软件看到它之前就已经定下来了。
- 比你以为需要的多拍几张。那条平方根曲线前松后紧:从四张走到九张,看得出的变化比从二十张走到四十张还大。
- 别在帧与帧之间改曝光。堆栈默认这些帧是同一个场景、同一个亮度。把曝光锁住,否则这个工具就是在给两张不同的画面取平均。
- 要去人,就在帧与帧之间等一等。两秒内拍完的一串连拍,会把同一个人钉在每一帧的同一处,中位数就会把他留下。隔几秒拍十张,比连拍五十张管用得多。
- 要星轨,就把间隔压短。最亮画出来的就是这些帧记录下的东西,所以两次曝光之间的停顿,会在每一条轨迹上变成一段看得见的断口。
这里没有一样东西离开过你的机器
二十个 RAW 帧差不多是一个 G 的照片,为了让人算一次平均值就把这么多交给一个网站,实在是多了。图片堆栈从你自己的硬盘读文件,在你自己的浏览器里做算术。没有上传这一步,没有账号,也没有排队。而这个说法你可以像核实任何人的说法那样核实:在它跑的时候打开浏览器的网络面板,或者干脆断网再堆一次。
与之相关的那个问题,也就是对任何一个工具,怎么判断把文件交给它到底有没有必要,有它自己的一篇指南。