摄像头 ISP 调试的入门之谈(经验总结)
在讲述本文之前,我尽量以一个什么也不清楚的初学到入门的用词来阐述什么是 ISP 调试,以及为什么需要调试。
如果你从来都没有接触过什么是摄像头 ISP 调试,我想这个文章可以给你一些启发和关键词。
因为这破事,最近我都无法分享和贡献任何开源代码了。(摊手)
参考资料:http://www.voycn.com/article/5fenzhonglijiexiangjiisptuxiangxinhaochuli
参考资料:https://www.cnblogs.com/wujianming-110117/p/12925120.html
其他就不提及了。
开始进入正题吧。
摄像头的一些历史渊源
关于 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 好比下图。
现在画面的色彩就会很正常了,但注意此时色彩是失真的,看起来会很淡,如下图,因为此时还没有做 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 自动曝光 AF 自动对焦 的用途和概念,下次一定吧。
摄像头 ISP 调试的入门之谈(经验总结)的更多相关文章
- 摄像头ISP系统原理(下)
摄像头ISP系统原理(下) l WDR(Wide Dynamic Range)------宽动态 动态范围(Dynamic Range)是指摄像机支持的最大输出信号和最小输出信号的比值,或者说图像最 ...
- HI3518E平台ISP调试环境搭建
海思的SDK提供了ISP调试的相关工具,降低了IPC的ISP调试的难度.初次搭建ISP调试环境,记录一下. SDK版本:Hi3518_MPP_V1.0.A.0 硬件平台:HI3518E_OV9732 ...
- 基于iCamera测试光电大赛官方指定摄像头mt9m001调试小结
基于iCamera测试光电大赛官方指定摄像头mt9m001调试小结 先看看官方的接口 组委会指定的模块接口 信号定义说明: VDD:3.3v GND:地 SCK:摄像头寄存器的iic配置信号的时钟线 ...
- 分享调试SI4432的一些小经验(转)
分享调试SI4432的一些小经验 最近使用 STM8F103 + SI4432 调无线,遇到问题不少,此处有参考过前辈的经验: 1.硬件把板给到我时USB烧录线带供电(5V),此供电接到LDO输出,就 ...
- 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1
051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...
- 摄像头ISP系统原理(中)
摄像头ISP系统原理(中) AF(FOCUS)----自动对焦 根据光学知识,景物在传感器上成像最清晰时处于合焦平面上.通过更改 LENS 的位置,使得景物在传感器上清晰的成像,是 ISP FOCUS ...
- 摄像头ISP系统原理(上)
摄像头ISP系统原理(上) ISP(Image Signal Processor),即图像信号处理器,用于处理图像信号传感器输出的图像信号.它在相机系统中占有核心主导的地位,是构成相机的重要设备. 主 ...
- 【转】Windows SDK入门浅谈
前言 如果你是一个编程初学者,如果你刚刚结束C语言的课程.你可能会有点失望和怀疑:这就是C语言吗?靠它就能编出软件?无法想象Windows桌面上一个普通的窗口是怎样出现在眼前的.从C语言的上机作业到W ...
- Qualcomm平台camera调试移植入门
1 camera基本代码架构 高通平台对于camera的代码组织,大体上还是遵循Android的框架:即上层应用和HAL层交互,高通平台在HAL层里面实现自己的一套管理策略:在kernel中实现se ...
随机推荐
- 1030 Travel Plan
A traveler's map gives the distances between cities along the highways, together with the cost of ea ...
- Android进程so注入Hook java方法
本文博客链接:http://blog.csdn.net/qq1084283172/article/details/53769331 Andorid的Hook方式比较多,现在来学习下,基于Android ...
- POJ 2396 构造矩阵(上下流)
题意: 要求构造一个矩阵,给你行和,列和,还有一些点的上下范围,输出一个满足题意的矩阵. 思路: 这个题目很经典,这是自己看上下流后接触的第一道题,感觉很基础的一道题目,现在我 ...
- [CTF]ROT5/13/18/47编码
[CTF]ROT5/13/18/47编码 --------------------- 作者:adversity` 来源:CSDN 原文:https://blog.csdn.net/qq_4083 ...
- 解决@Autowired警告
在使用spring框架中的依赖注入注解@Autowired时,idea报了一个警告 被警告的代码如下: @Autowired UserDao userDao; 警告提示信息:Field injecti ...
- svn客户端访问失败,错误“请求的名称有效,但是找不到请求的类型”的解决
1.问题描述:visualSVN客户端在其他机子访问出现以下问题(服务端装在我的电脑上,我本机客户端可以正常访问) 2. 原因分析:SVN客户端访问服务器需要输入URL地址,URL地址分为两种方式.一 ...
- mysqldump中skip-tz-utc参数介绍
前言: 在前面文章中,有提到过 mysqldump 备份文件中记录的时间戳数据都是以 UTC 时区为基础的,在筛选恢复单库或单表时要注意时区差别.后来再次查看文档,发现 tz-utc.skip-tz- ...
- 克鲁斯卡尔(Kruskal)算法(代码)
算法代码 C#代码 using System; using System.Linq; namespace Kruskal { class Program { static void Main(stri ...
- [基本运算符、流程控制之if判断、与用户交互、深浅拷贝]
[基本运算符.流程控制之if判断.与用户交互] 基本运算符 1.算数运算符 python支持的算术运算符与数学上计算的符号使用是一致的 salary = 3.3 res = salary * 12 p ...
- RabbitMQ高级特性
消息的可靠投递 在使用Rabbitmq的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景.Rabbitmq为我们提供了两种方式用来控制消息的投递可靠性模式 confirm确认模式 return ...