韩宇 袁素春 张建华 郑小松 刘聪聪 师勇 张朗 武小栋
(西安空间无线电技术研究所,西安 710071)
随着卫星通信技术的不断发展,为了能给用户提供更宽的拍摄范围和更高的图像质量,星载相机的分辨率和处理速度都在不断提高。高分七号卫星是一颗高精度民用测绘卫星,卫星轨道高度约500 km,用于实现1∶10 000比例尺测绘。星上装载了双线阵测绘相机(包括前视相机和后视相机),通过对同一地区不同角度的观测,获得地区的平面、高程、地物属性等信息,用于测绘行业的立体测图、资源及环境遥感应用。卫星上装载的载荷较多,输入原始码数据率高,图像数据保真度要求高,同时具备灵活的成像和数据传输能力,是目前对地观测卫星数据率最高的卫星之一。解决原始码数据率与星地下传通道速率的矛盾,是卫星在轨应用的重要技术之一。出色的原始图像压缩能力及较小的图像质量损失,也是衡量卫星性能的重要技术指标。
JPEG-LS算法主要是对静态连续色调图像进行无损或近无损压缩,于1998年正式公布,其核心算法是LOCO-I(Low Complexity Lossless Compression for Images)算法。凭借优越的压缩性能和较小的硬件实现复杂度,JPEG-LS无损压缩取得了广泛的应用。然而现有文献中对JPEG-LS近无损压缩模式的硬件实现研究并不多,在工程应用中也仍然主要采用JPEG-LS无损压缩模式,其主要原因是JPEG-LS在近无损压缩模式下硬件实现复杂度增加。在文献[1]中,需要在编码过程中对输入图像进行片外缓存,不仅增加了系统功耗,而且占用较大的板级空间,增加成本;在文献[2]中,作者提出使用一种新的重建值计算方法,能够在一个时钟周期内计算得到像素重建值,但是这种方法改变了JPEG-LS算法标准,给编码性能带来下降,而且会增加解码的难度;在文献[3]中提出的硬件结构中前后两个相邻像素的处理相差9个时钟周期,这样使得编码效率大大降低。
针对当前研究现状,文章提出并设计了一种多路并行图像实时压缩系统,该系统基于JPEG-LS算法,FPGA作为逻辑控制核心,可以灵活选择图像缓存,并结合算法和硬件特点,降低了编码器的逻辑资源开销,实现了一种全新的JPEG-LS无损及近无损压缩编码器硬件结构,提出了一种新的JPEG-LS动态码率控制算法,与现有技术相比,具有编码效率高,资源占用少,系统功耗低,使用灵活等优点。
高分七号卫星配置1台数据处理器实现星上图像压缩功能,压缩算法选用静态图像压缩标准JPEG-LS。
数据处理器包含4块图像处理单元,完成3片后视CCD与4片前视CCD图像的压缩功能。其中,3块图像处理单元完成后视全色与后视多光谱图像压缩,1块图像处理单元完成前视全色图像压缩。其中,后视多光谱从图像处理单元右路FPGA经过板内互连线送至图像处理单元左路FPGA进行处理。
数据处理器与相机接口关系见如图1所示。
图1 数据处理器与相机连接关系示意图Fig.1 Diagram of connection with camera equipment
图像处理单元的功能有:接收前视相机、后视相机输出的原始图像数据,包括相机辅助数据和图像数据,其中相机辅助数据不压缩,仅对图像数据进行压缩,将压缩后的码流与相应的辅助数据进行复接,并进行压缩码流一级协议编排。
本文中压缩系统由Xilinx公司的FPGA作为图像分块处理、图像压缩、多路并行轮循调度的核心处理器,外挂存储器作为压缩码流的缓存器(使用外挂存储器作为存储单元片内乒乓缓存压缩码流数据,以达到实时缓存压缩码流的目的),及多个JPEG-LS压缩核组成。以后视全色为例,系统的原理框图见图2。该系统可以实现对单路或多路宽幅图像的实时无损或近无损压缩。
图2 后视全色压缩系统FPGA实现示意图Fig.2 Diagrammatic sketch of compression system with FPGA
JPEG-LS标准[4-5]是基于HP实验室提出的LOCO-I算法,该算法具有实现复杂度低,保真度高的优点,易于硬件实现。而且不需要外部存储器,有效节约了成本,因而广泛应用于航空航天、数字相机、无线通讯以及医学成像等领域。JPEG-LS的主要特点是:不对图像进行变换,只利用预测与Golomb编码。
JPEG-LS静态图像压缩标准规定的无损和近无损编码处理基于差分预测编码技术,采用Golomb编码对预测值与实际值的误差进行编码,同时建立了上下文模型对编码参数进行修正,具体的算法实现过程如图3所示。
图3 JPEG-LS算法流程图Fig.3 Algorithm flowchart of JPEG-LS
在JPEG-LS标准中,编码模型基于所谓“上下文”的概念。在上下文建模时,对每一个采样值都要以其相邻的一小部分采样为条件。如图4是当前采样x及其相邻采样位置的关系示意图。根据在a、b、c和d采样的重建值,该上下文首先决定采样x是否采用正常模式或游长模式进行编码:
根据上下文关系预计,abs(Di)=0(在无损编码时),或者abs(Di)<= Near(在近无损编码时),那么就选择游长模式,反之则选择正常模式。Near参数是JPEG-LS算法标准中的失真量化参数。
图4 JPEG-LS的上下文模型Fig.4 Context model of JPEG-LS
在正常模式下,如图5所示,当上下文决定后就紧接着一个预测过程,当前采样点的实际值与预测值之差即为预测误差,得到预测误差之后被一个由Golomb编码算法推导的过程进行自适应分类编码。
图5 正常模式编码Fig.5 Normal mode coding
如图6,在游长模式下,编码器从x开始搜索与a的重建值具有相同值的连续采样序列(在近无损编码时,与a的误差在指定的界限内)。该游长无论是遇到一个具有不同值的采样(在近无损编码时,与a的误差超出指定的界限),或者遇到当前行的结尾都将终止,此时要接着进行游长终止采样编码,对于前一种结束方式,先进行差值处理,再对所得的误差进行误差自适应编码;后一种结束方式编码更加简单,直接对游长进行结束编码即可。
图6 游长编码Fig.6 Length coding
由于FPGA内部逻辑与缓存资源有限,JPEG-LS压缩核对输入图像的最大尺寸有着严格的限制。相机后视全色幅宽为6144像元,前视全色幅宽8192像元,多光谱幅宽12 288像元,均大于单个压缩核所能处理的极限。而文章所介绍的多个JPEG-LS压缩核并行联合处理的工作方式可解决宽幅输入图像的压缩问题。
对于单路宽幅输入图像,一般按照图像行等分、块最大的原则进行输入图像的分块处理,将分出的小块图像分别送给多个JPEG-LS压缩核进行压缩处理,再将压缩后的码流按照一定的协议顺序进行排列依次送给固存、星地通道、解压缩设备,解压缩设备根据协议顺序便可将不同JPEG-LS压缩核压缩的码流进行拼接,从而恢复出解压缩的宽幅图。
图像分块处理的方式是灵活可变的,对于多路图像同时输入的情况,根据图像路数以及单路图像的输入数据率可以计算出输入的总数据率,只要输入的总数据率满足多个JPEG-LS压缩核的总处理能力要求,本系统可以实时压缩处理同时输入的多路图像数据。
以后视全色的输入图像为例,一幅图像单元图像行宽为6144像素,高为64行,按每帧图像768×64进行分块,一幅图像可以被分为8块进行压缩。前视全色与后视多光谱分块方式与后视全色类似,本系统所采用的图像分块处理方式如图7所示。
压缩系统具备支持多路CCD独立工作的能力,相机不同的CCD进行合路压缩软件设计的关键在于图像缓存功能前增加了同步化处理模块,如图8所示。同步处理模块采用FPGA内部FIFO资源,分别对图像数据进行缓存处理,CCD的时钟、门控、数据分别作为FIFO_CCD的输入时钟、写使能、数据。FIFO的读时钟采用同一个本地时钟,通过对2片CCD的门控到来时机进行比较选择产生的使能信号,作为两个FIFO的共同的读使能信号。经过同步处理之后,异步的多路CCD输入实现完全同步,输送给下一级进行处理。
当不同路的CCD图像某一路出现没有输入时,同步处理模块可以自动识别出该状态,根据多路间最大延迟进行判断,当超出最大延迟时,判断为该路无输入,此时同步处理模块自动产生相关驱动信号,保证正常输入的一路可以正常工作,提高了软件的容错性。
图7 图像缓存及分帧示意图Fig. 7 Diagrammatic sketch of image partitioning
图8 图像同步处理功能框图Fig.8 Functional diagram of image synchronization process
本文介绍的基于JPEG-LS算法的图像压缩系统,为了保证系统的实时处理能力,必须调度多个JPEG-LS压缩核并行工作。由于JPEG-LS是基于像素的图像压缩算法,当图像数据到来时以行为周期,在进行压缩前需要对行进行分割处理,把相机一行分为多个图像块行并进入FPGA内部缓存,再采用统一的判读条件进行缓存读取,保证进入多个压缩核的图像数据完全同步。该方法灵活可变,可以适用于任意不同幅宽的图像,仅需要通过输入像素速率调整参数即可。
由于多个并行的压缩核同时工作,压缩码流会以并行输出的方式进入缓存芯片,为了保证码流格式完整性及协议编排,需要对多个压缩核的输出码流进行轮循调度存入双倍速率同步动态随机存储器(DDR)缓存芯片。以后视全色为例,每个CCD采用8路并行的JPEG-LS压缩核进行压缩,由于图像不同图像块的纹理不同,各压缩核输出压缩码流的时机也完全不同,压缩码流输出后进入FPGA内部缓存进行格式转换,当某一路的压缩码流满足写入DDR缓存芯片条件时,产生DDR写请求信号,先入先出(FIFO)收到写请求信号时,输出数据至DDR,即进行DDR写操作。由于FPGA的实时计算特性,保证在任意时刻均对8路压缩核的码流进行实时自适应判决。该自适应轮循的方法相较于顺序轮循,可以适用同一幅图中不同图像块纹理差异过大的情况,且可以更高效的利用DDR接口带宽,提高系统处理能力。
图9是多路并行轮循调度示意图,所示意的是8个JPEG-LS压缩核作为一组进行并行轮循调度的应用情况。
图9 并行轮循调度示意图Fig.9 Parallel round robin scheduling diagram
JPEG-LS动态码率控制算法一般采用的算法是将图像分为若干个小码块,每压缩完一个码块,就会统计实际码率和目标码率之间的偏差,并根据码率偏差来调节下一个码块所对应的失真量化参数Near的值,各并行的压缩核独立进行运算,使实际码率不断逼近目标码率。
文章压缩系统采用了一种改进的JPEG-LS码率控制算法:将图像按压缩核个数进行分块,多路并行的压缩核每压缩完一个码块,根据当前码率偏差统一调整失真量化参数Near值,来控制下一个码块的输出码率。本算法的核心有两点:①连续调整失真量化参数Near,每1024行对码块基准逼近值进行更新;②多路并行压缩核参数Near统一更新;
对于一般图像,压缩比控制函数可近似为线性函数,设当前压缩比为Ccr,压缩比控制因子为Q,k、b为控制系数,则
Ccr=k×Q+b
(1)
其中,为了使Ccr接近目标压缩比Ocr,我们需要对Q进行动态调整,i时刻Q的值为
Q(i)=Q(i-1)+ΔQ(i)
(2)
根据最陡下降法,ΔQ(i)的模型为
(3)
式中:Lr为学习率,为正数;E为当前压缩比Lr与目标压缩比Ocr的偏差量,可以表示为
E=(Ocr-Ccr)2
(4)
将E的函数代入式(4),可得
(5)
由式(1)可知,Ccr是Q的线性函数,故(5)为
ΔQ(i)=α×(Ocr-Ccr),α>0
(6)
将式(6)代入式(2),可得
Q(i)=Q(i-1)+α×(Ocr-Ccr),α>0
(7)
式(7)即为最终的码率控制的数学模型,在JPEG-LS的码率控制算法中,控制因子为Nnear,α为步长系数,因此Near值调整的数学模型为
Nnear(i)=Nnear(i-1)+α×(Ocr-Ccr),α>0
(8)
由式(8)可知,当当前压缩比Ccr大于目标压缩比Ocr时,即Ccr-Ocr<0时,Nnear的取值要减小一个步长α,反之,当当前压缩比Ccr小于目标压缩比Ocr时,即Ccr-Ocr>0时,Nnear的取值要增大一个步长α,这一点与实际意义相符。
一般情况下,对于连续扫描的图像,相邻的图像块之间的纹理具有很强的相关性,也就是说,图像特征很相近,如果要求输出固定的目标码率,那么对应的调整因子Near值也必定很相近,因此,码率调整的过程,即是跟踪搜索与图像特征相匹配的调整因子的过程,当算法收敛之后,调整因子应该是在一个恒定的均值附近上下抖动,进行微小的调整,相反,如果调整算法中Near值跳动幅值很大,说明该算法并没有跟踪上图像内容的变化,即没有收敛。因此,从理论上讲,码率控制的调整步长不宜太大。
码率控制算法收敛后,Near值将在很小的范围内进行波动,输出的码率也相应趋于稳定,但是当遇到图像中有纹理突变时,比如一片海域之后出现的海岸城市,由于城市的图像纹理信息量远远大于海域,因此对于纹理处于突变区的图像块,其参数Near值处于过渡调整时期,导致当前图像块的输出压缩比不能满足要求值,为了解决这个问题,我们提出了连续调整码率的策略,当实时压缩比出现欠调或过调状态时,通过后续图像块的反相补偿,使得一段时间之内的平均输出码率快速收敛于要求值。
本文所采用的图像压缩系统具备多项技术特点,可以适用不同卫星不同载荷类型。
当相机图像输入速率匹配JPEG-LS压缩核处理能力,但图像路数较多或幅宽较宽时,可以采用增加图像缓存芯片的方案,缓存芯片进行图像块数据缓存及调度,如图10(a)所示,该方案以图像块为单元送至JPEG-LS压缩核。
当相机图像输入速率匹配JPEG-LS压缩核处理能力,图像路数为单路或图像幅宽较小时,可以采用FPGA内部缓存,节省器件资源,这是因为JPEG-LS是基于像素的压缩算法,内部缓存仅需缓存一行图像即可向压缩核输入数据,如图10(b)所示,该方案以图像行为单元送至JPEG-LS压缩核。
图10 图像缓存机制Fig.10 Mechanism of image cache storage
该方法灵活可变,适用不同的应用场景,可以节约硬件成本。片内缓存机制逻辑控制简单,采用FPGA内部资源即可完成图像缓存功能,去掉了外部芯片控制逻辑,系统资源占用率降低约10%,资源占用对比情况见表1。
表1 资源占用率对比Table 1 Resource utilization comparison
JPEG-LS码率控制问题,国内外诸多学者进行了相应的研究,并提出了一系列码率控制算法。其中比较典型的有文献[6]提出的基于视觉感知与内容自适应的码率控制算法;文献[7]提出的基于段的码率控制算法;文献[8]提出的开环码率控制算法;文献[9]提出的高比特率下的JPEG-LS码率控制算法;文献[10]提出的JPEG-LS动态码率控制方法等。这些码率控制算法,主要是根据码率和失真量化参数Near的关系进行码率控制。在压缩过程中,根据当前码率偏差实时调节Near值,从而形成了一种负反馈的调节方式,使得码率最终趋于收敛。但是这些算法大多没有深入分析JPEG-LS图像压缩标准中码率和Near的精确关系,只是根据一种近似的线性关系来通过码率偏差调节Near值,导致码率收敛速度不够迅速,且没有考虑实际应用中多路并行压缩时的码率控制。
本文码率控制算法,可以根据当前码率偏差统一调整失真量化参数Near值,来控制下一个码块的输出码率,使得更快的逼近目标码率,多路并行压缩核统一进行参数更新,相较其它算法可以提高图像视觉的整体主观感受,提高整体的图像质量。
图11是对一幅11比特遥感图像进行压缩后的结果,图中的红色曲线表示从开始到当前行的平均输出码率,蓝色曲线表示当前块的在线输出码率,从图11中可以看出,Current CR在算法收敛后在4倍压缩曲线附近有微小的上下浮动,但Average CR逼近于4倍压缩码率,且输出稳定。
选取不同场景的5幅遥感卫星图像,大小2048×2048,位宽11bit,如图12所示。分别采用传统算法与本文改进算法进行4∶1的目标压缩比测试,结果见表2。
图11 图像4倍压缩下的码率控制结果Fig.11 Result of rate control under Image 4× Compression
图12 选取的测试图像Fig.12 Selected test image
表2 与传统算法比较Table 2 Comparison with traditional algorithm
由测试结果可见,采用本文改进的码率控制算法,在整幅图纹理复杂程度不均匀时,提升效果较大,在纹理复杂程度比较均匀时,提升效果较小。相较于传统码率控制算法,相同压缩比下,恢复图像的PSNR提高0.5 dB以上。
本文设计的图像压缩系统,描述了采用多个JPEG-LS压缩核并行工作的压缩编码系统的设计思路和设计方法,利用FPGA实现了基于图像分块处理技术及多路并行轮循调度技术的压缩系统设计,采用了一种先进的码率控制策略。对压缩系统的功能和性能在高分七号卫星上进行了测试,结果表明:压缩系统可以很好地解决相机原始码数据率与星地下传通道速率不匹配的矛盾,满足高分七号卫星的实时无损或近无损压缩处理的需求,且近无损压缩下图像质量客观参数PSNR值相较传统算法提升至少0.5 dB。
压缩系统的研究是通过降低数据总量解决海量高分遥感数据传输能力制约的有效途径,本文提出使用在高分七号卫星上的无损及近无损图像压缩系统,为未来卫星构建能满足宽幅、高分辨率、全色多光谱、多遥感器、海量数据的星上高速数据传输系统打下了坚实的基础。该系统使用灵活、资源占用小,进一步研究的价值大,在军事、地质、农业、林业、海洋、环境监测等领域将会得到广泛的应用。