米 波,贺锋涛
(西安邮电大学 电子工程学院,陕西 西安 710061)
当代社会中,视频图像采集系统应用越来越广泛,从工业控制到工业检测,从医学的图像处理到计算机智能机器人的视觉识别等等。随着3G时代的到来,4G网络的开启,以视频聊天为基础的视频通信、网络通信的主要传输基本元素更加偏向以视频传输为主。在此大背景、大趋势下,视频系统如何才能在满足低功耗的基本要求下,把接收到的大量的视频流信息及时快速的显示出来成为迫切问题。本文以STM32F107为主芯片,在相同硬件基础之上,对大量视频流信息进行了视频流图像更新方法的研究,并提出了基于STM32视频流图像更新的解决方案。
视频流产生的基本原理是人体视觉的暂留现象和图像的动态更新两个因素共同作用的结果。科学研究表明,视频流动画效果的产生需要每秒24副图像动态更新才能完成。也就是说,每产生一秒的视频流需要24副图像。那么在具体的应用中,就要计算实际的数据量。以当前的比较主流的320×240TFT LCD液晶屏为例(以下同例),一秒的实际的数据量应为24×320×240=1843200,其中由于TFT LCD液晶是以像素点进行工艺制成,每个像素点在数据对应上是一个字节(详细请参阅相关TFT LCD液晶数据手册),那么通过计算应该为1843200 个 字 节,即 1800KB=1.75MB。而STM32F107主芯片的工作频率为72MHz,也就是说0.024S(1.75/72)内完整的刷新一秒内的数据量。但是由于液晶在显示的过程中还需要对图像信息维持(即图像在显示的过程中,图像每刷新过后,由于材质的因素,一旦没有信号则图像信息就会消失),所以需要不断的刷新进行数据维持,而且不同材质工艺制作维持时间不同。以经验值0.02S来计算,最后可以得出,要在一秒内以这样的数据量进行计算,那么在一秒内需要对液晶屏幕至少要进行22次的刷新。这个计算结果虽然在常用的视频流使用中不会造成很大的影响(观察者进行观察时不会有明显视频延时的感觉),但是在中大型视频流系统和视频流加速放映时,视频流迟滞,图像模糊,重影等等现象就比较严重。
针对此问题,本文提出基于STM32视频流图像更新的解决方案。
硬件平台主要以STM32F107为主芯片;液晶屏,以3.5寸320×240TFT LCD液晶屏;其他硬件有STM32F107最小系统电路;SD卡,由于数据量比较大,将大量数据储存在SD中;若干按键。主要的硬件原理图,如图1所示:
图1 主要硬件原理图
软件平台主要使用keil for ARM ,JTAG下载器。
通过上述的原理描述和实际的应用发现,在每一秒与每一秒之间的数据显示中,液晶显示的部分区域是不会变化或者很少变化的。能否在数据进入液晶显示之前,进行数据的分析,对不同的数据进行特殊处理,从而达到减少送入液晶显示的数据压力(即直接的减少了),间接的减少了主处理器用于图像更新数据计算时间。具体方案如下:
(1)首先,对整个显示图像进行显示区域的分割,以常用分割为例,分为8个区域,如图2所示。为了便于计算可以采用等面积分割,但是在实际中可以根据不同的需要进行菱形分割,三角分割等等。
图2 对图像进行显示区域的分割
(2)进行图像对比。通过前面的原理,可以得知,一秒更新24图像,但是在对比一秒内前后两幅图像中的相同区域中,可以进行随机抽取的方法,来加快对比的时间和效率,而且在两副图像变化的时间内,由于人体视觉的暂留现象和液晶工艺的原因,输出到液晶的图像消失的时间相对于图像的更新是比较长的,对分割好的图像块中的部分像素点,进行随机性的抽取,来对比同一位置的图像是否有更新,从而代替对整块图像的完全更新。根据实际得到随机抽取的比例值80%左右即可。
(3)数据优化。由于在图像对比的过程中,主要是针对两幅图之间进行对比的,该步骤将其应用到整个24副图像中,即若前两个两幅图的对比重复率超过80%,那么第三副图像与第二副图像对比重复率只要检测70%,第四幅图与第三幅图对比重复率只要检测60%...,以此类推就可以得到一些实际经验性的逐级检测的加权系数。通过不同的加权系数的设置来对该图像刷新进行快速的加速显示。
主要的设计流程图如图3所示:
图3 主要设计流程图
通过程序流程图可以得知,在程序设计中,多次调用图像分割后的随机抽取函数对比结果的有效性是与分割大小有直接关系的。而且更为关键的是,一秒内图像更新的数据量大大的降低。以一个分割八块的图像为计算:在最不理想情况下,即每个图像分割后同等位置的八块图像的重复率都要小于80%,此时一秒内的每幅图基本不相同。这种动态图像更新过程中,图像与图像之间突然变化,是不可能的。其原因为,图像变化是连续的,不断更新的。那么该数据量的计算为:
C=(320×240/8)×8×1×24=1843200=1800KB
即为此基本原理中所得到的数据量。
在最理想情况下,即每个图像分割后同等位置的八块图像的重复率都大于80%,此时其一秒内每幅图都基本相同,也就是说视频流一秒内没变化。那么该数据量计算为:
C=(320×240/8)×8×(0.8+0.7+0.6+0.5×21)=967680=945KB
通过前后两个值进行对比可以很明显的看到数据量的变化。
而且以上两种都是很极端的情况,同时在此计算中并没有考虑到分块前后计算量的变化。表1和表2是实际得到数据,经过keil for ARM断点调试得出。
表1 不进行数据分割下对比
通过两种方法的对比计算,此方案确实可行而且还大大的加快的主芯片使用效率。
本方案与原来视频流的每一帧的图像刷新方法相比,对视频流中每一帧图像重复显示部分的更新操作大大减少。主要的原理是视频流连续输出时,必然有一部分的图像数据不会变化,只是对图像变化的部分进行图像的显示更新,并将图像处理理论中关于图像分割处理的基本思想迁移到实际的应用中。具体的使用该方法是应遵从先分割(处理),再计算的思想,这样的好处是充分利用人体视觉的暂留现象和液晶工艺需要数据维持等因素,以求减少计算图像的面积,从而达到减少液晶显示模块占用处理器整个工作的时间的目的。虽然本文提供了数据和基本的方法,但是还有一些不足之处,数据适用性需要进一步的验证,以便做更好的计算模型,得到更加准确的计算结果。
[1]王炳乂.面阵CCD图像采集与多接口传输系统[D].成都:电子科技大学,2009.
[2]谈卫星.全彩色LED显示屏系统的设计与实现[D].杭州:杭州电子科技大学,2011.
[3]ZHANG XiaoFeng,ZHANG CaiMing,TANG Wen-Jing,et al.Medical image segmentation using improved FCM[J].Science China:Information Sciences,2012(5):1052-1061.
[4]JIA Jianhua ,JIAO Licheng ,CHANG Xia .Image Segmentation via Mean Shift and Loopy Belief Propagation[J].Wuhan University Journal of Natural Sciences,2010(1):43-50.
[5]黄智伟,于红利,宁志刚,等.基于STM32F417的图像采集系统设计[J].单片机与嵌入式系统应用,2012(10):48-51.
[6]覃松,李冰.JPEG图像解码器在STM32上的应用研究[J].单片机与嵌入式系统应用,2013(5):14-16.