基于ATmegal28的LED屏图像数据解码设计
扫描二维码
随时随地手机看文章
摘 要:针对目前对全彩LED显示屏图像数据的处理需依赖计算机的情况,提出利用ATmegal28单片机实现JPEG图像解码的方法,并利用此方法实现了通过GPRS网络对全彩LED显示屏图像数据的远程传输。针对ATmegal28的资源和性能特点,对JPEG解码进行了可行性分析。重点论述Huffman解码、IDCT解码和图像缩放的优化算法在ATmegal28单片机上的实现。由于图像的处理在单片机上实现,降低了产品的成本,具有较强地生产实用性。
关键词:ATmegal28;JPEG解码;Huffman解码;IDCT解码;全彩LED显示屏
随着LED显示屏的普及和成本的降低,LED显示屏已经成为公共场合信息宣传的一种重要工具。目前实现对LED显示屏的文字图像更改的方法主要有:显示屏通过串口或网线与计算机连接实现更改;通过GPRS网络实现数据的远程传输,接收后在计算机上用特定软件解码后发送到LED显示屏显示。以上方法始终需要在计算机平台上实现,附加成本较高。设计利用手机作为发送端,发送彩信至GPRS模块,利用ATmegal28单片机直接对彩信图像进行解码然后发送到LED显示屏上进行显示。
l JPEG解码可行性分析
该设计所用全彩LED屏接收的数据格式为Xmp格式,Xmp格式是简化的BMP格式。Xmp格式在图像数据前有6个字节表示图像的属性,第1字节为1个点的字节数;第2字节为XMP文件中包含的图片个数;第3,4字节为图像的高;第5,6字节为图像的宽,其后为图像每点的颜色。每点的颜色用2个字节表示(16位色)。由于所用全彩LED屏只有64×64像素,所以JPEG解码后还需进行图像的缩放。
JPEG解码过程中所需要的缓存主要包括原始JPEG图像数据的缓存、中间变量的缓存以及解出的Xmp数据的缓存。根据JPEG图像的复杂度及压缩比的不同,一般一帧320×240的彩色JPEG图像的大小在2~20 KB。JPEG解码缓存主要用于存储Huffman表,量化表,IDCT解码的临时结果等。这些大约需要8 KB。解出的Xmp数据的缓存要求的RAM相对比较固定为9 KB。综上JPEG解码大致需25 KB的RAM。ATmegal28内部只有4 KB的SRAM,所以该系统外扩了64 KB的外部RAM。
2 软件实现
该设计采用avr—gcc作为编译工具。avr-gcc默认设置栈由内部RAM的顶部向下生长。由于图像处理过程中需要占用大量的RAM空间,所以应该通过设置把所有数据区移到外部RAM,只留栈区在内部RAM,避免数据的相互覆盖。
JPEG解码过程主要包括Huffman解码、反量化及IDCT变换、色彩变换等模块。该文采用的LED显示屏是64×64点像素,并且只能显示Xmp格式的图片。因此在JPEG解码后需增加图像的缩放模块。其流程框图如图1所示。
[!--empirenews.page--]
2.1 Huffman解码的实现
Huffman解码是解码过程中重要的一环。传统的哈夫曼解码需要逐位查找哈夫曼表,进行比较判断,由于查找过程需要大量的移位及循环。这样的解码效率非常低。针对这种情况,充分考虑到ATmegal28的存储容量的限制,在读文件头时,软件事先构造出不同码长下的哈夫曼码字的最小值表和最大值表如表1所示,最小值在哈夫曼表中的索引以及哈夫曼树各叶子结点对应的编码表。
在解码的时候,读取1串二进制数据,分别与各码长下的最大值和最小值进行比较,如果在哈夫曼表中没有该码长的码字,说明该比特数据不是完整的Huff_man编码,接着读取下一个比特数据加在前面的比特数据组成的新的码字,然后再在最小值表和最大值表中进行查找,直至找到确切的码字。最后把该码字减去同一码长下最小值,加上此最小值在哈夫曼表中的索引即可得到该码字在编码表中的位置。
2.2 IDCT变换的实现
将8×8块中的颜色分量单元的64个值逐一乘以对应的量化表内位置相同的系数,然后再将64个数据进行Z字型的重新排列,进行IDCT变换。IDCT的运算量很大,其中要进行大量的浮点乘法和加法运算,因而在解码过程中IDCT所占时间最多。采用行列分解法先将二维IDCT分解成一维8点的IDCT,对于一维8点IDCT采用Loeffler的快速算法。图2为Loef—fler算法的流程图,Loeffler算法运算因子的解释如图3 所示。
直接对旋转因子进行计算需要4次乘法和2次加法,这样1次8个点的一维IDCT变换总共需要14次乘法和26次加法。可以对旋转因子进行变形如式(1)所示:
从而1次旋转因子计算只需要3次乘和3次加。进而进行1次一维IDCT只需11次乘和29次加。因为乘法运算的代价高于加法运算,所以这种变形是有益的。完成一次二维的IDCT运算总共要进行16次的8点一维IDCT运算。由于ATmegal28在速度方面的限制,在IDCT运算过程中把浮点操作改进为整形运算,并且把的值扩大211倍存储起来,为IDCT运算做准备。[!--empirenews.page--]
2.3 图像的缩放
由于该设计所使用的显示屏为64×64个像素,所以对于JPEG格式的彩信需要先进行解码,然后再进行缩放,使其成为64×64的格式。一般情况下,图像缩放是采用目标图像到源图像“逆向映射”法。但是考虑到ATmegal28 RAM容量的限制,如果先解出源图像,则会占用大量的RAM,因此采用源图像到目标图像的映射方法。当解出源图像一个像素的RGB值时,通过运算求出其在目标图像中的位置;先判断此位置是否为零,如果是,则直接存储;如果否,则求两数的平均值后存储。对于源图像中n个像素点对应目标图像1个像素点的情况,这个目标图像像素点的颜色分量I=I1/2n+…+In/2,其中:I1为对应源图像中第一个像素点的颜色分量,In为最后一个的颜色分量。
该设计所用方法得到的Xmp格式图像与最近邻域法所得图像的比较如图4所示。图4(a)为Lena原图,图4(b)为采用最近邻域法得到的:Xmp格式图像,图4(c)为本文所用方法得到的Xmp格式图像。对比可知,这里所用的方法得到的图像像素点间过渡比较平滑,有比较好的显示效果。此方法是对最近邻域法的改进,既避免了在使用最近邻域法时源图像某些像素信息的丢失,又节省了系统的RAM资源。
3 硬件实现
该系统的硬件实现框图如图5所示:
系统以ATmegal28单片机为主要芯片,通过RS 232和TR800进行数据传输。ATmegal28通过命令读取TR800接收到的彩信图像,进行解码处理。然后通过RS 232把数据传输到全彩LED显示屏进行图像的更改。在Amegal28与外部SRAM之间使用了锁存器,该设计采用的是74AHC573。TR-800模块是一个高性能、功耗小的GPRS模块,它内嵌了WAP协议栈、TCP/IP协议栈、MMS协议栈便于用户的二次开发以及固件的升级。由于以上特点,该设计选用此模块来实现对彩信收发处理功能。LED显示屏的传输协议遵守Xmodem通信协议,采用CRC校验。整个系统运行效果表明,ATmegal28在采用16 MHz晶振的情况下解码167×173像素的JPEG图片大约需要1s。
4 结 语
提出适合于全彩LED显示屏的远程图像传输设计,并给出关键问题的解决方法。由于利用单片机实现了图像的软件解码,这给工程上应用带来便利。该设计能广泛应用于车载,或者户外广告屏的图像数据的处理传输。将计算量庞大的JPEG解码算法成功地在ATmegal28上进行移植,并由此实现全彩LED显示屏图像数据的远程更改,具有较强生产实用性。设计完成的“基于GPRS的远程交互式多用户智能信息屏”在第十届“挑战杯”全国大学生课外学术科技作品竞赛中获二等奖。