一文看懂 ISP pipeline

news2024/9/25 23:13:53

文章目录

  • 概述
    • 什么是ISP
    • ISP实现方案
  • ISP Pipeline
  • ISP输入
    • 行缓冲
    • 数据对齐
  • 难理解的关键算法
    • WDR
    • 图像压缩
    • 色调映射 Tone Mapping
    • RAW域处理
      • 镜头阴影校正 LSC
      • 降噪:空域滤波器 Spatial Filter
      • Bayer Demosaic

概述

什么是ISP

主流的CMOS和CCD sensor基本都是输出Bayer Mosaic格式的RAW数据,需要转换为RGB或YUV格式才能被主流的图像处理软件支持。对于Camera一般还要进一步转换为JPEG格式方便存储。一般情况下,预览YUV格式,拍照JPEG格式。ISP(Image Signal Processing),广义的ISP包含了JPEG和H.264/H.265图像压缩处理,狭义的ISP仅包括RAW格式转RGB或YUV。

ISP实现方案

摄像头类型:

  • RAW摄像头:不带isp功能
  • YUV摄像头:带isp功能

ISP一般为硬件实现方案,即作为独立的芯片或集成到摄像头中。由于涉及大量图像的处理,独立的芯片具有更好的实时性。集成到摄像头中的ISP模块一般仅支持基础的ISP功能。

ISP Pipeline

典型pipeline如下,由几百MHz的时钟驱动:
典型isp pipeline
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更多更全术语欢迎查阅我的博客:
链接: Camera HAL/ISP 专业术语大全

两次颜色空间转换:

  • Demosaic: RAW to RGB
  • CSC: RGB to YUV

ISP输入

ISP的输入基本都是Bayer mosaic格式的RAW数据,Bayer格式图片是伊士曼·柯达公司科学家Bryce Bayer(1929 –2012)发明的,拜耳阵列被广泛运用与数字图像处理领域。

常用的Bayer格式由GBRG、GRBG、RGGB等,常见精度由8/10/12/14bit等。
在这里插入图片描述
另外,很多相机、摄像机产品都会在镜头光路中插入一个红外截止滤光片,其作用是允许波长小于截止频率的光进入系统,而阻止波长大于截止频率的光。常用的截止频率有630nm和650nm两种,它们允许不同程度的红光进入成像系统,因此会对白平衡和颜色校正算法产生影响,所以ISP的参数配置必须要与实际选用的截止频率相配置。

数据接入方式:

  • 在线模式,online mode,sensor产生的实时数据和时序控制信号以行为单位送入ISP进行处理
  • 离线模式,offline mode,待处理的图像以帧为单位存储于系统内存,需要处理时由一个控制逻辑通过DMA从内存中读取数据,并添加模拟sensor行为的时序控制信号,然后送给ISP进行处理。

在线模式优点:低延时(low latency),数据走专用硬件通路,不经内存总线,节省内存带宽。

在线模式一帧图像的第一个像素数据流出sensor后马上就进入ISP流水线开始处理,而在离线模式下,ISP通常需要等到一帧图像的最后一个像素数据到齐之后才开始启动处理。

举个典型的例子:假设一个1080p的sensor,主频(master clock frequency)是76MHz,即一个clock cycle是13.15ns。假设该sensor的配置是每行2000个cycle,这是一个比较典型的配置,其中包含了1920个有效输出和80个horizontal blanking,则sensor每输出一行数据将消耗13.15ns*2000=26.3us,而输出全部1080行有效像素则需要26.3us*1080=28.4ms。而一个典型的 ISP 处理完这帧1080p图像需要多久呢? 只需要3ms!也就是说,ISP只有在26ms之后启动处理才不至于发生读指针越过写指针的情况。

某些海思系列的ISP芯片支持一种特殊的“低延迟”离线模式,即一帧图像的第X行数据到齐之后即启动ISP进行处理,而不必等到最后一个像素到齐。增加了一个硬件机制可以确保读指针不会越过写指针,这样用户就可以选择更早地开始启动ISP处理,当ISP读指针追上sensor写指针时,硬件自动插入延时周期令ISP空转等待,以保证数据完整性。

行缓冲

不论是在线模式还是离线模式,ISP处理图像都是以行为单位的,所以ISP模块都会设计一个line buffer可以缓存若干行图像。通常这个line buffer的大小就决定了这个ISP所支持的最大分辨率。举例来说,如果一个ISP的line buffer可以容纳每行2048个像素,则它无法支持超过2k/1080p的分辨率规格。

数据对齐

ISP、CODEC等硬件单元在处理图像时通常都会有粒度(granularity)要求,即必须将8/16/32/64/128个像素作为一组来处理,这样就可以通过硬件并行化来提高吞吐率。这个需求称为ISP的数据对齐(alignment)需求,多数sensor都支持一个linesize属性,以保证sensor输出的每行数据的宽度符合ISP的对齐要求。与linesize等价的术语还有stride,pitch,均表示每行数据所占用的实际存储空间。当linesize与图像的实际分辨率不相等时,sensor会用一个数据填充对齐部分,这个数据可以是固定值0(zero-padding),也可以是本行最后一个像素的值(copy-padding)。

难理解的关键算法

ISP Pipeline中一些算法看名知义,不做过多解释。但有一些算法需要特殊说明,非专业人士一般不懂。学会了你就是专家。

WDR

宽动态范围,也可以叫HDR。
由于材料和工艺限制,普通sensor一般可以提供50~70dB的动态范围,一般由ISP进行长短曝光图像融合(frame stitching或叫WDR fusion)。

如果希望camera输出帧率保持30fps不变,则两帧融合WDR需要sensor输出60fps,而三帧融合WDR需要sensor输出90fps,四帧融合WDR需要sensor输出120fps。这也是为什么主流产品以两帧合成WDR为主的原因。

为避免motion artifacts,采用Staggered WDR技术,即 sensor 不再以帧为单位输出,而是以行位单位输出,则可以缓解运动伪影问题。如下图所示,sensor 先输出一行长曝光像素,再输出一行短曝光像素,然后开始输出下一行。
在这里插入图片描述
SONY支持WDR的方式称为DOL(Digital OverLap)技术,最多支持三帧曝光。与Staggered WDR技术不同点在于,它的输出格式种使用了一些特别的标志数据,所以需要专用的逻辑电路进行解析。它支持两种像素输出方式,方式1是使用1个stream输出,每行由长曝光+短曝光行交替,方式2是使用两个stream并行输出,如下图所示。
在这里插入图片描述
在这里插入图片描述

图像压缩

为了减轻传输带宽和存储的压力,支持4K 以上的芯片都会在DMA上设计一个压缩算法。当DMA向内存中写入数据时,实际进入内存的是压缩后的数据。当DMA从内存中读取数据时,用户得到的是解压缩后的数据。

Arm 出售的图像压缩技术叫AFBC,即Arm Frame Buffer Compression,这是一种基于脉冲编码调制(Pulse Code Modulation,PCM) 技术实现的无损压缩技术,典型情况下可以实现50% 左右的压缩率,可以节省存储空间和传输带宽。有情报显示,华为在其手机芯片中实现了基于小波变换的有损压缩技术,压缩效率应该更高。

色调映射 Tone Mapping

当WDR模块完成多帧合成(frame stitch)后,接下来就需要对数据位宽进行压缩以节约后续步骤的计算资源。比较合理的做法是采取逐级压缩策略,比如在WDR模块先压缩到12位精度,经过CCM、Gamma 等颜色处理后进一步压缩到10位精度,经过CSC模块后进行最后一次压缩得到最终的8位精度输出。

从16/20位精度压缩到12位精度的过程称为色调映射,这一步骤的主要任务是压缩图像的动态范围,将HDR图像映射到LDR图像,并尽量保证图像细节不损失。

分为全局算法(Global Tone Mapping,GTM)和局部算法(Local Tone Mapping,LTM)。

RAW域处理

镜头阴影校正 LSC

镜头阴影有两种表现形式,分别是

  • Luma shading,又称vignetting,指由于镜头通光量从中心向边缘逐渐衰减导致画面边缘亮度变暗的现象。
  • Chroma shading,指由于镜头对不同波长的光线折射率不同引起焦平面位置分离导致图像出现伪彩的现象。
    在这里插入图片描述
    在这里插入图片描述

降噪:空域滤波器 Spatial Filter

对图像降噪的主要方法是使用空域滤波器对图像进行滤波。滤波操作通常是针对以某个像素为中心的滤波窗口上进行的,滤波窗口的大小与具体的算法有关,常用的大小有3x3、5x5、7x7等尺寸。滤波操作在数学上称为卷积,需要使用一个与滤波窗口大小一致的卷积核,卷积核的每个元素代表一个权重,与对应位置的图像像素值相乘,然后所有乘积累加到一起就是滤波后的结果。

Bayer Demosaic

RAW域的任何一个像点(photosite)只包含一个真实的采样值,而构成像素(R,G,B)的其它两个值需要从周围像点中预测得到。

RAW域的最后一步处理是Demosaic,将像素从RAW域变换到RGB域进行下一阶段的处理。Demosaic 算法的主要挑战就是尽量提高算法的准确性,减少图像边缘损失和颜色误差。
Demosaic 拉链效应,边缘模糊,伪彩
Demosaic 处理不好会有拉链效应,边缘模糊,伪彩等现象。

未完待续…

参考优秀博客:
链接: Understanding ISP Pipeline
链接: ISP算法学习之ISP Pipeline

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/921711.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

金佰利Kimberly-Clark直连EDI解决方案

Kimberly-Clark 金佰利是全球健康卫生护理领域的领导者。 成立于1872年的金佰利公司是全球健康卫生护理领域的行业领导者。个人健康护理用品、家庭生活用纸和商用消费产品是金佰利公司三大核心业务。金佰利在全球35个国家设有生产设施,产品销往超过175个国家和地区…

真机和开发者工具如何模拟虚拟定位

二、如何模拟虚拟定位 微信开发者如何模拟虚拟定位 1、打开微信开发者工具 2、打开调试器 3、切换到Sensor 4、勾选Enable 5、填写经纬度数值,在线解析经纬度链接:【经纬度查询】在线地图经度纬度查询|经纬度地名坐标转换 6、重新编译&#xff0c…

8月23日上课内容 第二章 MySQL数据库管理

本章结构: 数据库基本操作 查看数据库的结构 查看数据库列表信息 show database 查看数据库中的表信息 use 数据库名#切换到数据库中 show tables show tables in mysgl 显示数据表的结构(字段) describe user; Field:字段名称type: 数据类型Nul1 :是否允许为空Key…

c++多种情况不同概率下,在范围内使用随机数

多种情况不同概率下,在范围内使用随机数。比如有5种情况,每种情况的概率不相同,有的概率为25,有的为15. 使用random库的函数来生成随机数。 std::random_device rd; //产生随机数种子 std::mt19937 gen(rd()); //生成伪随机数&a…

VScode 编辑器报错: ‘HelloWorld‘ is declared but its value is never read.

.vue文件被标识红色波浪线;提示: HelloWorld is declared but its value is never read. 问题原因: 因为vue3已经不支持vetur插件。 1、在扩展里面进行搜索Vetur插件,进行禁用或卸载; 2、在 VScode扩展里面搜索并下载…

NO.08 MyBatis创建逆向工程

目录 1、前言 2、添加依赖和插件 3、创建MyBatis的核心配置文件 4、创建逆向工程的配置文件 5、执行MBG插件的generate目标 1、前言 工程的创建有正向工程和逆向工程之分。正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表,如…

Vue3+Pinia+Koa+Three.js 全栈电商项目总结复盘

前言 前几天一个朋友去义乌旅游,带回来很多小商品,就是一整个物美价廉,但是为什么线下购物和网购有的时候差别这么大(网购经常要退换货啊😭😭😭),为此我萌生了一个想法&…

SQL注入之宽字节注入

文章目录 宽字节注入是什么?注入练习让转义符失效联合查询 代码审计 宽字节注入是什么? 宽字节注入准确来说不是注入手法,而是另外一种比较特殊的情况。宽字节注入的目的是绕过单双引号转义。 宽字节注入是一种绕过单双引号转义的手段&#x…

数学——七桥问题——图论

当涉及数学,有很多不同的话题可以讨论。你是否有特定的数学领域、概念或问题想要了解更多?以下是一些常见的数学领域和主题,你可以选择一个或者告诉我你感兴趣的具体内容,我将很乐意为你提供更多信息: 代数学&#xff…

嵌入式Linux开发实操(十):ADC接口开发

#前言 ADC就是模数转换,可以用来接一些模拟量设备,所谓模拟量就是波形不是方波而是各种包络形状的波形的信号,比如电压、电流等电信号或压力、温度、湿度、位移、声音等非电信号,ADC就是将这些信号转换为数字方波信号,以便于信息传递的。 #ADC硬件设计 key按键连接了AD…

高学历就不会“造假”?

一直以来,学历都是职场的敲门砖,也是一个门槛。对企业的雇佣决策而言,学历有着重要的参考价值。 但是总有一小部分求职者,存在侥幸心理,想凭借假学历升职加薪、牟取利益,给企业带来不少的潜在用工风险。倒…

服务器Linux系统配置mysql数据库主从自动备份

服务器Linux系统配置mysql数据库主从自动备份 当数据内容越来越多的时候,数据库也变得越来越大了。如果不小心误删了,或者被黑主机了,那就什么都没有了。所以数据库的数据怎么能让它不丢失做到万无一失变得尤为重要! 我是艾西&a…

(动态规划) 剑指 Offer 47. 礼物的最大价值 ——【Leetcode每日一题】

❓ 剑指 Offer 47. 礼物的最大价值 难度:中等 在一个 m * n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。 你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋…

【应用层】网络基础 -- HTTP协议

再谈协议HTTP协议认识URLurlencode和urldecodeHTTP协议格式HTTP的方法HTTP的状态码HTTP常见HeaderHTTP周边会话保持 再谈协议 协议是一种 “约定”. socket api的接口,在读写数据时,都是按 “字符串” 的方式来发送接收的(tcp是以字节流的方式发送的&am…

排序—数据结构

文章目录 1.前置知识1.1稳定性1.2内部排序和外部排序1.3是不是比较的排序 2.直接插入排序2.1思想2.2实现2.3时间复杂度和空间复杂度、稳定性 3.希尔排序3.1思想3.2实现3.3时间复杂度和空间复杂度、稳定性 4.选择排序4.1思想4.2实现4.3时间复杂度和空间复杂度、稳定性 5.堆排序5…

基于卷积神经网络的种子等级识别

目录 背影 卷积神经网络CNN的原理 卷积神经网络CNN的定义 卷积神经网络CNN的神经元 卷积神经网络CNN的激活函数 卷积神经网络CNN的传递函数 基于GUI的卷积神经网络和长短期神经网络的语音识别系统 代码下载链接:基于MATLABGUI编程的卷积神经网络和长短期神经网络语音识别系统…

【python零基础入门学习】python基础篇(一)

python基础学习 官方: www.python.org,自行安装,linux上有自带python,win自行安装。 [studentroom9pc01 05]$ python --version Python 2.7.5 #创建虚拟环境: [rootroom9pc01 bin]# pwd /root/nsd1907/bin [rootroom9pc01 bin]…

高质量编程与性能调优实践 性能分析工具pprof

01 高质量编程 1.1 简介 什么是高质量 ——编写的代码能够达到正确可靠、简洁清晰的目标可称之为高质量代码 • 各种边界条件是否考虑完备 • 异常情况处理,稳定性保证 • 易读易维护 编程原则 实际应用场景千变万化,各种语言的特性和语法各不相同 但是高…

1267. 统计参与通信的服务器

这里有一幅服务器分布图,服务器的位置标识在 m * n 的整数矩阵网格 grid 中,1 表示单元格上有服务器,0 表示没有。 如果两台服务器位于同一行或者同一列,我们就认为它们之间可以进行通信。 请你统计并返回能够与至少一台其他服务…