摘 要: 为了在DSP平台上实现实时大图像旋转,结合TMS320DM642的性能结构特点,针对旋转算法中严重影响DSP CPU效率发挥的大量非连续图像像素地址访问的问题,提出了基于视口图像块覆盖的DSP图像旋转算法数据调度策略,对算法的结构流程进行了优化调整。
关键词: 大图像旋转;数据调度;DM642;DSP;实时;优化
图像旋转是一种应用广泛的数字图像处理技术,随着应用水平的不断提高,对在嵌入式系统中实现高分辨率大图像旋转的需求也越来越高。如在航空领域的高分辨率数字地图图像的显示处理过程中,由于现有的显示芯片均不能支持图像旋转功能,就需要在资源有限的嵌入式平台上实现大幅面地图图像的实时旋转。采用DSP平台是一种实现方式,具体实现时需仔细考虑两个方面的问题,一是选用计算量小的旋转算法,二是充分发挥DSP平台强大的并行计算能力。
目前,已经有很多有效降低计算量的图像旋转算法,基于图像线性存储结构的旋转方法[1]就是其中之一。然而,在DSP平台上,有限的高速存储资源限制了这些算法效率的直接发挥,需要针对算法及DSP平台的性能结构特点进行高效的数据调度。对于图像旋转问题而言,数据调度还需要克服由于存在大量非连续图像像素地址访问而严重影响DSP数据存取及CPU效率发挥的问题。这是图像旋转本身的特殊性,在其他图像处理技术中是不存在的。本文主要讨论如何利用TI公司TMS320DM642芯片的资源特点,进行高效图像旋转的大规模数据调度,从而实现适用于大图像的DSP实时图像旋转。
1 基于图像线性存储结构的旋转方法介绍
目前,图像旋转大多采用基于视口映射的处理。视口是指屏幕上的显示区域范围,方法是先计算出旋转后视口图像像素在源图像中的坐标地址值,再依据该地址在源图像中对应读取像素值,最后利用读取的像素值进行插值,得到最终旋转后视口图像。实际上,由于存在对称性,一幅图像任意角度的旋转可分解为一次90°或180°或270°的旋转,再加上一次±45°以内的旋转。
传统的图像旋转一般通过矩阵乘法实现:

其中,α为旋转角度。
本文选用的张克黛[1]等人提出的基于图像线性存储结构的旋转方法是一种理论上运算效率较高的方法。下面具体介绍。
由于图像是线性存储的,各个像素点之间的相对位置关系确定。如图1(a)所示,图像旋转前,任意像素点P(x,y)和P1(x1,y1)、P2(x2,y2)及A(xA,yA)在几何上是矩形的四顶点关系。由于旋转变换是线性变换,如图1(b)所示,图像旋转后,各个像素点之间的相对位置关系不发生变化,


所以,对图像作旋转变换,只需对第一行和第一列的像素用式(1)作矩阵乘法运算,对除第一行和第一列以外的像素,用式(2)进行简单的加减运算即可。这样避免了对整幅图像的每个像素作矩阵乘法运算,可节省5~6倍的CPU周期。
另外,对于旋转计算后非整数像素地址的插值,本文采用双线性插值法,基本能够满足对图像质量的要求。
2 图像旋转的DSP结构优化
2.1 TMS320DM642结构特点
该芯片的结构如图2所示,它基于C64x内核,采用TI的第二代高级超长指令字结构,可在600MHz时钟频率下工作,每个指令周期可并行8条32位指令,可达到4 800MIPS的峰值计算速度。DM642具有64个增强DMA(EDMA)通道,可进行高效的一维及二维数据传输,二维数据传输可用于一个矩形图像数据块的高速搬移。

DM642的存储空间由片内和片外两级存储体系构成,其中片内存储器又分为L1和L2两层。第一层L1为CPU Cache,其访问速度与CPU的速度相匹配,包括相互独立的L1P(16KB)和L1D(16KB);第二层L2(256KB)具有灵活的RAM/Cache分配。片外存储器具备32位的访问地址,通过EDMA控制器和EMIF外部存储器接口进行数据访问。其中,片内存储器和片外存储器在访问速度方面存在很大差异。
此外,作为多媒体处理专用芯片,DM642具有用于视频数据I/O的专用接口,易于实现视频信号的显示输出。
2.2 旋转算法的结构优化
针对DM642性能结构特点的算法结构优化,其目的是使上述大图像旋转快速算法的效率能够在DSP平台上得到充分发挥,其核心思想是合理优化存储空间分配和数据传输流,使CPU能连续不断地处理图像数据,消除处理过程中的等待延迟。
由DSP的结构特点可知,只有在数据和程序均位于片内存储器当中的条件下,DSP的效率才能得到最大化的发挥。在大图像旋转算法中,由于涉及的图像数据量远大于DSP的片内存储器容量,源图像和最终视口图像等数据必须被存放在片外存储器中。在这种情况下,为了保证DSP CPU高速处理能力的发挥,必须优化数据流,将源图像分块,依次搬移至片内处理,并设法保证CPU当前要处理的图像数据块已经事先在片内存储器中准备好了。因此在算法整体优化结构上采用Ping-Pong双缓冲技术,利用EDMA与CPU并行工作来隐藏图像数据块在片内和片外之间的传输时间,使CPU能连续不断地处理数据,中间不会出现空闲等待。
Ping-Pong双缓冲是一种同时利用两个数据缓冲区的数据传输技术,它将SRAM分成两大块,一块用于存储源图像块,另一块用于存储旋转后的图像块;每一个存储块又分为两个区(Ping区和Pong区),轮流用于图像块传输和处理。其具体并行工作流程如图3所示。





