谈谈FPGA工程师如何做ISP

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

分类

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

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

前景怎么样

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

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

可见光ISP相关知识分类

光学

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

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

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

ISP

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

sensor配置及数据接入

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

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

架构

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

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

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

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

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

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

算法

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

核心算法

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

功能算法

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

3A算法

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

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

标定和调参

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

数据输出

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

伺服

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

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

总结

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

优秀的 Verilog/FPGA开源项目介绍(二十六)- ISP (图像信号处理)

ISP算法及架构分析介绍

相关推荐
jjjxxxhhh1231 小时前
FPGA,使用场景,相比于单片机的优势
单片机·嵌入式硬件·fpga开发
诚实可靠小郎君95276 小时前
FPGA高速设计之Aurora64B/66B的应用与不足的修正
fpga开发·aurora·高速通信
百锦再6 小时前
基于Zynq FPGA对雷龙SD NAND的测试
fpga开发
∑狸猫不是猫18 小时前
HDLBIts习题(4):边沿检测、分频计数器、多位BCD计数器
fpga开发
黑旋风大李逵1 天前
FPGA使用Verilog实现CAN通信
fpga开发·can通信·sja1000t·fpga实现can通信
hi941 天前
PYNQ 框架 - 中断(INTR)驱动
嵌入式硬件·fpga开发·zynq·pynq
transfer_ICer2 天前
Vscode搭建verilog开发环境
vscode·fpga开发·编辑器
沐欣工作室_lvyiyi3 天前
汽车牌照识别系统的设计与仿真(论文+源码)
人工智能·单片机·fpga开发·汽车·单片机毕业设计·matlab车牌识别
绅士羊OuO3 天前
FPGA学习笔记#5 Vitis HLS For循环的优化(1)
c++·笔记·嵌入式硬件·学习·fpga开发
Panda 皮3 天前
FPGA时钟之时钟偏移
fpga开发