基于FPGA的实时Bayer解马赛克算法与实现

2022-04-25 07:36张泽宇伍凌帆杨一帆李旭亮
应用光学 2022年2期
关键词:马赛克复原插值

张泽宇,张 弘,伍凌帆,杨一帆,李旭亮

(北京航空航天大学,北京 102206)

引言

目前绝大多数的消费级图像采集设备采用CMOS/CCD 作为前端传感器,通过A/D 模块将采集到的模拟量转化为数字信号。由于彩色图像需要红、绿、蓝3 颜色分量的信息,出于对成本和曝光时间等考虑,消费级产品多采用彩色滤波阵列CFA(color filter array)的方法,将每个像素点的红、绿、蓝颜色分量压缩,仅保留单个颜色通道信息。其中Bayer 阵列[1]是最常见的一种彩色滤波阵列,其特点在于阵列的绿色分量2 倍于蓝色或红色分量。

后端图像处理系统通过解马赛克算法将Bayer阵列复原为红、绿、蓝3 色阵列,过程如图1所示。利用目标位置原有颜色值以及周围位置的其他颜色分量,恢复目标位置缺失的颜色。算法性能影响了图像复原得到的色彩真实性,进而影响了彩色图像的有效分辨率。在解马赛克的过程中不可避免地引入人为设计的插值像素,从而导致颜色与真实场景不相符的情况发生,主要问题包括拉链效应、伪彩色和摩尔纹效应[2]3 大类问题。图2 展示了典型场景下,由Bayer 解马赛克算法引入的拉链效应(左)、伪彩色(中)和摩尔纹(右)现象。

目前Bayer 阵列解马赛克算法已经过了长达30 余年的发展,现存在的解马赛克算法大致可分为3 类。第1 类是模板线性插值方法[3],这种方法的特点在于整幅图像采用相同的插值模板进行计算,算法复杂度低、输出延迟小。常见的方法包括最近邻插值方法、双线性插值法等。最初的算法设计中,未知的颜色分量仅通过周围的同颜色分量来插值复原,但是由于蓝色、红色分量信息不足,复原效果不佳,引入伪彩色问题。随着色比色差定律[4]的提出,算法可以通过更加丰富的绿色信息帮助复原蓝色和红色的颜色信息,这类算法在图像平滑区域实现了很好的效果,但是在图像纹理丰富的区域难以维持锐利的边缘,存在拉链效应等复原问题。

第2 类是基于局部梯度反向的线性插值方法[5-7],这种算法的提出是为了提升第1 类方法在图像纹理丰富区域的复原效果。选择垂直于图像梯度的方向进行插值复原,可以有效地减少拉链效应等复原问题。这类算法的性能受制于局部梯度信息的重建精度以及后续的插值方向选择,高效的算法需要权衡梯度算法的复杂度和色彩复原效果。目前广泛应用的是先计算候选颜色,再确定梯度方向的“后验”方法[6-7]。该类方法首先计算出不同梯度方向的候选绿色分量,然后利用自然图像中色差沿着图像边缘的方向更加平滑的特点[8]确定边缘方向,进一步复原蓝色和红色分量。算法只需要5~7 行的图像缓存就可以进行瀑布式运算,非常适合基于FPGA 的开发,适用于实时性要求高的边缘计算场景,如自动驾驶系统中的摄像组件、高灵敏度光电探测设备等。

第3 类是基于频域分析的解马赛克算法[9-11],该类方法将Bayer 阵列看作是原始的红、绿、蓝3 色阵列通过采样得到,在频域中对应特定的频谱调制,而图像中纹理丰富的区域即对应频域中的高频部分。研究人员根据这一特点,设计特定的频域滤波方法解决纹理丰富区域的图像复原效果。方法[9]分析了Bayer 阵列的频域特征,通过设计自适应滤波器的方法来迭代得到最后的红、绿、蓝3 色阵列。计算过程需要对完整的图像进行缓存,算法延迟时间相较于第2 类方法慢2~3 个数量级。该类方法对图像高频区域的复原效果更好,因而适用于专业相片复原精修、视频后期处理等非实时场景的应用。

本文结合实际应用,提出一种低延迟、高复原质量的Bayer 解马赛克算法,并完成FPGA 硬件算法的实现。实验结果表明,本文算法可在FPGA 中实时运行,与相同算法复杂度、低输出延迟的算法相比,复原出彩色图像的质量更高。

1 系统设计方案

如图3所示,本方案采用Xilinx 公司的FPGA作为主芯片,实现了将前端CMOS 采集的图像信息通过数字图像信号处理(ISP)后,最后通过视频编码方式输出的功能。Bayer 解马赛克算法作为图像信号处理中最重要的环节之一,部署在FPGA内部。本章节重点讲述系统的硬件系统设计方案以及基于FPGA 的实时数字图像信号处理模块的功能化设计。

硬件系统包括供电模块、时钟及复位模块、DDR3 缓存模块、视频编码模块、FPGA 主芯片以及前端CMOS 芯片。FPGA 作为数字图像信号处理主芯片[12],不仅完成对CMOS 芯片和其他模块的配置工作,同时负责完整的数字图像信号处理功能(包括解马赛克算法的实现);图像数据缓存采用DDR3 芯片;视频编解模块将FPGA 的输出视频流编码为常见的视频格式。

系统的核心功能都部署在主芯片FPGA 上,根据模块的功能不同,采用FPGA 内部的MicroBlaze软核和Verilog HDL 硬件语言搭建的功能化模块相结合的方案设计了整体的FPGA 内部功能框架。MicroBlaze 软核实现了包括CMOS 芯片寄存器的配置、控制CMOS 自动曝光和自动增益等功能。模块通过C 语言实现,功能特点在于模块参数需要频繁修改、涉及复杂的代数运算以及实时性要求较低等。其他的数字图像处理功能,包括串行数据解码、坏点补偿、解马赛克模块、Bayer去噪模块、图像较正等,均通过Verilog HDL 硬件语言完成模块化的设计。整体视频数据采用串行流式的方案,从CMOS 的原始输出到最终的制式视频编码完成,这保证了整体系统具备最低的视频输出延迟。FPGA 功能框架设计方案如图4所示。

2 实时Bayer 解马赛克算法的设计与实现

本章重点描述基于FPGA的实时Bayer解马赛克算法的解压缩过程。本系统采用了改进的基于局部梯度方向的线性插值算法。首先,算法分别计算出沿水平、垂直方向和平滑的绿色插值作为候选的绿色分量;在复原了绿色分量信息后,可以利用自然图像中色差沿着图像边缘的方向更加平滑的特点,将原有的红色或蓝色分量与候选绿色分量分别计算色差,色差较小的候选方向即估计为该处的边缘梯度方向;最后,根据估计出的局部梯度方向信息,在梯度的垂直方向上进行插值计算,复原红色和蓝色分量。

系统根据FPGA 硬件电路的特点,设计了3 大模块,即行列缓存模块、Bayer 去噪声模块和解马赛克模块。行列缓存模块利用FPGA 内部Block RAM 进行数据的行缓存,通过6×FIFO(first input first output)行缓存模块,得到总共7 行的图像数据。再利用移位寄存器进行列缓存,总共利用7×10 的图像矩阵完成算法的功能。Bayer 去噪声模块是为了解决CMOS 中存在的坏点和噪声点问题,由于该噪声经过解马赛克算法后会扩散到更大的区域,因此在解马赛克模块之前进行,这里采用3×3 中值滤波模块,具体不进行详述。解马赛克模块完成了包括候选绿色分量的方向插值、局部梯度方向估计和红、蓝色分量复原的工作。整体算法的硬件运算流程如图5所示,流程重点展示了图像数据的瀑式流水处理过程。详细步骤见章节2.1、2.2 和2.3。

2.1 候选绿色分量的方向插值方法

候选绿色分量的方向插值方法如图6所示。由于在Bayer 阵列的排布中,绿色分量的采样率是红色或蓝色分量的2 倍,绿色分量的复原效果要好于红色或蓝色分量[13]。因此往往先复原绿色分量,因为这时还未计算出该位置的梯度方向,分别计算沿水平、垂直方向以及平滑插值得到候选绿色分量GH、GV和GS。

对于丢失绿色分量的位置而言,无论该位置原像素是红色还是蓝色,绿色分量在四周的分布情况是一致的。以当前位置为蓝色像素为例,GH、GV和GS的计算方法如(1)~(3)式所示:

2.2 局部梯度方向的估计

采用局部梯度方向估计的方法是为了解决单一位置梯度方向估计存在较大误差的问题,本文为了平衡算法的复杂度和梯度估计精度,采用3×3 邻域的梯度信息来估计梯度的方向。综合3×3 邻域内各像素位置的梯度方向[14],可以有效地解决图像纹理丰富区域的梯度方向杂乱的问题,从杂乱的梯度方向中定位到主梯度方向。根据当前位置丢失的颜色分量信息的不同,需要通过两种不同的梯度算子来计算沿水平和垂直方向的梯度值。局部梯度方向估计的算法流程总结为4 步:

1)对3×3 邻域内的每个位置计算水平和垂直方向梯度算子;

2)比较两个方向的算子大小,用标志位0 或1 作标记;

3)统计局部3×3 邻域内各个位置的标志位,求和得到总梯度算子;

4)对总梯度算子设置阈值,判断该位置最可能的梯度方向。

梯度算子1:对于丢失绿色分量的位置,采用梯度算子1 计算该处的梯度值。以中心位置蓝色像素为例,如图7(a)所示,算子利用蓝色分量的二阶梯度加上绿色分量的一阶梯度分别计算水平和垂直方向的梯度算子值,通过(4)、(5)式计算出水

GradHGradV平梯度值和垂直梯度值:(6)、(7)式计算出水平梯度值GradH和垂直梯度值GradV。

梯度算子2:对于丢失红色或蓝色分量的位置,采用梯度算子2 计算该处的梯度值,如图7(b)所示,算子利用绿色分量的一阶梯度和二阶梯度分别计算水平和垂直方向的梯度算子值,通过

通过梯度算子1 和梯度算子2 计算出3×3 邻域内各个位置的水平和垂直方向梯度值后,用标志位Flag 标记各个位置的梯度方向。当GradH>GradV时,判断该位置梯度方向为水平方向,标志位记为1;当GradH<GradV时,判断该位置梯度方向为垂直方向,标志位记为0。综合9 个位置的梯度信息,按照(8)式估计当前位置的局部梯度信息。

2.3 红、蓝色分量的复原方法

经过候选绿色分量和局部梯度方向的计算,已经具备了完整复原红、绿、蓝3 层阵列的条件。在对红色和蓝色分量进行插值时,采用的基本思想是基于色比色差的插值算法。利用色差思想与色比恒定的思想是一致的,它认为在图片的小平滑区域内,色差是恒定的[4],即假设采样点(i,j)附近的一个采样点(m,n),色差满足(9)式:

本文将插值方法按照采样点颜色分量的不同分为4 种模式,颜色分量排列如图8(a)~8(d)所示。当采样点颜色为绿色时,Bayer 阵列的分布如图8(a)、8(b)所示,算法需要插值产生红色和蓝色分量,差别在于蓝色分量和红色分量在水平和垂直方向的分布不同,可以采用类似的插值算法;当采样点颜色为红色或蓝色时,Bayer 阵列的分布如图8(c)、8(d)所示,算法需要插值产生绿色和红(蓝)色分量,图8(c)、8(d)模块差别在于采样点的颜色分量为红色或蓝色,两种模式下的插值算法策略是一样的。

以图8(a)模式为例,利用(10)~(11)式的插值算法来复原红色和蓝色分量。

以图8(c)模式为例,利用(12)~(13)式的插值算法来复原红色和绿色分量。

3 实验结果分析

为了对本文的解马赛克算法效果进行准确评价,我们在广泛使用的柯达图片数据集上进行了定量测量。该数据集包含24 张真彩色图片,如图9所示。实验过程中采用硬件仿真的方法,以保证真实的实验效果。将原始柯达图片通过Matlab程序采样为Bayer 阵列,通过ModelSim 工具读取RAW 格式的Bayer 图片,经FPGA 综合生成的解马赛克算法模块后输出彩色的RAW 数据,再用Matlab工具将RAW 格式数据转换成TIF 格式图片,进行后续的指标评价处理。

本文采用了评价去马赛克重建图像质量最常用的指标峰值信噪比(peak signal- to-noise ratio,PSNR),定义如(14)~(15)式。

式中:Io和Id分别代表原始图像和解马赛克后生成的图像;图像宽度为W像素,高度为H像素。PSNR的值越大代表算法复原出的图像质量越高。

实验对比了双线性插值算法、实时彩色复原算法[15]和本文算法,表1 展示了代表性图片01.tig、07.tif、19.tif 和24.tif 图片上算法复原图片的PSNR结果以及数据集上的平均PSNR 值。

表1 3 种算法在柯达数据集上的PSNR 值Table 1 PSNR of three algorithms on Kodak data set dB

对数据集中的“灯塔”图片进行了定性的分析,图10 展示了经典场景灯塔下的Bayer 解马赛克效果。其中,图左侧展示的是全图效果,右侧小图是放大的局部细节效果。可以看出,本文提出的方法在纹理复杂的栅栏区域色彩复原效果有了很大程度的改善,伪彩色和拉链效应的现象得到了明显的抑制。

除此之外,本系统还针对实际应用中的夜晚星空场景进行了测试,结果如图11所示。其中,左侧是局部放大的图像复原效果,右侧是整幅图像的复原图。可以看出,本文提出的方法在复杂的星空背景下,有效地减小了解码过程中引入的伪彩色噪点,保证了星点位置采集的有效性。

本文算法运行在Xilinx 公司的XC7A50T 硬件平台上,在输入视频图像的分辨率和帧频为1 080P@30 Hz、像素位宽为10 bit 的情况下,试验测试了Bayer 解马塞克模块在FPGA 上的资源占用率和实际运行速度,资源占用结果如表2所示,运行时间为207.2 μs。

表2 FPGA 资源占用率Table 2 FPGA resource occupancy rate

4 结论

本文介绍了一种利用局部梯度方向进行Bayer解马赛克的算法及其硬件实现。首先,对算法运行的硬件平台做了简要的概述,展示了算法在数字图像处理系统中的定位和意义;其次,针对FPGA硬件平台的特点,阐述了解马赛克算法在FPGA 中的模块化硬件设计方案和数据流走向,利用特定的数据流水和硬件架构设计有效地降低了硬件开销,保证了系统的低延迟性能;最后,详细地介绍了算法的程序流程和具体实现,通过局部特征的精确提取保证了图像复原的效果。实验结果表明,本文提出的解马赛克系统在保证微秒级视频输出延迟的条件下,提升了对图像复杂纹理区域(如密集的条纹状或点状纹理区域等等)的复原效果,保证了图像的有效分辨率,对于实时高清视频采集系统的搭建有重要的应用价值。

猜你喜欢
马赛克复原插值
温陈华:唐宋甲胄复原第一人
滑动式Lagrange与Chebyshev插值方法对BDS精密星历内插及其精度分析
城中村的马赛克
AI黑科技真的能去马赛克吗
浅谈曜变建盏的复原工艺
毓庆宫惇本殿明间原状陈列的复原
基于pade逼近的重心有理混合插值新方法
混合重叠网格插值方法的改进及应用
《马赛克》
基于混合并行的Kriging插值算法研究