摘要
红外成像系统获取的灰度图像动态范围大、对比度低,难以直接被人眼有效感知。伪彩色处理将单通道灰度信息映射为彩色空间,显著增强目标辨识度和场景理解能力。本报告系统调研了灰度-彩色映射典型红外伪彩算法。在此基础上,探讨了基于FPGA的实时伪彩处理实现途径,研究表明,“自适应直方图均衡+颜色查找表映射”的结构在资源消耗、实时性和增强效果之间取得了最佳平衡。
- 引言
红外焦平面阵列输出的是与场景辐射强度成正比的灰度图像(通常为14 bit甚至16 bit)。人眼对灰度的分辨能力仅有几十级,而对色彩的分辨力可达上千级。伪彩色(Pseudo-color)编码通过建立灰度-色彩映射函数,将单通道红外数据转换为三维RGB或YCbCr彩色图像。FPGA凭借其大规模并行与流水线处理能力,成为伪彩算法硬件加速的理想平台。本文将从算法和硬件实现两个维度展开调研。 - 伪彩色介绍
彩色图像一般由三维向量表示,并且最常用的是使用8位表示每个成分的光强,范围从0(无光)到255(最强光),形成一个24位的色彩图像。 - 伪彩色图像处理
伪彩色图像处理指按照特定规则对不明显或者不可见的图像重建为彩色效果的图像。伪彩色图像处理应用在两个方面,一个是把多光谱图像的不可见成分映射到可见光谱区域,另一个就是把灰度图像映射为彩色图像。
多波段融合伪彩的方法是当系统同时获取中波、长波红外或红外与微光图像时,可将不同波段的灰度图像映射到不同的色彩通道。例如中波红外→R,长波红外→G,微光→B,直接产生物理意义的彩色融合图像。把灰度图像映射为彩色图像处理的方法一般有三种:灰度分层(密度分层)、灰度级彩色变换和频域变换。 - 灰度分层法
是最简单的伪色彩处理方法,将不同的灰度级赋予不同的颜色实现图像的伪色彩处理。
几何解释就是根据截面分配两种颜色。令[0,L-1]表示灰度级,l0表示黑色,lL-1表示白色,依据灰度值l1,l2,l3…lp构造P个平面,将灰度值分为P+1个区间,为每个区间赋一种颜色。
图 2
缺点是色彩生硬,且灰度级分层较多时,算法非常繁琐。
- 灰度级色彩变换
最常见的伪色彩处理方法,建立图像的灰度级与颜色的一种映射关系,将灰度图变为具有多种颜色渐变的连续色彩图。
伪彩色编码就是将一组数据从灰度级到RGB三通道颜色的函数映射。
色标(色阶)设计就是在RGB颜色立方体中确定一条颜色路径,再从该路径中选取指定数目的色彩组成彩色序列。
典型的色标是彩虹码,灰度由低到高依次对应蓝、青、绿、黄、红,红色表示低温,蓝色表示高温。
相当于RGB三个分量的编码由5段线性函数表示:
o 黑-蓝段:( R=0, G=0 ) B = 0→1
o 蓝-青段:( R=0, G=1 ) G = 0→1
o 青-绿段:( R=0, G=1 ) B = 1→0
o 绿-黄段:( G=1, B=0 ) R = 1→0
o 黄-红段:( R=1, B=0 ) G = 1→0
彩虹码存在热目标醒目,但人眼感知亮度不均匀、蓝色区域细节缺失等问题。
热金属码模拟加热金属的颜色变化,灰度由低到高依次黑→红→黄→白。
分段为低温物体(黑-红段)、中温物体(红-黄段)、高温物体(黄-白段)。热金属码温暖区域视觉突出,适合人物体温检测。
以上固定函数映射的编码方式优势在于固定映射消耗零计算量,缺陷是对场景自适应性差,当红外灰度分布集中时伪彩层次不丰富。
为解决固定映射适应性差的问题,在灰度-彩色变换前引入自动增益控制或直方图调整。
基于直方图均衡化的伪彩编码
先对输入红外图像的灰度直方图进行均衡化,将均衡化后的灰度 送入固定的颜色查找表。因为经过均衡,各个彩色区间得到更均匀的像素占用,伪彩图像的色彩层次与信息量显著提升。进一步可采用平台直方图均衡化(Plateau HE),通过设定平台阈值抑制背景过度增强,克服经典HE噪声过增强的缺点。
自适应线性拉伸+伪彩映射
实时统计图像的最大/最小灰度或均值和标准差,按一定比例裁剪后线性映射到8 bit,再进行颜色映射。此方式保持帧间色彩的相对一致性,适合显示随时间变化的温度分布。
基于空间频率的伪彩增强
利用边缘信息或局部方差调制色彩饱和度、色调。例如将红外图像作为亮度通道 ( L ),梯度强度调制饱和度 ( S ),色调 ( H ) 按灰度确定,再转换回RGB。该方法可突出边缘,但计算复杂度较高,多用于后处理软件。
- 基于FPGA的实现途径
FPGA实现需满足实时像素时钟下的连续数据流处理,延迟通常控制在一帧以内。输入为16位灰度数据,输出为24位RGB视频流。
LUT模块是伪彩转换的运算核心。根据灰度位宽和资源权衡,有两种实现方式:
3.1全索引LUT
输入16位灰度直接索引RGB值,地址深度为216=65536,数据位宽为24bit(R/G/B各8bit)。将 65536×24 bit=192KB的映射表预先存入Block RAM。以Xilinx 7系列为例,每个36Kb BRAM只能存65536×1bit,需消耗24个36Kb BRAM,总资源864Kb,占芯片BRAM资源开销较大。采用简单只读ROM或双端口RAM,一端口用于像素查询,另一端口通过AXI总线动态输出。一个时钟周期输出结果,零计算延迟;任意映射曲线均可支持。
3.2直方图均衡 + RGB LUT
先用直方图均衡将16位灰度映射为8位,再用8位地址查彩色LUT。65536深度、8位宽,需要 8个36Kb BRAM将16bit灰度图映射为8bit灰度图。再将8位灰度图索引RGB值,256深度、24位宽,可以用1个36Kb BRAM配置,或者用分布式RAM(LUTRAM)实现,几乎不占额外BRAM。同样可以采用简单只读ROM或双端口RAM,一端口用于像素查询,另一端口通过AXI总线动态输出。该算法实现的核心模块包括:灰度值统计模块、颜色查找表模块。