摄像头 ISP 调试的经验之谈(以全志 AW hawkview 为例)

请先自带全志 bsp sdk 开发基础 请阅读 Sipeed 内部培训 V831/V833 的 SDK 的 kernel & package 的开发方法 https://www.cnblogs.com/juwan/p/15226245.html

本文背景:这是我在调试好全志 V831 / V833 系列的时候,因为7寸屏的商业产品对画面有一定的要求导致了需要进一步校准镜头参数时学习的产物,其中包括去全志原厂学习时的一些参考资料,有一些无法直接公开,所以引用的图多取自网络,所谓的 ISP 调试就是在原始底层的驱动开发基础上进行芯片上的图像后期处理,本文目的只是告诉你应该做什么和为什么这么做。

前置技能:了解过数码摄像头相关技术的应用与开发的才可以看下去,零基础的就不用看了。

参考资料:http://www.voycn.com/article/5fenzhonglijiexiangjiisptuxiangxinhaochuli
参考资料:https://www.cnblogs.com/wujianming-110117/p/12925120.html

直接开始进入正题吧。

2022-01-18 更新了 M2DOCK 专用的 ISP 实时调试工具 TigerISP-20211225.7z hawkviewtools 4.1.1 与下文相互照应 https://api.dl.sipeed.com/shareURL/MaixII/MaixII-Dock/tools ,可以拿硬件来实机体验一下效果,注意新版改名叫 TigerISP ,我写这篇文章的时候用的是 hawkviewtools 2022年2月22日的时候我测试了一下新版的 so 做不了了,它需要驱动实现读取 BGGR 图,而过去是直接读 NV21 手工转换再 cal ,现在不行了,所以基础标定的时候可以用旧版,调试的时候用新版更稳定一下。

摄像头的一些历史渊源

关于 ISP 调试这个内容,最好追溯到摄像头的起源,这样自己能够对事物整体的架构有一定的认知,而非片面之谈,似懂非懂,当然现实远比理论历史复杂。

摄像头可以从最初的小孔成像、透镜成像等原理与胶卷胶片打印开始,到后来进入到数码相机的 CMOS 感光元件上,从这以后我们就可以开始进入到软件调试的部分,注意对于软件调试的开发人员可以不用去了解硬件的实现细节或镜头的成像原理或制作方法,但它们会带来什么样的结果和效果还是要略知一二的。

先从成像的源头开始说起,90后的末期应该都见过柯达胶卷的黑白相片,胶卷又名底片,菲林,是一种成像器材。现今广泛应用的胶卷是将卤化银涂抹在聚乙酸酯片基上,此种底片为软性,卷成整卷方便使用。当有光线照射到卤化银上时,卤化银转变为黑色的银,经显影工艺后固定于片基,成为我们常见到黑白负片。(来自百度百科)

这种是通过化学的方法来成像,意味着相片在这个阶段的时候,只有黑白两色,如果用 CMOS/CCD 图像传感器的输入来表达就形如感光元件在单位像素下产生的电压高低来表示接收到的光线强度。

那么彩色相片是怎么来的呢?早期的彩色胶卷可以通过不同层次的三原色感光物质来获取输入光线的颜色,而数码相机通常情况下无法继续沿用化学的方法来分离不同颜色(波长)的感光物质,它只有电压的高低表示光线的强弱。

所以时代到这个时候,胶片巨头伊斯曼柯达的布莱斯拜耳先生提出了一种 Bayer 排列,在每一个微透镜下都加入了一片色彩滤波器,只允许特定范围波长的光通过,即是下图的 RGGB 从而让彩色图片进入到数码相机的时代。

这些资料你都可以在各大网站中获取得知,这里给一个参考和引用,目前理解到这里就可以了。

在光圈、快门、感光度(ISO)共同作用后的曝光是什么?

一些基本知识可以通过摄影资料来学习得知,这不在本文的讨论范围,建议看一些视频具备相关概念的直观感受。

摄影里每个名词背后都有不小的故事量,所以最多提及一下它的用途和目的。

  • 光圈大小直接影响进光量,但光圈值和光圈的大小是成反比的,光圈的数值越小,光圈则越大的,如下图。

  • 按下快门相当于产生一次拍照结果,快门在数码镜头里就是拍摄一次画面的前后间隔的时间,就没有机械式的按下与松开的过程了,所以快门速度越快,进入的光线越少,感光时间也越短,曝光量也就越少了。

在数码相机中,快门帘幕已经不需要了,感光器件可以兼作快门。感光器件在不加电时是不工作的,因此,快门按钮仅仅起到给感光器件通电的作用,而快门速度也仅仅是表示通电(感光)的时间。

  • 感光度在不同场合下有不同的解释,从调试的角度来说,就是增益(gain),这些数码相机特有的,它主要影响感光元件的敏感度,越敏感意味着越容易电压增幅明显,相当于更容易产生整体偏亮的图片。

在这三者的共同作用下影响的是画面的曝光(Exposure)结果,曝光是什么感觉呢?曝光是你看到一个相片的整体光量的评估,如果你用直方图也可以很直观的感受一张图片的曝光度。(不懂可以百度)

通常不同相片需要有不同的曝光来匹配,例如夜间需要更大的曝光来捕捉更多细节,但也会带来更多噪声(沙沙抖动的点点),而面对朝向强光下的人物风景拍摄就不需要这么多光线了,所以曝光是要根据相片的场合和需求来决定要多少的。

现在,有了 gain (增益)和 exp (曝光)两个概念后,就可以继续了。

通常在视觉应用中卷帘快门曝光不宜过大,因为果冻效应会增强快速移动的扭曲模糊问题,导致无法识别一些码或标记,所以要控制在一定曝光下,逐渐升高增益,但增益也不宜过大,会产生更大的电信号导致画面噪点增多,当增益拉不动的时候,就要改光圈,比如增大进光量。

所以 ISP 调试需要做什么?

过一遍简单的流程。

所以最终目的是为了让成像的效果在 AI 输入和屏幕上显示的画面更有针对性,我们才需要去调试 ISP ,这是从内置 ISP 到外置 ISP 的一次改变,以往经典 DVP 摄像头都是内置 ISP 的指令微调参数,如今走到这层就意味着,你可以通过其他更多功能的 ISP 来辅助成像的美颜处理。

这要求摄像头可以输出 RAW 图,RAW 图就是 bayer 色彩滤镜( RGGB )输出的效果,如下面这样绿绿的画面,这是因为 R GG B 的排列中 G 多了一个。

到这里我们要先调试好摄像头的基础设置曝光(set_exp)和增益(set_gain)的函数,这涉及到后续的 ISP 动态调节参数的时候能否做到,要怎么调,就看你具体的芯片情况了,这应该不是问题。

确认 sensor 出图了以后,我们开始 ISP 的一些基本的调试吧,接下来有理论也有经验。

所谓的去马赛克(Demosaic)

这个去马赛克(Bayer Denoise)是因为 bayer 阵列不同颜色排列导致的马赛克画面,通过去马赛克(Demosaic)的插值算法来将 RGB 重新落会各个 R / G / B 单个像素点上,常见的邻近插值、线性插值、双线性插值等。

插值算法的工作原理有简单也有复杂,可以举例最简单的邻近插值,就是从邻接的颜色值总和进行平均值来还原某中心点的 R G B 值,这种运算简单,转换效率高,但容易在黑白相间的栅栏区域里产生一些条纹颜色的现象,一个典型的色彩混叠的例子,注意图中的白色栅栏。

这是因为 G 和 R B 的采样率不同,若是采用邻近插值的方式去还原单位像素的 G 值会导致色彩混叠。因为G的采样率比RB都要高,这样,RB不能像G那样准确的恢复出原始被采样图像的色彩,就会有假的色彩花纹在图像的高频部分产生。

当然这是可以通过联系更多像素的线性插值算法来弥补,因为各个像素点之间的关联不够,所以通过各种线性关系来加强彼此的联系就可以比较好的改善了。

但见到这种情况的时候,可以不用紧张,可能是在这层出的问题,留个印象就行。

BLC(BlackLevel Correction) 黑电平校正

起因如下:

  • CMOS传感器采集的信息经过一系列转换生成原始 RAW 格式数据。以 8bit 数据为例,单个 pixel 的有效值是 0~255 ,但是实际 AD 芯片(模数转换芯片)的精度可能无法将电压值很小的一部分转换出来,因此 sensor 厂家一般会在AD的输入之前加上一个固定的偏移量,使输出的 pixel value 在 5(非固定)~255 之间,目的是为了让暗部的细节完全保留,当然同时也会损失一些亮部细节,由于对于图像来说,我们的关注度更倾向于暗部区域,ISP后面会有很多增益模块(LSC、AWB、Gamma等),因此亮区的一点点损失是可以接受的。

  • sensor 的电路本身会存在暗电流,导致在没有光线照射的时候,像素单位也有一定的输出电压,暗电流这个东西跟曝光时间和 gain 都有关系,不同的位置也是不一样的。因此在 gain 增大的时候,电路的增益增大,暗电流也会增强,因此很多 ISP 会选择在不同 gain 下减去不同的 bl 的值。

它存在的判断标准就是盖上镜头,确保没有光线和透光后,若是此时画面不为黑(可以看 YUV 的 Y 亮度值是否为 0 ),则传感器出来的实际原始数据并不是真正的黑(即数据不为0),所以可以通过 SO (sensor offset)的偏移量来修正为真正的黑。

未做处理的话,可能会带来画面存在一些奇怪的颜色,如下图的粉到修正后的黑。

校正方法常见如下流程:

  • 找手册确认值。
  • 找原厂 FAE 。
  • 自己用工具测算。

这个是基础功能,所以不用担心找不到答案,大不了就自己拿 ISP 工具处理,读图计算。

白平衡(WB) 与 自动白平衡(AWB)

到这里我们第一次见到 3A 算法中的 AWB 了。

为什么需要白平衡,这是因为出来的 RAW (RGGB)数据从粉粉的到绿绿的始终不是真实的颜色,所以白平衡要做的就是对 R B 补偿,以修正 R G B 让画面色彩正常。

而 AWB 自动白平衡就是在不同的色温下,通常会在 2700K ~ 4000K ~ 6500K 不同色温下对【灰色】的 G 值在 128 附近进行标定,需要手动调曝光配合喔。

没有对应的色温可以拉一下曲线自适应,通常会成有规律的线性关系,略带曲线,目的就是补偿 R 和 B 好比下图。

这时候白平衡就会在不同的色温下,对具体的 R 和 B 值做补偿,例如低色温的场合下偏黄 R ,所以白平衡会加蓝 B ,使其 R 和 B 协调,高色温反之。

可以拿自己的手机出来感受一下。

现在画面的色彩就会很正常了,但注意此时色彩是失真的,看起来会很淡,如下图,因为此时还没有做 CM 色彩矩阵还原。

这时候,白平衡的标定已经结束了,评判的治标可以简单看看某些物品红不红,蓝不蓝,确认 R G 色彩增强了就行,在这里微调补偿值还可以让图片看起来偏暖(R多一些)或偏冷(B少一些)。

LSC(Lens Shade Correction) 镜头阴影校正(Shading)

因为镜头进光从中心向四周扩散,所以会导致光线的呈现中心圆的死角存在亮度不一致的情况,该四角俗称暗部,那么 Shading 就是处理这个问题的。

流程为给镜头盖上一个均匀透光的扩散片,控制不同光源色温,调节曝光使中部的 Y 亮度值在 150 190 之间,边角 在 50 附近,目的是中心不能过亮(150-190),四角不过暗(10-20),然后进行暗部的补偿。

有一些 ISP 提供了 LSC 和 MSC ,主要区别在于光源位置可能会不同,就是不一定是中心,可能有多处光源,但同理处理。

CCM(Color Correction Matrix)颜色校正(色彩还原)

一般颜色校正的过程是首先利用该图像传感器拍摄到的图像与标准图像相比较,以此来计算得到一个校正矩阵,一般情况下,对颜色进行校正的过程,都会伴随有对颜色饱和度的调整。颜色的饱和度是指色彩的纯度,某色彩的纯度越高,则其表现的就越鲜明;纯度越低,表现的则比较黯淡。

步骤流程类似于 借助24色卡,同样在不同色温下手动曝光白色为(230,230,230)就可以开始标定了,通常这个时候可以顺便增强色彩的饱和度,使其鲜艳或暗淡一些。

这是影响画面的整体颜色是否准确的标定,注意,此时的光线一定要均匀够亮,否则会偏色,白平衡做不好在这里还会影响整体的颜色偏绿,自己多注意一下吧。

Gamma 伽马校正曲线

由于人眼对暗部画面比 sensor 敏感,且是非线性的,仅是暗部敏感,所以可以通过 伽马曲线 映射某一亮度到另一亮度,可以看到低亮度的时候增益幅度较大,而高亮度的时候基本不增益。

如果想要暗处的时候整体提亮,就将曲线底部 Y 轴曲线点拉高,但这可能会造成画面整体出现灰色蒙板,因为整体亮度被拉高了。

而伽马曲线主要用于调节不同颜色之间的对比度,也就是在某个像素点下,不同的 RGB 会被不同的伽马曲线微调增益,有时候这个曲线并不是那么好调,所以根据实际情况做一些修正吧。

调节后,可以让某些颜色渐变的过程中更亮更鲜艳。

WDR(Wide Dynamic Range)宽动态调节(HDR)

宽动态技术主要用来解决摄像机在宽动态场景中采集的图像出现亮区域过曝而暗区域曝光不够的现象。简而言之,宽动态技术可以使场景中特别亮的区域和特别暗的区域在最终成像中同时看清楚。

主要是解决亮部不过亮,暗部不过暗的问题,这个不同家的实现还挺不一样的,也是挺有挑战的部分,例如下图。

可以看出它会对亮部抑制,暗部补偿从而修正该问题,在某些人像设备的背后经常会有光源,这就导致逆光的场合下看不到人脸,因为光线打到人脸上反射给镜头的没有背后的光强烈,从而呈现较暗的画面,就如上图的效果。

具体怎么调,那就是调高亮区域和低亮区域的比例和增益曲线了。

锐化(Sharpness)和 降噪

这是两兄弟了,降噪要在锐化之前,但我们先看锐化的效果吧。

其实锐化最简单的理解就是对图像的边缘做处理,类似于增强画面清晰度,而降噪呢,就是把图像的一些噪点去除。【https://zhuanlan.zhihu.com/p/138348467】

可以看到那些斑点就是所谓的噪声了,但有些事物可能会误判为噪声,例如人脸部的痘痘就可能被当作噪声移除了,说白了就是为了让画面看起来更平滑,这时候我们要注意两个模块之间的关系。

如果降噪太强,则锐化后的画面可能就会出现失真的效果,因为根本没有东西可以被锐化,所以控制降噪和锐化的强弱关系,锐化也不能太强,太强就会出现画面充满了噪声,因为某些噪声会被边缘增强。

噪声还分彩色噪声和黑白噪声,通常出现在黑暗曝光不够的场景里。

还有动态和静态降噪,其中静态降噪可以处理暗部抖动的斑点,动态降噪会将前后多帧进行降噪混合处理,进一步去除运动过程中的噪声斑点,但这会产生残影的效果,所以要控制好度,可以跟增益(gain)联动固定下来,或根据光线强度联动配置多份表来解决。

降噪的故事太多了,我想讲可能也是讲不完了。

后记

时间已到了 2021年6月9日00点24分,我也已经有些倦意了,所以就写到这里吧,更多的,等我下次想到了,或者结合实际场景了,我再来开新的一文来补偿一下吧。

其实该文也就是记录了一些基础流程和认知原理罢了,如果想要得知更为详细的理论知识,个人建议拿着关键词寻找专业的答案,而博文只能是给你启发和增长见识而已,在知识上与君共勉,加油!

网上其实有很多学习资料供你学习的,不过这东西,还是要亲自试试才有体会,调试到最后斗争的都是画面的主观感受了,所以没有绝对固定的唯一解,只有你的客户看着舒服,满意的解。

这次没有讲关于 AE 自动曝光配合一些宽动态调试的方法,如 PLTM (数字宽动态) 和 WDR 之类的,上文说的都是基础的客观调试,最难的是主观调试,因为客户通常拿不出竞品参考,但又觉得你调的不好,还应该再调调,这就很来火了,调静态和调动态也不同,下次出一个自己的心得体会把,关于 AF 自动对焦的个人还不熟悉,等会了后再提及。

posted @ 2021-06-09 00:43  Juwan  阅读(6623)  评论(0编辑  收藏  举报