
14bit抗断层能力的深入验证
这个话题来源于富士官号的一个提问:
中画幅16bit色深有什么价值?姜老师 @姜尧耕(渔樵耕牍) 的最高赞答案以及置顶文章给出了严格论证。
确实存在的banding
其中有一个小结论:单张下,任意码值点的噪声已经充分高,导致banding并不存在。
然而我确实在14bit的中信号区实拍里,看到了大型色带的存在。而无论是降低快门提高曝光,还是同光圈快门拉高iso提高量化bit数,都没有看到。所以开始很武断的觉得这个理论有问题。

然后我俩探讨了一番。结论是,色带确实存在,但是是因为RB通道亮度异常导致,而不是因为量化bit数过少,噪声不够大而出现量化台阶。实际上用模拟的16bit转到14bit,再进行同样的操作,也是没有色带的。
如下图所示:

R通道的信号异常不连续渐变导致大型色带,而不是连续模拟信号在采样之后生成量化台阶不连续:

下图同一个台阶渐变,应用不同的snr,对应波形的示意:

更多的验证表明,色带仅在最低iso,-7ev这样的中信号区出现,而且和安装的镜头有关。例如裸露cmos,安装z口镜头,都会出现程度不一的色带,而使用单反d700不安装镜头,以及在z机身上安装一个方形内腔植绒的近摄接圈不安装镜头(仿单反结构),就完全不会出现色带。在z机身安装f口的35mm镜头也没有出现。

不同镜头产生的色带形状和明显程度也不一致。所以猜想是外部原因与传感器共同导致。
无论如何,G通道似乎没有受到影响,可用于后续评估。
最极限的后期操作
只讨论100%查看的情况。
从直觉上说,原始信号差异越低,横跨的宽度越高,曲线拉成黑白,越容易出现断层。
根据我有限的经验,很难在整个传感器宽度内获得波形完全平整的图像。我能获得的最平坦的图像,是不安装镜头,在距离cmos约1m处放置约20cm*20cm的显示器方形或圆形纯色色块,直射cmos,先安装镜头对准中心再拆掉拍摄。可获得边缘与中心横跨4128px,亮度差异仅0.1ev的图像。把它拉成黑白,就是我认为的“最极限的后期操作”。
从近饱和~0ev开始,逐档提高快门拍摄平场,直到snr<1的-14ev,G通道波形汇总如下




注意plot profile自动根据数据上下限进行显示,就是“自动拉成黑白”
可以看到,确实没有任何一档的波形出现量化台阶。同时可以想象,每档之间的任意级别曝光,也不会出现。
也就是说:
对于我这台尼康z7,无论后期操作多么极限,都不可能在14bit raw里使用曲线,将G通道的连续渐变的任何原始信号拉出断层。
原始信号就不连续的不算哈。上图也有例子。
用代码模拟cmos对现实世界连续信号的采样
那抛开事实不谈,虽然散粒噪声无法去除,如果可以设法提高snr(例如ettr和堆栈),我想知道,snr升高到多少,噪声造成的dithering,才不足以平滑台阶。
这个实拍很难进行验证,模拟一下看看。
设计目标:
模拟cmos对连续信号的采样过程。对于一个ev_span = 20的逐格渐变目标(如xyla21),使用相机拍摄获得图像,以及使用我的模拟器,添加散粒噪声,读出噪声和prnu,生成图像,二者测出的ptc曲线应当完全一致。
模拟方法:
在32bit模式下,可以以极高的精度生成连续渐变灰阶和噪声。
我开发了“给单个像素,以指定dB的snr精准添加噪声”的脚本。
连续灰阶精准添加散粒噪声:指定最高级别的snr,指定snr以后,所有像素的实际snr,根据它与最高级别的ev差异,动态计算实际snr,每1ev对应-3dB。
读出噪声和prnu也依次添加。但是方便起见,暂不考虑prnu。
最后将32bit值转换为符合14bit raw规格的16bit tif。
例如,尼康的maxDN_14 = 15375。最高信号以DN_32 = 15375生成。可以将其量化到16bit下的15375,这是正常拍摄的情况。量化到floor(15375/2) = 7688,则是-1ev拍摄。极端情况,将其量化到16bit的2,那么下一个DN_16 = 1,说明此时下一ev只有1个DN。
下图是模拟zf拍摄hm21(21格透射式灰阶灯箱,每格间距约1ev)的情况:

绿线是使用read noise = 1.6902(实测),k_adc = 6.619(ptp报告), prnu = 0计算出的理论PTC线。
黑点是以上述参数,使用模拟器生成的图像,进行测量得到的实际snr。可以看到,黑点基本都在绿线上,模拟很有效。
模拟实拍汇总
对于同一个span = 0.1ev的原始渐变信号,宽度2000px,模拟45mp相机单通道1/2图宽的情况。
从0dB到96dB,以6dB(1档,2倍)添加不同级别的散粒噪声,从-10ev到0ev,每0.1ev的理论色阶数如下

所以最低测试到-10ev,无噪声情况下量化形成2个色阶。
拼图汇总如下,为了方便解说,从-10开始。
注意,白色标记的是实拍时此ev的snr。
蓝色框展示的是,要出现明显量化台阶,所需的临界最低snr。例如-10ev这张,实拍snr=18dB,则需要将snr提升到约36dB,才能看到明显量化台阶,30dB完全不行。
也就是说,对于每个实拍档位,想要在最极限的情况下拉出台阶,需要的snr,比实际拍摄能获得的snr,要高好几个档位。如果仔细看一下,就会发现,每一个ev档位,开始出现断层的snr的dB数,都是实际snr dB数的2倍(注意是dB数的2倍,不是4张堆栈获得的snr比例2倍。snr比例2倍相当于+6dB)。这在现实世界里是不可能达到的。











我把每档在最极端情况下,展现量化台阶所需的堆栈张数放在图下方。这些数字看起来十分荒谬,无法进行实际操作。
但是我确实做了一个-7.38ev处的256张堆栈。理论上需要512张才可展现台阶,256张无法展现。这是acr解码后再堆栈,G的效果:

可以看到很明显的pdaf横纹,完全不可用。可以大概看到一些隐隐约约的断层。说明上边的模拟的基本可靠的。
波形如下:没有明显的台阶波动。

EDR的下限部分本不该考虑,但是也可以看一下表现。
在snr <=1 的部分,从-13.5ev到-14.5ev,不计散粒噪声和prnu,只修改read noise来考察出现波动的下限。
下图是σ_read = 1/3 DN时采样到14bit获得的波形,开始出现轻微波动。

1/8 DN时,才出现明显台阶化的波形:

目前也不会有任何只支持14bit raw的机型可以获得如此低的读出噪声。
以σ = 1/3 DN计算,总DR = log2(15871*3) = 15.54,此时确实应该增加16bit的支持,否则dr可能会受到14bit量化噪声的限制。我认为仅当理论dr明显高于14.3时,才有必要使用16bit。
另外一个有趣的发现:
在起始ev相同的时候,将0.1ev span拉爆,和将2ev(或者任意)span拉爆,出现断层所需的snr是一样的,尽管视觉效果看,高span更平滑,但是放大之后可以发现波形不平滑:

结论
14bit 的抗断层能力已经非常厉害,单张raw在任意信号点,都不可能将拍摄到的连续渐变拉出断层。
但是有些仅支持14bit raw的机器,某些情况下会看到大型色带。这是机器的问题。