深入底层,以富士X-Trans起头聊聊解马赛克

手机
腾讯数码
2018年06月04日 13:55

  前几天有朋友在评论区问到了关于富士X-Trans CMOS的问题,再加上富士总是给人一种精神上很彪悍的感觉,而它这种气场很大程度都是来自它这块有一丝丝不同的CMOS,不过,解读X-Trans的第一步,要先从解马赛克说起。

  说到马赛克,很多同学可能会想起硬盘里的老师们,但今天显然不聊她们!解马赛克的英文为Demosaic,顾名思义,就是把CMOS上一个个的方形的像马赛克一样的像素点重新解构为图像,之所以要解,是因为我们的CMOS都是以这种形态呈现的:

  这是大家很熟悉的拜耳阵列,一个方格对应一个像素,可以看到像素之间有不同的颜色,这意味着在它微透镜下方、二极管上方,覆盖了相应颜色的滤片,只有对应颜色才能通过,单个像素接收到的是明度和单色信息,如果只在RAW域看,照片就是一个个RGGB色点组成,这显然无法恢复原始信息的色彩。

  而解马赛克就是一种通过插值计算的方式,让单色像素猜测出RGB全色调的方法,因此所有RGB彩色滤镜矩阵的传感器都需要解马赛克。适马Foveon X3因为同时布了R、G、B三块整层堆叠,所以它单个像素点就能实现RGB全色采样,不需要解马赛克,但这个方案的成本显然要高很多,而且硬件升级的技术壁垒也比较明显,软件算法的要求也相当高,所以虽然成像锐度惊人,但缺点也是一大堆,属于明显的偏科生,适合有特定需求的用户。

  如上图,富士X-Trans与普通拜耳阵列不同的地方,在于它像素的色彩滤镜从2X2的阵列变了6X6(黑色框内),色彩滤镜乱序程度高,所以不少人都听说X-Trans摩尔纹更少,但事实上它只是有利于降低摩尔纹的彩色特性——传统拜耳阵列每两个相同颜色像素之间均会隔着1个其他颜色的像素,如果原始信号的维度恰恰就是1个像素的宽度,就很容易解出错误的颜色,使摩尔纹呈现彩色锯齿状。但仅仅是降低摩尔纹的色调而已,此前的文章小胖也讲过:形成摩尔纹的核心还是在像素规则排列方式和密度太低(采样率低),而不是色彩滤镜的布局方式,而且你以为色彩滤镜布局就这俩么?太天真了……

  当年索尼F828加入了青色的RGBE:

  还是索尼,加入了白色的RGBW及其变种:

  还有远超三原色的多光谱滤镜方案:

  所以并不是靠改变色彩滤镜的布局就能降低摩尔纹,X-Trans发布之初具备“低摩尔纹”特性真正靠的是摘掉低通滤镜。在低通滤镜还是拜耳阵列必备的时代,X-Trans确实可以说自己更有利于减少摩尔纹,但随着低强度甚至无低通的拜耳传感器开始普及,这方面大家就是在一条起跑线上了。

  在这里再延伸一点彩色滤镜布局吧,比如还有RGB-IR,如下图:

  以4X4矩阵为例,红蓝滤镜各自砍掉2个,填补为IR滤镜,而IR是650-1000nm的近红外波段,超出了人眼可见光(380-780nm)的范畴,加入IR波段的目的是为了极弱光情况下的降噪,因为IR像素的弱光噪声先天就比较小,用它来当做RGB图像的降噪引导,其实就很类似手机端彩色+黑白双摄降噪的原理了。除此之外IR还有利于提高人脸识别效率、方便活体检测、利于场景深度计算等等。

  从这里可以继续延伸一点:熟悉相机成像结构的朋友应该知道,在传感器上方还有IR-CUT,也即红外截止滤镜,为什么要加入它?原因在于我们的传感器光电转换的光波段(350-1050nm)远超人眼可见范畴,如果不加以约束,最终就会导致严重偏色,所以才需要红外截止滤镜。传统RGB传感器多选择650~700nm等截止,RGB-IR传感器要更高一点,比如810nm截止,这时候其实依然存在偏色,但范畴变小,在ISP管线里做数字截止就能恢复颜色。

  现在回到主题,在同一个6X6的矩阵里,传统拜耳是9R+9B+18G的组合,而X-Trans则是8R+8B+20G,多了2个绿色滤镜,少了红色和蓝色各少了1个,虽然自然界中绿原色的影响最大,但具体的布局比例并没有一个严格的定论,减少本来就相对较少的红蓝滤镜意味着色度信号会进一步下降(换取绿色滤镜的亮度信号),而且在解马赛克算法中,彩色滤镜的布局很重要,基于拜耳阵列的很多研究都没有办法直接转换到X-Trans上去,即便是神经网络学习也需要两套完全独立的训练方法,而针对拜耳阵列解马赛克算法的研究量显然不是X-Trans可比拟的,更何况X-Trans的色彩滤镜布局复杂,后期解码的难度更高,速度更慢。

  解马赛克算法的原理可以分为两类——光谱匹配和空间匹配。其中光谱匹配里有色比恒定和色差恒定两种比较经典的基础算法。色比恒定为:绿色的亮度信号用简单的双线性插值来估算,而红蓝的色度信号通过不跨越边缘的领域色调平缓性来插值恢复,而色调则是色度/亮度,比如蓝色点的色调就是B/G。

  色差恒定的方法则是:色调定义为色度信号减亮度信号,比如蓝色点就是B-G,用双线性插值恢复红蓝采样点的绿色分量,再使用该绿色分量去恢复其余点的蓝色与红色分量。

  这两种技术的差别在于色比恒定需要乘除法,绿色分量为时还要重新定义色调,色差恒定则只有加减法和移位,后者硬件开销大大减小,所以比较多见的是色差恒定算法,这两种算法本质上还是3X3领域内的双线性插值,所以在无边缘相交的平滑区域效果虽然还不错,但边缘区域就很容易算错,从而产生伪色。所以有了引入边缘检测的绿色分量插值的边缘自适应算法,先解数量较多,包含边缘信息更多的绿色图像,接下来红色与蓝色的解码插值分别基于各自与绿色通道的色差,这种先绿后红蓝的解马赛克思路也是由此开始被广泛沿用。

  当然,现代解马赛克算法有很多,就不一一展开了(也不现实),但基本准则是宁少毋过、宁弱毋错,但即便是很成熟,沿用很广泛的算法,也有一些容易出现的问题,恰恰就能体现不同ISP之间的设计差距。

  第一是放大噪声,在弱光或长曝等有明显噪声的情况下,有的算法会增加高频相关性,但人眼对高频亮度很敏感,所以解马赛克后反倒会增加图像噪声,但不同算法得到结果可能会很不一样。

  第二是锯齿,也即拉链效应(当然,有些规律分部的纵横噪声是来自传感器本身,这个话题我们以后再表)。拜耳阵列每行每列每隔1个像素就有1个绿色滤镜像素,而在图像边缘,如果解马赛克算法不能较为精确地预估蓝红色分量和边缘方向,像素模糊、颜色溢出等误差就会以拉链开关的分布形式出现。也就是说拉链效应就是插值算法“犯错”了,有一个比较简单的算法:

  1、先取原始图像中的任意像素p,计算与其8个领域范围内所有像素的的色差,找到与之色差最小的像素q,取两者之间的色差p-q。

  2、接着在解马赛克后的该图中取对应的像素P,再计算它与原始图中p的色差p-P。

  3、这时候由p-q减去p-P,得到的绝对值大于2.5,即认定像素p处存在拉链效应。

  第三是伪色,顾名思义就是出现了原本没有的颜色,出现的原因也是不恰当邻域插值。基本的解决方案是中值滤波,作为非线性滤波,可以将伪色替换为领域各点的中值,而且不会产生图像模糊的问题,但如果是包含点、线细节较多的图像位置不适合使用,会丢失细节。

  最后就是摩尔纹,增加像素密度是最好的解决方法,这个以前谈过,就不展开了。

  简单总结一下吧,只要不是单点全色采集的传感器,都需要解马赛克算法,而算法的优劣很大程度靠的就是背后的研发力度,这方面恰恰是小众型设计的软肋,比如富士X-Trans的解马赛克算法速度就比传统拜耳阵列慢30%,所以像GFX50S这种真正的生产力工具也选择了拜耳阵列而不是X-Trans。而高像素密度时代已经基本到来,没有太多第三方支援的色彩滤镜阵列面临的问题只会更多,所以即便它们或许有这样或那样的优点,但量级的差距是暴力而残酷的,就这一点而言,富士自己应该比任何人都要更清楚吧……至于ISO虚标什么的,也脱离本文主旨,也不展开了,小胖想说的是:别盲目崇拜就OK。

  至于解马赛克之后的ISP进程,我们另外开文再讲,欢迎有兴趣的朋友,或者有相关从业经验的朋友补充,谢谢。

家电之家©部分网站内容来自网络,如有侵权请联系我们,立即删除!
滤镜 马赛克
你该读读这些:一周精选导览
更多内容...

TOP

More