当前位置: 首页 > news >正文

ISP流程介绍(Raw格式阶段)

一、ISP之DPC

        DPC(Defective Pixel Correction)也就是坏点矫正,在sensor接收光信号,并做光电转换之后。

        这一步设计的意义在于:摄像头sensor的感光元件通常很多会存在一些工艺缺陷缺陷,让图像上某些像素无法正常收集到需要的光信号,导致图像出现明显高光或者死黑像素点。

        通常的作法,可以是sensor厂商检测标定出这些坏点,然后直接矫正。也可以是拍摄图像之后,通过特定算法进行直接软件矫正。

        看到已经有不少小伙伴写过这方面实现,所以详细实现可以参考:https://zhuanlan.zhihu.com/p/392906069

二、ISP之BLC

        BLC(Black Level Correction)也就是暗电流矫正,本质上来说,isp需要做这一步的原因也是因为硬件缺陷。

        主要是因为感光元器件和光电转换之类器件在输入光强度为0,也就是环境光线全黑的情况下,依然会有电压输出,引起结果图像实际像素值大于0,导致图像出现异常。

        最简单的做法:在实验室全黑环境下,拍摄一张全黑的raw图像,分别计算图像rggb通道平均值并保存,实际拍图时候,每张图像的rggb通道都减去对应的平均值,并归一化得到矫正之后图像。

        同样的,这类详细介绍,也有很多小伙伴做过了,我这里不做详细展开了,细节可以参考:https://zhuanlan.zhihu.com/p/386487708

三、ISP之LSC

        LSC(Lens Shading Correction)也就是镜头阴影矫正,常规意义上来说,这一步也可理解为硬件缺陷导致的,本质上是由于镜头光学特性引起的。

        整体上这种缺陷又可以分为两类:

        1、Luma shading:镜头从中心到边缘逐渐出现了能量衰减,导致结果图像呈现中心亮四周黑的现象。

        2、不同颜色的光折射率不同,白光经过镜头到成像sensor时候,由于折射率问题,会导致不同颜色光落到不同位置上,引起偏色。

        最简单暴力的矫正方法:将输入图像平均分成24x24之类的块,默认中心块的亮度和颜色为gt,将其他块的亮度和颜色直接往中心块靠齐。矫正前和矫正后图像可以参考如下图片。

        需要特别注意的是,本身来说,核心缺陷在于中心进光量远大于边角,这一步虽然可以亮度/颜色强行修正,但是必然出现噪声放大和缓解不了解析力不足的缺陷,

        边角去噪可以在继续牺牲解析力情况下,缓解放大后的边角噪声,但是边角解析力在不引入额外设备或者说叠多帧的条件下,那是基本没救了的。

        下图分别为修正前和修正后图像对比:

 

        同样的,这块的修正细节,也有很多小伙伴讲过了,大家可以参考文章:https://zhuanlan.zhihu.com/p/389334269, 上面截图也引用自这篇文章。

四、ISP-NR Raw

        NR Raw(noise reduction for Raw)也就是Raw域去噪,单纯的图像去噪算法在这几十年发展中,已经有了无数种,简单按类别来分,就有简单空域滤波(比如高斯),考虑像素值相识性(如双边),变换域去噪(如小波),考虑图像块内容结构相似性(如nlm,bm3d),加入时域信息(mfnr),基于聚类训练(如各类字典或者RAISR等),基于nn网络等。

        去噪算法这块,有兴趣的后面慢慢折腾讲,这里展开讲的话,相对于isp来说,就有点太发散了。我们这里重点只讲下isp raw当前这个节点去噪的明显优势。

        去噪之前,首先我们需要知道噪声产生原因:噪声一般是 sensor 接收光子,然后转化成 RAW 图的过程中产生的,通常由这几个阶段参数:

        1、sensor接收到光粒子,光粒子激发电子时候,会产生 photon noise,该噪声服从泊松分布。

        2、sensor本身发热产生暗电流,引入dark noise 或者热噪声,该噪声服从泊松分布。

        3、电子产生电流再被模拟放大器放大信号时候,产生read noise噪声,属于加性噪声。

        4、模拟信号进行ADC模数转换,得到离散照度值时候,会产生adc 噪声,也属于加性噪声。

        总结下来,Raw图像上一共应该会有两类噪声:泊松和加性噪声。 设备在实验室特定环境下,拍摄特定场景并通过计算,可以直接估算出这两类的噪声参数,参考资料: 计算摄影:噪声模型与噪声估计_低照度 噪声的关系-CSDN博客 。

        将这些噪声参数,引入去噪算法中,比如nlm之类权重计算时候,加入这些参数引导去噪,可以进一步改善算法去噪效果。更明显优势是:当我们有了sensor的噪声参数之后,就可以根据这些参数数据,生成符合该sensor噪声形态的无数噪声图像数据,这些噪声叠加到干净gt图像上之后,就有了无数训练数据对,nn去类算法最头痛的训练数据问题在这里得到解决,并且nn训练时候只需要学会对这类噪声形态去噪,泛化性要求明显降低,对去噪效果提升和模型小型化非常友好,参考资料:https://zhuanlan.zhihu.com/p/237734097 ,

        但是如果Raw图像经过了后续的Demosiac/gamma/ltm之类操作之后,那么噪声形态会被严重破坏,导致无法估算sensor的噪声参数。所以后续阶段上做去噪,不止无法使用噪声参数这个先验信息,还将面对更复杂的噪声形态。

五、ISP之AWB

        AWB(Auto White Balance)也就是自动白平衡,该模块存在的原因在于,人眼本身拥有视觉矫正功能,它可以在不同光源情况下,还原识别出物体本身的颜色。

        但是sensor没有这个能力,光源变化产生的颜色变化,会对sensor带来一样的变化影响,不同色温环境下,拍出来的图像颜色会随着色温变化而变化(如暖色温情况下,排出的结果图会偏红)。

        自动白平衡就是给sensor加上人眼的视觉矫正功能,简单实现来说,就是计算出当前场景的偏色情况,然后方向补偿,将偏色强行拉回到正常颜色上。最暴力的做法,在需要矫正的环境光线下拍一张灰卡,灰卡在实际场景上拍摄出来的偏色层度,就是WB需要反向补偿矫正的强度。

        如下图,左边为矫正前,右边为矫正后:

 

        AWB也是发展了若干年了,很多大佬们已经详细讲解过很多了,细节我这里也略过了,后面有兴趣研究这块算法了再慢慢展开探索,感兴趣细节的小伙伴们,可以参考:https://zhuanlan.zhihu.com/p/395206555 等文章,如上展示图片也来自该文章。

六、ISP之Demosaic

        Demosaic也就是去马赛克,该模块存在价值,主要是为了节约sensor成本,理论上来说,将拍摄现实场景画面,使用三个sensor同时收集r,g,b通道信息,并保证r,g,b通道像素点对齐的话(其实不保证也应该没关系,配准算法后端对齐后也能用),就不需要Demosaic,直接可以得到rgb彩色图像了。比如使用如下结构的sensor设计(图片引用来自:https://zhuanlan.zhihu.com/p/170610956):

 

        基于成本考虑,上图这种设计,通常用的不太多,常用的sensor设计如下图这样(图片引用来自:https://zhuanlan.zhihu.com/p/170610956):

 

        使用如上这类sensor,可以只使用一个感光芯片,并且不需要考虑棱镜分光之类复杂设计,缺点嘛,就是图像质量差了亿点点,并且需要额外使用Demosaic之类技术进行通道插值,合成全彩色图像。

        相关插值技术有很多,常见的比如:最近邻,双线性,色差/色比法,沿边缘方向加权等,最近发展也出现了很多nn Demosaic之类技术,效果挺好的,很多小伙伴也已经写过这方面细节了,可以参考:

https://zhuanlan.zhihu.com/p/170610956

https://zhuanlan.zhihu.com/p/510682315

等相关文章,这里就不展开了。等后面有兴趣研究这块技术时候,在单独慢慢整理。

七、小结

        经过如上六步,图像信息完成从收集光子激发电流 ,到电流转换为离散照度值(Raw图像数据) ,再到RGB彩色图像的转换,Raw图像上相关操作基本到此结束。

http://www.xdnf.cn/news/361783.html

相关文章:

  • 模板引用、组件基础
  • 打破虚拟与现实边界,赵伟辰Holo HK项目引领全球用户体验设计革新
  • 跟我学C++中级篇——STL容器的查找对比
  • [AI Tools] Dify 工具插件上传指南:如何将插件发布到官方市场
  • 软件测试的概念
  • 使用Kotlin Flow实现Android应用的响应式编程
  • MTB图像配准算法实现
  • Swagger 3.0 中注解详细示例
  • Linux云计算训练营笔记day05(Rocky Linux中的命令:管道操作 |、wc、find、vim)
  • linux mcelog inject注入
  • 21.第二阶段x64游戏实战-分析采集物偏移
  • C语言printf使用错误导致程序崩溃
  • 39-算法打卡-二叉树-基础知识-第三十九天
  • C#里创建一个MaterialDesign3的导航条
  • uni-app使用web-view组件APP实现返回上一页
  • 机器人手臂的坐标变换:一步步计算齐次矩阵过程 [特殊字符]
  • 商业 |阿里云又丢出了核弹
  • Webug4.0靶场通关笔记24- 第29关Webshell爆破
  • 华为OceanStor 5500 V3存储证书过期问题处理
  • 在SpringBoot中使用MQTT实现消息的订阅
  • Element-UI字体图标不显示
  • Oracle — 数据管理
  • LVGL源码学习之渲染、更新过程(2)---无效区域的处理
  • 电厂数据库未来趋势:时序数据库 + AI 驱动的自优化系统
  • 期货跟单软件如何对实盘进行风控?
  • go语言封装、继承与多态:
  • 【A2A】管中窥豹,google源码python-demo介绍
  • Go语言中 源文件开头的 // +build 注释的用法
  • 母亲节祝福网页制作
  • 推荐一个很方便的浏览器管理插件Wetab插件