基于FPGA的图像信号处理器IP实现

时间:2022-09-06 03:51:21

基于FPGA的图像信号处理器IP实现

摘要:本文所设计的图像信号处理器IP能够兼容各种CMOS图像传感器, 处理器IP能够提供传感器补偿的功能进行黑电平与镜头遮光现象的补偿,在IP里还实现了专有的色彩插值算法能够重建传感器输出的原始图像数据里的每个像素的RGB三分量。配合连续增大以及减小的能力, 使用者能够对源图像大小调整到所需要的分辨率。此外, 亮度补偿, 锐度调整, 错色抑制以及色饱和度控制等功能都能帮助图像更适合人眼接受。高精度自动曝光以及自动白平衡调节对用户的拍摄状况能够进一步实施图像统计分析。处理器IP的总线接口兼容于AMBA AHB 2.0方便整合到SoC芯片,最后使用FPGA对图像信号处理器IP作了验证实现。

关键词:图像处理器;颜色插值;自动曝光;自动白平衡

The Implementation of ISP IP Based on FPGA

YAO Yi-wu, CHEN Hong-ming, CHENG Yu-hua

(Shanghai Research Institute of Microelectronics (SHRIME), Peking University, Shanghai, 201203)

Abstract: This paper propose the ISP IP that is compatible with various types of CMOS image sensor. It provides a sensor compensation function capable of compensating for black level and lens shading phenomenon. The proprietary color interpolation algorithm implemented in this IP can reconstruct RGB components of every pixel from Bayer raw data. With consecutive size-up and size-down capability, user can resize the source image to the resolution needed. Moreover, luminance compensation, sharpness, false color suppression and color saturation control can help to make the image more pleasing to the human eyes. Image statistics can be further read for exposure and white balance control. The processor interface is compliant with AMBA AHB 2.0, which can serve as an IP core for integration into AMBA system. Finally, we use FPGA to implement and verify the ISP IP.

Keywords: ISP; Color Interpolation; Auto Exposure; Auto White Balance

1 引言

图像信号处理器IP[1]主要是通过一系列复杂的数学算法运算,对摄像头所接收到的数字图像信号参数进行优化处理,并把处理后的信号通过USB等接口传到PC等设备。摄像头的工作原理大致为:景物通过镜头生成的光学图像投射到图像传感器表面上,然后转为电信号,经过A/D(模数转换)转换后变为数字图像信号,再送到图像信号处理器IP中加工处理,再通过USB接口传输到电脑中处理,通过显示器就可以看到图像了。其中图像传感器表面包含有几十万到几百万的光电二极管。光电二极管受到光照射时,就会产生电荷。摄像头感光芯片分为CMOS和CCD两种,CCD比较昂贵,但成像像素高、清晰度高、色彩还原系数高,能耗也相应地高;CMOS价格低、功耗低、响应速度快。但是基于目前的网络带宽,摄像头普遍选用CMOS图像传感器。

2 IP核模块的介绍

图像信号处理器IP主要包含了如图1所示的模块。传感器接口模块用来接收各种CMOS 图像传感器输入的RGB 8/10-bit Bayer原始数据格式。接口模块兼容分辨率由CIF(352x288)到UXGA (1600x1200),使用者通过编程有关传感器宽度与高度的寄存器来配合传感器的分辨率。处理器支持原始数据在像素时钟上升沿或下降沿锁存,也支持传感器同步信号的极性控制。此外,还支持可编程活动窗口以达到变焦放大的效果。传感器校正模块里的黑电平校准功能自动进行黑电平(定义图像数据为0时对应的信号电平)的补偿,可以将光学黑电平对齐到零或任意值, 进一步将传感器的黑电平和图像信号处理器的黑电平对准,不然没法进行后边的处理。镜头遮光补偿用来补偿在图像角点的灯光衰减现象,使用者能够通过编程镜头中央位置以及增益系数寄存器来达到补偿遮光的效果。色彩插值模块用来重建原始图像数据里的每个像素丢失的RGB三分量,线缓冲器 (Line buffer)提供更多所需要可供参考的相临象素来重建更高的图象质量。色彩校正模块提供一个3 x 3可编程色彩校正矩阵用以调整图像传感器的彩色率,提供色饱和度控制。

图像调整模块利用插值的方法达到连续放大或缩小的效果,缩小的能力可以达到1/128; 根据横向空白的区间以及图像信号处理器IP的两个主要的时钟mclk 和fclk的比例,放大的能力可以超过1倍,调整的算法需要线缓冲器提供高质量的调整后图像。色彩空间转换模块用来转换RGB与YCbCr的图像格式。亮度补偿模块提供可编程的亮度调整补偿分段曲线,使用者必须编程起点与斜坡寄存器。锐度模块用来对图像使用滤波器使图像看起来更为锐利,使用者必须编程阈值与增益系数寄存器来决定锐度的效果是否符合预期。错色抑制模块用来用于减少沿着图像边缘所显示的赝色。数据转换模块用来将输出的数据格式由YCbCr 4:4:4转换成YCbCr 4:2:2或YCbCr 4:2:0;由RGB 888转换成RGB 565,输出数据的Cb,Cr排序能被交换; 输出数据的B,R排序能被交换。输出图像能从原本的目标图像,利用新定义的起点,裁剪宽度与高度而被裁剪。自动曝光/自动白平衡统计模块里,一个图像的统计范围等于源活动窗口,自动曝光统计窗口被分割成14个子窗口,自动曝光统计子窗口对整个窗口的比例是固定的。两帧的统计策略由自动白平衡实施。自动曝光/自动白平衡的统计是分开在不同帧进行,但自动曝光/自动白平衡的统计计数器能够被共享。AHB总线主/从接口模块用来处理IP写图像数据到其他AHB设备,或者是从其他AHB设备接收图像数据或握手命令的。为了能够美化或调整大小图像,还设计了环回图像处理功能经由AHB从其他AHB从设备读入图像。在0.18um工艺节点AHB总线的时钟可以到133MHz,帧速率在SVGA 的分辨率可到30 帧每秒;在UXGA的分辨率可到15 帧每秒。

3 主要图像算法介绍

图像信号处理器IP里大部分的模块都带有相应的算法,本文主要介绍三个主要的算法: 色彩插值算法,自动曝光算法与自动白平衡算法。

3.1色彩插值算法

色彩插值模块的功能包括Bayer原始数据重建每个像素的RGB分量,线缓冲器控制与测试图案的产生。为了保持良好的边缘特性,这里使用的是边缘保持图像插值算法[2]。在进行图像分别率转换和图像放缩时,重建图像中任意方向上的锐变边缘,来改善边缘的模糊效应。

3.1.1 边缘保持色彩插值算法(EPCF)

图2 显示了空间交替采样的几何形状和维度,采用菱形网格和频率覆盖方式。插值运算从绿色区域开始,该区域相比红色或蓝色区域包含了两倍多的采样点。因此,绿色区域拥有非常丰富的图像空间信息用于去马赛克处理(demosaicing),同时对图像的视觉质量也有重要影响。此外,一旦被完全插值,绿色区域可以直接利用光谱的相关性,来协助完成随后的红色和蓝色区域的插值运算。

图2显示的8x5窗口由Bayer色彩滤波阵列(CFA)[3]样点构成,可用于R, G, B颜色通道的基于矩形网格的颜色插值算法,其中每个颜色值(Rij, Bij或Gij)的下标i和j分别代表行列空间位置。

考虑中间像素的绿色值G23,它是由四个插值方向估计出来的[4],分别跟四个最近的绿色像素相关,即位于顶部、底部、左侧和右侧的G13, G33, G22 及 G24。再根据左移位操作(移位范围从第8至11位),颜色插值边

本质上,边缘检测技术是对偏导数因子的计算。图像中任意像素的一阶偏导数,都可以通过该像素点所在处的梯度绝对值获得。因此,沿垂直和水平方向上,相邻像素的梯度均值可计算为:

在边缘检测颜色插值算法中,基于图像特征,可恢复每个像素位置损失的颜色分量。损失的绿色值通过最近邻样点的权重之和来估计。在位置(2,3)处绿色像素的适应性边缘插值运算给定为:

在插值完图像上所有像素位置损失的绿色分量后,便完成了绿色通道的更新,接下来开始估计绿色CFA采样位置处损失的红色和蓝色分量。

用于红色区域插值的数值G计算为:

接下来继续填充在绿色像素位置上损失的红色分量的剩余部分。通过这些对角线梯度的使用,用于估计坐标(2,3)位置处红色像素更新数值的色差插值算法给定为:

类似的操作可用于更新蓝色通道,从而最终完成像素的RGB分量的色彩插值。

3.1.2 线缓冲器的读/写序列

线缓冲器的设计用于应对存储器Cache的访问限制。在线缓冲过程中,只有有限行图像数据被读入到存储器中,并在足够的时间内输出一行完全处理的数据,并予以存储。一旦写出输出行,线缓冲器将被推出一行,以便新的输入数据能被读入存储器。上述过程持续进行直到整幅图像被完全处理。

以图3为例说明,所提出的色彩插值算法使用8行扫描行,因此实时实现需要7行线缓冲。3行缓冲用于G0, G1, G2(100x32x6),2行缓冲用于R0, R1(100x32x4),2行缓冲用于B0, B1 (100x32x4)。为了满足实时要求,0~7输入行的像素按并行方式输入处理器。该处理器能在同一时刻输出全部RGB分量。图4显示了输入与输出的时序关系。插值内核不能在第一和第二输入行之间输出有效像素。自第三输入行起,处理器便能插值完整的RGB数值。由于4阶流水线结构,图4显示出预期构架的等待时间为24T时钟。

3.2 自动曝光与自动白平衡算法

在摄像头中自动曝光(Auto Exposure)和自动白平衡(Auto White Balance)是影响图像效果的重要因素,图像信号处理器IP就是用来控制摄像头中自动曝光和自动白平衡。在对数字图像信号参数进行优化的这个过程是通过采用影像光源自动增益补强技术,自动亮度、白平衡控制技术,色饱和度、对比度、边缘增强以及伽马矫正等先进的影像控制技术来达到。

3.2.1 自动曝光算法 (AE)

自动曝光功能确保拍摄的照片获得准确的曝光,从而使得图像具有一个理想的视觉亮度。它一般包括关键的三个步骤:亮度获取、场景或亮度分析和曝光补偿[5]。

针对一帧图像,在执行自动曝光算法之初,处理器首先要获取当前图像的亮度信息。对于RGB彩色图像而言,每个像素经过去马赛克处理后变成R, G,B三颜色通道。再经过色空间转换就得到了YCbCr色彩空间,其中Y表示亮度分量。

得到了像素的亮度信息后,便进行场景分析。处理器会将所有像素按所在区域进行统计从而得到图像不同区域的亮度信息,并结合区域权重获取图像的平均亮度[6]。处理器再根据当前图像的平均亮度与目标亮度之间的差距,通过一定的算法逼近目标亮度,从而完成曝光调节。

如图5所示一帧图像被分为14个区域,其中背景区域包括0-7区域,主体区域包括8-13区域,在计算整幅图像的平均亮度信息时,每个区域被赋予一定的权重。主体区域和背景区域之间的亮度对比被用于计算背光条件的程度。

根据图5的区域划分,图像的平均亮度给定为:

y_avg =■weightingn×■ (14)

其中weighting n为第n区域的权重,yn_sum为第n区域的像素亮度总和,yn_cnt为第n区域的总的像素数。

自动曝光算法首先定义了高低亮度阈值y_high_th和y_low_th,以及中间阈值y_mid_th。当图像亮度处于高低阈值范围内时,认为达到自动曝光目标。当图像传感器产生一帧图像信号后,处理器计算出图像的平均亮度y_avg和y_delta:

不同色温的光源使得物体的反射光谱较真实色彩有一定的偏差。自动白平衡的目的就是为了消除不同光源造成的色彩偏差,确保图像符合人眼的视觉习惯。现有的自动白平衡通常由色温估计和色彩校正两个步骤组成[7]。

本文选择灰度世界法(Gray World, GW)作为色温估计,假设给定的一幅色彩变化很大的图像的R,G,B均值合成是一种普通的灰色值。一旦选择了一种合适的普通灰度值,色彩的亮度可采用Von Kries转换系数分别对三种颜色通道进行独立的增益调整[8], 每个通道的Von Kries增益系数表示如下:

r_gain =■g_gain =■b_gain =■ (20)

其中,WhiteR =WhiteG =WhiteB =255为参考白色值作为普通灰度值,R_max_avg, G_max_avg, B_max_avg分别为每个颜色通道最大值的均值。

获取增益系数统计信息后,便可利用下式对图像所有像素进行色彩的亮度调整[9]:

R■=r_gain×RG■=g_gain×GB■=b_gain×B (21)

图像的色彩信息主要包括亮度和色度,为了进一步调整色彩的色度,需要进行图像色度的统计分析。如图6所示,首先将图像划分为边缘背景和中央主体两个区域,分别为0和1区域。

对两个区域赋予不同的权重weighting n,然后计算整幅图像的R,G,B分量的均值:

硬件的角度是提供足够的色彩亮度, 而色度统计数据给3A软件,3A软件再根据不同环境去做调整。图像的色度定义如图7所示,根据hue_avg统计数值的不同范围,划分定义了图像的总体色彩效果,即红、绿、蓝和紫色四个区间,例如hue_avg取值在0~0.203125范围表示红色。

3.2.3 算法的统计模式

处理器执行自动曝光和自动白平衡算法的统计模式主要包括持续运行和用户触发模式。图8表示持续运行统计模式。如图8中的第一行,当每一帧均被处理而无跳跃帧时,首先第一帧执行自动曝光算法,第二、三帧分别用于自动白平衡的色彩亮度调整和色度估计,接下来便依此周期往复地执行算法操作。如图8中的第二行,若有帧跳跃发生,则在跳跃发生之后,重新恢复原先的执行顺序。例如第四、五帧被跳跃时,第六帧开始代替第四帧的自动曝光,然后重新按既定次序恢复运行。

按照持续运行的统计模式,自动曝光的图像亮度统计信息最终由下述加权均值决定,进而用于曝光参数调节,以实现自动曝光控制:

如图9所示,在用户触发的统计模式下,每次触发后只执行一次自动曝光算法操作以及自动白平衡的色彩亮度调整和色度估计。

4 结果分析

基于上述构架,用Verilog HDL设计了相应的数字图像处理器IP,并映射到Xilinx Virtex-4 LX100器件上,通过FPGA开发系统验证实现。在0.18um工艺节点下AHB总线的时钟可以到133MHz,处理器综合后的逻辑门数为125.4千门,总共调用24颗存储器,存储器的大小为等效283.2千门。采样图像由VGA格式的接口捕获,结合1/4英寸CMOS有源像素数字图像传感器Micron 360 (MT9V011)。随后Bayer原始数据可环回图像处理器予以返回输出。因此,Bayer原始图像数据可用于设计二阶补偿算法。

所提出的边缘保持CFA色彩插值算法与双线性插值算法[10]的比较如图10所示。双线性插值法由于其矩齿效应极易使图像边缘产生模糊。边缘插值算法利用像素间的梯度特性,一定程度上降低了图像边缘的失真,恢复后的图像具有良好的视觉效果,因此双线性插值法的PSNR和PESNR指标远低于边缘插值算法。图10显示了电子相机在ISO分辨率图表中的红色圆圈。我们观察到沿着红色圆圈中水平、垂直和对角线方向的插值图像的分辨率已经由算法获得了成功抑制。

5 结论

本文设计完成了一种图像信号处理器IP,并详细介绍了相应的系统构架。处理器的总线接口为AMBA AHB 2.0,作为IP模块可通过AMB上总线整合到SoC芯片。处理器IP主要的算法执行模块包括颜色插值、自动曝光和自动白平衡算法模块。颜色插值采用边缘保持的CFA插值方法,并用线缓冲器读入/写出图像数据,大大提高了数据的处理效率。另外,该算法在完成R,G,B颜色分量插补更新的同时,可以保持良好的边缘特性。自动曝光控制采用基于固定分区的亮度补偿方法,能够自动将图像的亮度调节至合适的目标范围。自动白平衡算法基于灰度世界法,首先在一帧图像中采用Von Kries系数对R,G,B通道进行独立的增益调整,在另一帧图像中进行色度估计,从而完成白平衡调节。最后用FPGA对设计作了验证实现。

参考文献

[1] 周荣政. 数码相机处理器设计及系统集成研究[D]. 复旦大学硕士学位论文, 2004

[2] Xue K, Williams A, Walowit E. An edge―restricted

(下转第57页)

spatial interpolation algorithm[J].J Electron Imag, 1992,1:152-161

[3] Wenmiao Lu,Yap-Peng Tan. Color Filter Array Demosaicking: New Method and Performance Measures[J]. IEEE Transaction on image processing. 2003, Vol. 12, Vol. 12 (No. 10) :P1194-1210 .

[4] 程永强, 谢克明.基于图像变化检测的CFA插值算法[J].太原理工大学学报, 2008 Vol.39 No.1

[5] SangHyun Park, GyuWon Kim, JaeWook Jeon. The method of auto exposure control for low-end digital camera. Advanced Communication Technology, 2009.

[6] 梁佳毅. 高性能数码相机自动曝光算法研究与实现[D]. 复旦大学硕士学位论文, 2008

[7] Gasparini F, Schettini R. Color Balancing of Digital Photos Using Simple Image Statistics [J]. Pattern Recognition, 2004, 37 (6):1201-1217

[8] 李阳. 自动白平衡算法的改进与实现[D]. 西安电子科技大学硕士学位论文, 2010

[9] 赵全友, 潘保昌. 改进的LOG边缘自动白平衡算法[J]. 计算机应用研究, 2009, 26(2):

[10] Fuentes,I.O.H.; Bravo-Zanoguera, M.E.; Yanez, G.G.. FPGA Implementation of the Bilinear Interpolation Algorithm for Image Demosaicking.Electrical Communications and Computers, 2009.

作者简介

姚益武,博士研究生,主要研究方向为SoC集成电路设计;

陈宏铭,博士研究生,主要研究方向为SoC集成电路设计;

程玉华,教授,博士生导师,主要研究方向为SoC集成电路设计。

上一篇:一种具有过流保护功能的振荡器设计 下一篇:轮调数显收音机系统设计要素