MEMS/传感技术
这篇文章将从CMOS成像原理出发,深入讲解ISO的本质,谁决定ISO,原生ISO和基准ISO的区别和定义,分析噪点产生的原因。详解信噪比、动态范围的区别与计算,以及最重要的ISO如何影响信噪比与动态范围。
ISO的本质 基准/原生ISO区别
通常我们将ISO理解为传感器对光的敏感程度,在胶片时代,可以调节银盐颗粒的大小来决定真正的感光效率,但在数码相机时代这么理解并不恰当。
因为对于同一块传感器,光子到电子的转换效率,也叫量子效率已经确定,不随ISO的改变而改变。
那我们在同样的光圈和快门下如何改变出图亮度呢?加增益。没错,ISO的本质就是增益,可以是模拟的,也可以是数字的。一般我们将仅由模拟增益决定的ISO称为原生ISO,也叫native ISO,而最低原生ISO称为基准ISO,也叫Base ISO,但通常这两个概念可以混用。
CMOS成像原理
为了搞清楚谁决定ISO的课题,我们来回顾一下CMOS图像传感器成像原理。
光子进入CMOS的光电二极管内被转化为电子并捕获到potential well也叫势阱内完成积累,这个光子到电子转换效率被称为量子效率,也叫QE。
势阱的电子被浮动扩散节点FD也叫floating diffusion转移并储存到一个电容CFD里,读出过程中,这个电容完成电荷到电压的转换并被源极跟随器SF读出。
之后这个电压被一个可编程增益放大器PGA执行模拟放大并交给模数转换器ADC量化为数字信号。
深入理解谁决定ISO
纵观整个光到电再到数字信号的读出流程,ISO又体现在哪儿呢?
首先,量子效率决定了光电灵敏度,这个很好理解,一般相机为50%-60%。
其次,浮动扩散节点的电容CFD决定电荷到电压的转换关系,我们小学二年级就学过C=Q/V,表现电容和电压、电荷量的关系,那一个电子给到这个电容能产生多少电压呢?就是基本电荷量小q/Cfd。那么这个由浮动扩散节点电容值决定的电荷到电压的对应关系,就称为conversion gain,也叫转换增益,这个电容很重要,一会儿有大用处。
一般来说conversion gain的单位是微伏每电子,比如索尼a1高增益的conversion gain是85.7 uV/e-,表示它一个电子给到浮动扩散节点上,能转化成85.7微伏的电压。在同样的量子效率和像素尺寸下,这个由浮动扩散电容决定的conversion gain就决定了基准ISO,因为此时PGA不放大,而源极跟随器通常有固定倍率。
索尼A1论文中的芯片参数
那当PGA开始执行模拟放大,比如说放大两倍,意味着接受同样曝光量下能给到ADC的电压是基准ISO的两倍,基准ISO100的被放大到ISO200,原生ISO就是被PGA的模拟增益乘上基准ISO决定了。
但PGA的放大倍率也有限,一般是30db,那如果你想开非常非常高的增益,比如说ISO102400,已经超过模拟放大极限怎么办?ADC量化之后再机内数字增益呗,这时和你后期提亮没有任何区别,这一段也叫扩展ISO。
简单看个例子,比如说使用imx410传感器的尼康Z6,datasheet显示最高30db的PGA放大,也就是32倍左右。已知imx410在ISO800时通过双增益电路切换到高增益的conversion gain,配合32倍的PGA放大,最高原生ISO是32*800=25600,是不是正好对应到实测数据。
当然不同厂家对原生ISO的标定有时也带上数字放大,这里就不在赘述了。下面来详细讲讲信噪比、动态范围和宽容度。
光的量子特性和散粒噪声
绝大多数人都错误的认为高ISO下的噪点是CMOS引起的,但事实并非如此。光的散粒噪声才是噪点的第一大来源,尤其是目前由于技术进步,读出噪声可以压到几个电子的级别,散粒噪声更是在大多数情况下占据主导。
不确定性原理指出,不可能同时精确确定一个基本粒子的位置和动量。由于光的量子涨落,在某处测得的光子数量不是定值,而是呈现一定概率。
而一段时间内光打到传感器后的接收数量符合均值为λ的泊松分布。泊松分布有个很好的性质,就是其期望和方差都是均值λ,标准差自然是根号λ。这个性质可以直接算公式,也可以通过中心极限定理近似到正态分布得到。
什么是信噪比?就是均值/标准差。
比如说某个像素成功转换了n个光子为电子,那此时散粒噪声信噪比就为n/根号n=根号n。
所以说对散粒噪声,随着光子数量n的增加,虽然噪声是以根号n的形式增加,但其信噪比也在以也在以根号n的形式增涨,这就是为何我们要增加进光量的微观解释。
而在需要用到高ISO的场景,本身的进光量就小,光的信噪比不足。此时开高增益以提亮图片,散粒噪声就更加明显了,这也是所谓“ISO引起噪点”的说法错误所在:高ISO下的噪点是因为低进光量造成散粒噪声信噪比低,而不是开了高增益引起多余噪点。
进光量相同 适当的高ISO反而噪声更低
读出噪声 热噪和FPN
接下来,我们来看看读出噪声,也就是CMOS对信号的读出本身引入的噪声。
读出噪声最重要的来源是ADC量化之前的模拟电路部分,尤其是读出电路中的FD和SF会分别引入100 μV左右的噪声。当开启高ISO,PGA模块对SF的读出电压加模拟增益,前面的所有读出噪声也被同步放大,这一段随ISO放大而放大的读出噪声也叫前端读出噪声。
而PGA模块和ADC本身也会引发噪声,不随模拟增益而改变,这一段也叫后端读出噪声。
其中对于ADC来说,连续变化的模拟信号采样为离散的数字信号一定是不完美的,这其中的误差称为量化误差,引发了量化噪声,反映在raw文件里一般为固定的几个bit,量化噪声可以通过增加ADC的采样精度而减少,比如选用14bit或16bit ADC。
当然除了读出电路本身引入的噪声,成像过程中随着快门时间增长,CMOS产热会引起热噪声。
热噪声也约翰逊–奈奎斯特噪声,本质是电子的热运动产生,任何时候都有,只是高温更为明显。在电容器里热噪声也叫KT/C噪声。
以及由于不同像素之间的非均匀性导致的固定模式噪声,也叫FPN,Fixed Pattern Noise
但这两者一般来说并不占主导,比如索尼A1的论文中就着重提到了采用列并行的取样保持电路(S&H)对KT/C噪声降噪。
动态范围与信噪比的定义与区别
刚刚有提到,信噪比是某一均值下对标准差的比值。
而动态范围的定义不一样 ,动态范围DR是最大值和最小值的比值。
在CMOS里,最大值是像素达到饱和时最多能容纳多少电子,也叫满阱容;最小值是没有信号输入时本身cmos本身会引起的噪声,也叫本底噪声或零输入响应,可以近似为读出噪声。
满阱容被谁决定?还记得浮动扩散节点电容CFD吗?给定允许的最大电压摆幅V,是不是可以通过V*Cfd算出这个电容最多能容纳多少电子,再结合基本电荷量q即可算出最多能容纳多少电子。
这就是满阱容,也叫FWC,full well capacity。
计算信噪比和动态范围
信噪比和动态范围怎么计算呢?通过photonstophotos.net查看不同相机的单个像素的最大满阱容,以及在各个ISO下以电子为单位的读出噪声。
通过FWC/readout noise能算出这个相机的最大动态范围。我们通常将动态范围用挡来表示,2倍是一档,那动态范围是多少挡呢?就是:
对于信噪比来说,由于现代传感器读出噪声很小,我们可以通过满阱容开根号得到的散粒噪声信噪比近似为某相机的最大信噪比,以db来表示就是:
以a7R4为例的SNR和DR计算
具体来看个例子,以索尼a7R4为例,其最大满阱容为36000个电子,最低原生ISO下读出噪声大概3个电子。
可以得到其最大动态范围是:
大概13.55档。DXO测出来13.3,很精准吧。
最大信噪比呢?我们通常用18%的中灰也就是大致吃到满阱的18%来算此时的信噪比,也就是:
实测是37db,也差不多。
注意这里的计算都是基于像素层面,没有缩图,至于缩图会复杂一点。
ISO如何影响和信噪比与动态范围
好,重点来了。ISO和信噪比、动态范围是什么关系呢?
首先,高ISO能提高信噪比,当进光量确定的时候,散粒噪声的信噪比也确定了。而在相同的Base ISO下,采用更高的ISO,事实上就是改变的PGA放大器的放大倍数。
让它放大电压有什么用?第一,压制放大器到ADC之间的那段传输噪声。第二,让ADC能接收更高的电压摆幅,量化时能用到的有效色深采样更高,压制ADC的量化噪声。
所以说这就得到了一个很反常理,但又非常正确的结论:给定相同的进光量,在不过曝的前提下提高ISO,反而能压制后端读出噪声提高信噪比。
而一般测试图里提高ISO噪点变多,是因为要保持画面曝光相同,缩小了光圈/缩短了快门,本质上还是因为进光量变少造成散粒噪声信噪比降低,并不是ISO引起了噪点。
保持曝光不变,开高ISO必然要缩光圈/减快门,低进光量引起噪点
保持进光量不变,后期提到一个亮度,高ISO反而噪点少
我们来看看实测数据,你会发现不论是新老相机,高ISO的读出噪声总是比低ISO低那么点,即使是具有所谓ISO不变性,后端读出噪声足够低的新相机,比如索尼a7C,高ISO的信噪比收益仍然存在,虽然收益没那么明显了。
这时候你可能有疑问了,唉不对啊,前文不是说了高ISO会放大散粒噪声和前端读出噪声吗?怎么到这里又压噪声了?
注意这里压噪声是指前期用高ISO比后期提亮信噪比高。对于散粒噪声,它是光的物理属性,想把很少的光提亮到高亮度,散粒噪声总是被放大,所以说散粒不是CMOS的锅。
在后期提亮时,要共同放大散粒+前端+后端噪声,提高ISO只放大前端+散粒,带一个固定的后端噪声。所以我们才得到ISO对信噪比的结论:进光量相同时,高ISO能压制后端读出噪声来提高信噪比。
至于ISO对动态范围的影响则完全相反。
ADC能接受的最大电压摆幅是固定的,比如说1v。PGA不放大时FD能装多少电子就是最大满阱容。
那当PGA放大器开始放大,比如说2倍,ADC还是只能接受1v,但对应到放大器的输入端就只能接受0.5v了,造成将将过曝时对应的电子数量砍半。
所以说,ISO越高,动态范围越低,而且当后端读出噪声足够低的时候,提高ISO对于本底噪声影响不大,造成的结果就是ISO和动态范围近似为线性负相关。
我们可以看到近期的几个相机,包括索尼a1,尼康z9在双增益后都符合这个趋势。下期会提到这个性质和ISO不变性的联系。
ISO的形象化理解
我们可以形象化地把ISO想成话筒的话放,你说话声音一样的时候,话筒振膜的振幅是确定的。但电路中传输过程和模数转换过程一定会有噪声,如果你说话声音很小,就直接被淹没在底噪里了,再怎么后期放大都没用 。
这时候你开启话放,适当让前端的电压摆幅增大,是不是就对后端噪声有压制作用,提高了信噪比。
但如果话放增益开太大,电压对振幅的灵敏度太高,你稍微说话大点声就爆掉了(削波)。这时候是不是能接收的最大值和最小值之比就变小,所以动态范围就小了。
结语
简短地总结一下这篇内容:
数码相机的ISO不能理解为感光效率,而是一个增益。
基准和原生ISO不一样,基准ISO是被一个电容决定的conversion gain影响,原生ISO是基准ISO乘上模拟放大。
信噪比是均值/标准差,大多数情况下是散粒噪声主导。
考虑光子射入符合泊松分布,散粒噪声信噪比恰好是捕获的光电子数量开根号
适当的高ISO能压后端读出噪声,提高信噪比
动态范围是满阱容/读出噪声,其中满阱容直接和ISO负相关,而新相机的读出噪声变化没那么大
读出噪声足够低时,ISO和动态范围是线性负相关
该开高ISO时开高ISO,比后期提亮噪点少,当然也看光比
不要信“ISO引起噪点“,高ISO影响动态范围是真的
这就是我的第一期相机ISO硬核解读。这篇文章从最底层的原理出发,分析了ISO的本质,原生ISO和基准ISO的区别和定义,讲解了噪点产生的机制,详细对比与计算了信噪比和动态范围的区别,以及ISO对它们的影响,并且澄清了噪点和ISO的关系,当然也欢迎指出我的问题。下期会着重于双原生ISO和双增益,向右曝光,曝光宽容度和ISO不变性,并会结合实际给出更多例子。
欢迎加入【全栈芯片工程师】知识星球,手把手教你设计MCU、ISP图像处理,从算法、前端、DFT到后端全流程设计。
实战MCU+ISP图像处理芯片版图
实战ISP图像算法效果
知识星球发起MCU项目启动,大家一起参与MCU项目规格启动讨论,我把设计、验证、DFT、后端的知识点全部罗列出来,大家一起来完善。
以项目驱动的方式介绍MCU芯片全流程设计的方法;提炼相关的检查列表、signoff checklist的样本;让星球成员熟悉SoC架构、设计流程、开发进度、项目管理;
编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !