ISP之去马赛克
日常生活中,我们经常接触到马赛克处理,它用于对图像特定区域进行模糊处理,使得模糊区域看上去由一个个小格子构成,从而隐去我们想遮挡的图像信息。
ISP中存在一个模块,名为去马赛克(Demosaic, DMC),它是常规ISP中不可或缺的一个模块。
大家常常误会:这个模块跟我们前面提到的“马赛克”是不是对应的?事实上并不是。ISP中的去马赛克模块完成的是将图像从RAW域变换到RGB域的任务。
作者:许雪欣
相机成像原理
在介绍去马赛克之前,我们先简单了解一下相机的成像原理。
我们知道,自然界中的物体之所以存在各种各样的颜色,其实是因为它们对打在它们身上的红/绿/蓝三种波长光线的吸收/反射程度不同。要想制造相机,很容易想到,我们需要镜头 + 光电传感器,镜头负责汇聚光线,光电传感器负责感知光线。但是这还不够:传感器只能感知到光的强度,并不能记录光的波长。也就是说,我们如果只有镜头和sensor的话,其实是没有办法记录物体的色彩信息的,只能得到黑白图像。
那怎么办呢?有人想到,我们可以在镜头和sensor之间放置滤光片。滤光片的形态如下图最右侧的彩色网格所示,它由R/G/B三种颜色交替构成。具体来说,第一行第一个像素点,只允许绿光通过,第一行第二个像素点,只允许红光通过;第二行第一个像素点,只允许蓝光通过,第二行第二个像素点,只允许绿光通过;以此类推。这个彩色网格阵列称为Color Filter Array(CFA)。
那么,在加上CFA之后,传感器上的每一个像素点,便都可以记录下它这个位置对应的色彩强度信息了。但显然,这里有一个巨大的缺陷:每个像素点都只保留了原始光线中的一种色彩分量值(这种图称为RAW图),而我们平时看到的RGB彩色图像上,每个点都是同时具备R/G/B三种颜色值的(这种图称为RGB图)。因此,我们需要一种方法,将各个像素点缺失的另外两种颜色分量恢复出来,从而得到一张完整的彩色图像——这个任务便是由去马赛克模块完成的。所以,一句话概括,去马赛克的作用就是:复原各像素点缺失的色彩信息。
下图概括了整个成像的过程(图片出处:https://blog.csdn.net/qq_24965393/article/details/101542220)。
Bayer阵列
根据刚刚的介绍,CFA本质就是由不同颜色滤光片组合成的阵列。根据滤光片的颜色以及排布形态,这种CFA可以分成很多不同的格式。目前,被绝大多数相机厂家采用的是Bayer阵列。这种阵列采用一红一蓝两绿的滤光片,将它们周期性排布,根据色彩具体的排列方式,可以分为RGGB、GRBG、GBRG、BGGR四种,如下图所示。
这里可能会产生一个疑惑:为什么绿色会比红色和蓝色多呢?这其实是考虑到人眼特性。人眼对绿色最敏感,所以我们选择保留更多的原始绿色值。对于去马赛克的处理流程来说,RGGB、GRBG、GBRG、BGGR这四种Bayer格式的处理方法其实都是一样的,无非就是到了某个特定的位置,判断一下当前这个位置的原始值到底是什么颜色的,然后根据算法针对不同通道来进行相应的操作就可以了。
去马赛克算法
根据前面的介绍,我们已经知道了去马赛克模块的产生背景与作用。那么我们为什么要研究去马赛克算法呢?
事实上,做图像处理,很多时候无非就是想获得更好的图像质量。对于同一种图像处理任务来说,选用不同的算法,处理出来的图像效果是不一样的。以去马赛克模块举例,这个模块的本质就是,我们要去推测各个像素点缺失的两个色彩分量信息。依据什么原则来推测,如何实施推测?这就形成了不同算法之间的差异,也导致了最后成像效果的优劣。对于去马赛克任务来说,如果算法有缺陷,往往会导致输出图像上出现伪彩、拉链效应、模糊、混叠等问题,如下图所示,这些问题是非常影响视觉效果的(图片出处:https://zhuanlan.zhihu.com/p/144651850?utm_source=wechat_timeline&utm_id=0)。
上图第一部分是伪彩,也就是说图片上出现了一些虚假的、本来不应该有的颜色,就像图上出现的蓝色/黄色像素。第二部分是拉链效应,也就是图片上交替出现的、像拉链一样的纹路。第三部分是模糊,插值算法确实可能导致模糊的问题,也就是边缘的界限没有那么明显了,而人眼对边缘往往是非常敏感的。第四部分是混叠,混叠往往会出现在图像上一些纹理特别细密的地方(图像的高频区域)。从这些图中我们可以看出,这些现象对图像质量的影响是很大的,因此,优秀的去马赛克算法,应当尽量规避这些问题。
目前,最常见的传统去马赛克算法往往遵循如下几大原则,在这些原则的基础上进行个性化的展开:
先插值G通道,再插值RB通道:在Bayer格式中,绿色的采样率是红色蓝色的两倍,相比之下,绿色通道插值出现混叠的概率会比较低,因此通常先恢复绿色平面,再借助绿色平面来恢复红色、蓝色平面。 基于色差恒定/色比恒定:红色、蓝色平面的恢复往往是基于色差恒定/色比恒定的原则。具体来说,绿色平面的恢复是直接使用原始像素值进行插值,而红色、蓝色平面的恢复是先计算色差/色比(例如色差:G-R),再对色差/色比进行插值,最后再恢复出红色、蓝色值(例如色差:G-(G-R)便得到了R)。实际应用中,色差恒定往往更为常见,因为色比的计算涉及除法,这对硬件实现并不友好。为什么红蓝通道的恢复跟绿色通道恢复方式不一样?这是因为,红蓝通道的采样率相对更低,直接按照绿色通道的方法会更容易出现伪影。 沿边缘插值,而不是跨越边缘插值:这是去马赛克算法中最为重要的原则,伪影的出现通常都是因为跨越边缘插值。这里就涉及到边缘方向的判断,这也是各个算法的关键部分,错误的边缘方向判断会导致跨边缘插值现象的出现。边缘方向通常采用梯度计算的方式来判定,沿边缘方向则梯度较小,跨边缘则梯度较大。
关注我们
实验室网站 http://viplab.fudan.edu.cn
微信公众号 OpenASIC
官方网站 www.openasic.org
知乎专栏 http://zhuanlan.zhihu.com/viplab