碎碎思 · 2月22日

谈谈FPGA工程师如何做ISP

image.png

ISP的功能可以简单概括为使后端能正确识别“真实的”世界。凸出真实和有用,这个有用主要是后端需要的信息;真实即使其更加接近现实中人眼所看到的图像。上面特指的可见光,目前红外的应用也越来越多,商业化也会很快来到我们身边,所以红外图像的处理也是我们这篇文章讨论的一部分。

分类

这里我将ISP分为两大种类:

image.png

可见和红外,两个种类完全不同的ISP,目前可见光市场基本被ASIC所占据,红外市场则相反,但是这仅仅是目前的状态,据内部消息,目前ASIC市场马上要进军红外sensor,意味着红外的商用和大面积推广也逐渐来到我们身边。

前景怎么样

那么是否FPGA在可见光或者红外领域是否意味着被淘汰?

答案当然是否定的,FPGA在可见光领域还有很多应用:比如特殊分辨率;低延时;医疗;复杂环境等。当然目前相对较火的还是红外领域,或者说,未来可将光和红外的融合也是一大方向。

可见光ISP相关知识分类

image.png

光学

ISP和光学息息相关,主要涉及以下几个方面:

image.png

sensor的选型一般由光学工程师进行选定(也由总体选定),选择sensor的分辨率,快门的选择一般和应用背景有关;但是视场角、焦距、滤光片等光学特性是由光学工程师进行分析设计,后期的光轴一致性、补光灯类型和位置基本都由光学决定。

当然还有很多东西是由光学决定的,这里就不赘述了,我们这篇文章的核心不是光学。

ISP

本章说明的是以FPGA为核心搭建ISP,这里面其实涉及两部分工作:FPGA算法及ISP工程师标定调参:

image.png

sensor配置及数据接入

这部分工作比较“通用”,和配置ADC或者DAC工作类似,目前接入FPGA的数据通道常见的就是LVDS(SubLVDS),当然目前MIPI也比较常见,两者接入后的数据流比较相似(物理层不同)。

这里单独说明一下全局快门和卷帘快门输出的数据结构不太相同,对于大靶面的sensor可能还需要拼接后进行后续的ISP的处理。

image.png

架构

ISP的架构是核心,常规的1080P60以下用何种架构其实没什么太大区别,但是考虑后续的继承性,兼容更大分辨率(8KP60)还是需要考虑的。

这里主要考虑的一个点是ISP调参接口,FPGA搭建的ISP有个局限性就是修改参数(包括CCM、Gamma等参数)极其浪费时间,所以有必要在搭建架构的时候这部分一定要考虑清楚。传统的方案是通过外挂单片机通过SPI或者其他并行总线进行参数修改标定,目前FPGA内软核或者硬核已经非常成熟了,直接使用内部的资源就可以完成这一操作。

再说一下传统数据流架构的弊端:

image.png

前一级处理好的数据通过标准的VESA信号驱动后级数据流流动,属于前级推动后级进行数据流流动,这种架构的优点就是简单,有很多传统的算法都是使用这种方式搭建的,并且后级如果通过VGA或者HDMI接口进行数据输出,那么比较方便。

但是上面的结构有几个我认为比较大的缺点:1、前端sensor的一般通过lvds或者mipi接入,都通过内同步方式进行数据传输,已经没有VS或者HS的概念了,需要经过缓存后才能构建后端所需的信号;2、逻辑级数过大,一级一级的推动容易造成逻辑级数过大;3、带宽利用不够,传统的架构要考虑显示器端的显示,所以会有行场消隐区存在,而ISP中算法对消隐区的时间利用不大,造成带宽利用率不高,这种影响对高分辨率情况尤为明显。

上面就是我认为目前传统架构遇到的问题,而解决方式,可以选择自定义总线(前面有文章介绍过一种类AXI-STREAM总线)或者选用官方总线(AXI)。

算法

架构定义完毕后,接下来就是算法了,ISP中需要哪些算法,之前的文章中也有介绍,这里再说一下几个重要的算法,我这里将ISP中算法简单进行了分类:核心算法、功能算法及3A算法。

image.png
image.png
image.png

核心算法

核心算法当然是后端能够显示或者使用的几类算法,包括:去马赛克、GAMMA、CCM以及降噪。他们几个是保证能出图的关键,尤其对于去马赛克是关键,后续我们会单独出文章讨论这几个核心算法,这里就不赘述了,这几个算法都是需要根据实际情况进行调参,所以在设计算法时候需要将调参接口预留出来。

功能算法

这里主要将黑电平矫正、坏点矫正、RAW域降噪、阴影矫正、紫边矫正、锐化、饱和度、对比度等算法归于功能算法,这些算法是适用于不同环境进行参数调整,使图像更加符合预期。

3A算法

3A算法是动态调整图像的亮度、白平衡以及焦距,使摄像头能够在不同环境下自动切换相关参数。

这里说一下和架构相关的知识,就是3A算法怎么实现?传统的架构是适用外挂单片机,让单片机去实现3A算法,这样的好处就是把工作分出去了,无需浪费时间去实现算法。但是这种架构对于高帧率情况无法及时进行处理(单片机和FPGA之间的总线有限制),所以目前可选软核或者硬核实现3A算法。

标定和调参

上面的工作是FPGA工程师需要做的事情,剩下的其实才是ISP工程师需要做的事情,对图像进行标定和调参,目前有很多专业软件进行辅助工作(人眼还是不靠谱~),大部分公司有专业的ISP工程师,把上面所有的算法暴漏出来的参数进行调节,可以把图像调节的“更讨喜”。

数据输出

这个就没什么可以说的了,输出有很多种形式,包括但不局限于VGA、HDMI、光口等。

伺服

伺服的工作我就简单说一下:

image.png

主要包括两方面,一个进行聚焦时候调节焦距的电机,要“稳准快”;还有一个可能不太涉及到的方面就是大型光电中的稳像。上面需要的信息也是需要通过ISP将相关统计信息传给伺服进行设计的。

总结

洋洋洒洒写了个流水,核心就几个,FPGA工程师只实现ISP架构和算法,剩下的工作还进行几方面的分类,如果要做,你要清楚自己需要做哪几方面内容。当然还是去卷红外吧,卷完红外卷红外和可见融合,玩的就是多方面发展~

image.png

原文:OpenFPGA
作者:碎碎思

相关文章推荐

更多FPGA干货请关注FPGA的逻辑技术专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
10604
内容数
561
FPGA Logic 二三事
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息