基于DM6446的JPEG图像ROI算法的研究
2018-05-17赵继忠
赵继忠
(1.辽宁广播电视大学辽宁沈阳110034;2.辽宁装备制造职业技术学院辽宁沈阳110161)
在过去的十年中,大量的感兴趣区域加编码的方法已经被提出,特别是基于DCT变换基的图像和视频压缩格式,如JPEG[1]。其主要内容包含8X8DCT变换、量化、熵编码等。然而,JPEG标准是将整幅图像同时进行压缩,而在我们日常应用中图像中的某一小部分往往比其他部分要重要的多,我们称这一小部分为图像的感兴趣区域(Region of Interest,ROI),比如交警也许只关注整幅道路图中的一个车牌号码,而医生只关注胸腔中的一个指甲大小的区域阴影等等。传统的JPEG标准是对图像统一进行编码压缩,未能将感兴趣区域突出出来。因此,我们需要对JPEG传统标准进行改进,以便能够使感兴趣区域的图像与其他部分图像相分离,实现区别于其他部分区域图像的单独编解码,从而满足不同用户的需求。
ROI是图像中引起观察者注意的区域,ROI这一概念最早是在由机器人研究领域中提出,用来进行物体识别。在这里,注意焦点所在的区域即是ROI。观察图像时,人们往往只注意ROI区域,而抑制或者忽略非ROI区域。因此图像处理过程中,同样可以采取类似的操作,只针对图像ROI区域运行对应算法,一方面可以降低数据的规模,从而提高运行效率;另一方面也可以减少非ROI对结果造成的干扰[2]。
近年来国内外关于ROI的研究较多。对于图像ROI的提取,通常把ROI区域与BG(背景)区域进行分割,对两个不同区域采用不同的编码策略。所釆用的策略有以下两种:一种是对两个区域采用相同的编码方式,但通过对ROI区域内的编码系数进行比特位面提升,即可实现对ROI区域内的小波系数优先编码的目的[3-5],其中,Wang Z提出了一种可用单独位面提升代替所有ROI位面提升的BbBshift方法,以实现一般移位法与最大移位法的折中[3];Liu L等人以ROI的重要性为依据来降低BG系数和位平面,以有效地调节两个平面间的对比度,解码时再还原系数和位面移[4]。另一种方法则是对两个区域釆用不同的编码方式,并分配不同的编码权重以使得ROI区域获得较好的重构效果[6]。另外,Taubman D提出一种提升ROI编码块斜率的方法,但ROI中过多的BG信息导致了编码效率低、运算量大,ROI区域重构图像效果不够好[5]。
与现有的研究相比,本文研究重点突出表现在以下两个方面。一方面,文章以JPEG图像为基础进行了ROI编解码的研究。虽然JPEG2000在ROI编码上表现出了极大的优势并且已经被很好的运用,近年来众多的关于ROI编码的研究也都主要集中在JPEG2000上[7-10]。然而,相比于JPEG的DCT编码方式,JPEG2000本身的小波编码要更为复杂,在许多日常应用中不能的到很好的发挥,因此较多领域(如医学,交通领域)还依然采用的是传统的JPEG编码方式。因而,如何在JPEG图像基础上进行ROI区域的提取和存储具有更实际的意义[11]。本文中,通过对JPEG传统标准中ROI部分进行提取、单独编解码等操作实现了基于JPEG标准的ROI图像处理算法。
另一方面,为了进一步提高JPEG图像的编解码速度,本文通过软硬件相结合的方式对ROI编解码算法进行了研究。通过将ROI编解码算法移植到TI公司的DM6446视频处理芯片中来进一步提高算法的处理速度,并分析了算法移植后的性能表现。DM6446是一个双核处理器,同时拥有工作频率高达297 MHz的ARM核和工作频率高达594 MHz的DSP核。其中DSP核是专门用来处理图像算法的,而ARM核通过与LINUX操作系统进行交互来控制管理整个系统。用户就是通过ARM平台来对DSP端以及整个系统进行操作的。
1 硬件平台结构
TMS320DM6446是一款高度集成的视频处理芯片,业界称为达芬奇数字媒体片上系统。双核心架构DM6446纳入一个ARM926EJ-S内核,它运行在297 MHz的ARM核和高性能主频594 MHz的DSP TMS320C64x+™核。外部存储器采用的是128MD⁃DR2和64M的NAND Flash等硬件资源;包括PAL/NTSC标准的模拟视频输入接口,支持VGA输出;标准的RS232和RS485接口10/100M以太网接口;标准ATA硬盘接口;USB2.0高速接口[12-14],如图1所示。
图1 TMS320DM6446硬件结构
TMS320DM6446处理器具有高性能、低功耗以及专用的视频图像处理器和视频处理子系统等功能特点,工作频率最高达594 MHz,内核供电1.6 V,具有256 MB的32位DDR2 SDRAM存储空间和128MB的16位FLASH存储空间,同时具有丰富的片上外设,包括:64通道增强型DMA控制器;串行端口(3个UARTs、SPI、音频串口):3个64位通用定时器;10/100 M以太网iUSB2.0端口;3个PWM端口:多达71个通用I/O口;支持MMC/SD/CF卡等。
2 ROI算法
图像压缩算法通常分为编码和解码两个过程。在编码过程中,将算法分为提取ROI数据和存储两个过程;在解码过程中,将算法分为识别ROI和覆盖两个过程,这两个过程实际上是编码的两过程的逆过程。图2给出了算法的具体示意图。
图2 ROI算法流程示意图
2.1 编码提取ROI
本节中,给出了在编码过程中对ROI区域进行提取的方法,要想提取ROI数据,首先需要准确的识别ROI数据,并能够与非ROI的背景区域进行区别,这一部分工作归为ROI识别技术领域,本文不做详细介绍。为了简单起见,人为划定ROI数据区,通过给定ROI数据区大小,以及原图像中ROI区域的像素坐标来划定图像感兴趣区域。据此,可以准确提取所需的ROI区域数据。为了与传统JPEG编解码算法兼容,在提取ROI数据时只需将此部分数据进行复制,从而保留原数据区数据。
2.2 ROI的存储
本节中描述了编码算法中ROI中具体存储办法,也是整个编解算法中最为重要的环节。为了更好的提高算法的鲁棒性以及与JPEG标准的兼容性,所提出的算法需要满足以下要求[11]:
1)标准性:所提出的算法需要在保证不破坏原有JPEG标准的前提下进行,需要按照JPEG标准的语法语义来进行定义。
2)完整性:能够准确保存原图像的所有信息。
3)有效性:所提出的算法能够在任何一副JPEG图像上工作。
因此,我们将提取出的ROI大小信息、坐标信息以及ROI数据统一存在于一个ROI数据结构体中,且此结构体符合JPEG标准,即具备标志位,大小位,信息位以及数据区。该结构体定义如下:
为了能够与传统JPEG编解码兼容,我们将ROI数据区的存储位置放在JPEG图像中EOI标志位之后。JPEG的每个标记都是由2个字节组成,其前一个字节是固定值0xFF。每个标记之前还可以添加数目不限的0xFF填充字节(fill byte)。其中各标记含义如表1所示。
表1 JPEG标记定义
另外,我们还需要考虑建立一个ROI数据区存储所需容量,由于不同大小的ROI数据区所需存储位数不同,最终存储的图像大小将有所不同,我们需要保证有足够的容量来进行存储压缩后的图像。ROI最大为整幅图像,即整个图像都为ROI数据区,且所有ROI数据不进行编码,而是直接进行存储,那么需要2倍原图像大小的存储空间。所以在进行实验时,需要提前预留2倍原图像大小的内存空间即可。
2.3 解码ROI
在对ROI解码时,首先根据ROI数据标志位0xFFC1识别出ROI数据,从JPEG图像中将ROI数据提取出,单独保存到一个数据区中,由于提前不能确定ROI数据的大小,所以我们采用动态分配内存的方式,且同ROI编码时一样,提前预留2倍图像大小的内存空间。然后将原JPEG图像按照JPEG标准解码进行解码,最后,根据ROI坐标信息将解码后的ROI数据覆盖原有的数据即完成ROI编解码的整个过程。
在解码过程中,当存在多个感兴趣区域时,为了提高算法的效率,我们可以通过定义大小相同的多个ROI数据结构体来覆盖我们关注的感兴趣区域。例如,我们定义ROI数据结构体大小位1%C,C为图像的大小,而我们感兴趣区域的大小为3.5%C,那我们只需要4个ROI数据结构体便可以覆盖整个感兴趣区域,这样在解码时我们只需通过定义指针数组来动态为每个ROI数据分配缓冲区即可,这时每个缓冲区的大小为C/n,n为ROI数据结构体的个数。
3 算法评估
为了能够很好的评估在第3部分中提出的算法的性能表现,我们分别研究了不同ROI区域大小,不同ROI区域数量与成像质量,成像时间的关系。通过对比分析来研究算法的整体性能。为此,我们分别选取分别率分别为 880×480、1 760×960、2 640×1 440的3幅图像作为对比,并对此做了如下几方面的评估。
3.1 ROI算法成像质量评估
首先对3副图像分别进行JPEG标准编解码,压缩比为10:1,然后将3副图像再按含ROI区域大小为1%C(C为图像大小)的算法进行编解码,将得到的图像分别与不含ROI算法得到的3幅图像对比,分析整幅图像其各自峰值信噪比(PSNR),如表2所示。
表2 含ROI算法与非ROI算法PSNR值
通过表2数据,我们可以看出不同大小图像的信噪比有所变化,所称趋势为图像越大,PSNR值越高,这是与所采用JPEG压缩算法和量化表的大小息息相关的,尽管如此,但是,采用了ROI算法的图像的PSNR值都高于未采用ROI算法的图像,由于上表中ROI区域只占了整个图像大小的1%,就对整幅图像的PSNR值产生了明显的改观,所以足以说明我们的ROI算法能很好的保证ROI数据质量。
另外,可以看出随着图像的增大,采用ROI算法图像的PSNR值增幅变小,这也让我们不难推测,ROI算法对整幅图像PSNR值的影响,是根据ROI实际大小来做出的,而不是根据其所占图像百分比。
3.2 ROI数据区对ROI算法影响评估
本节中,我们通过对不同情况下ROI算法编解码时间的统计来对ROI算法进行评估,在此之前,我们需要区别ROI数据区和ROI区域这两个概念,本文中所说的ROI数据就是指我们2.2节中提到的ROI数据结构体中的数据区成员的大小及数量,而我们说的ROI区域则是指实际中一副图像用户最为感兴趣的部分。本节中,我们都是通过对ROI数据区进行改变来评估ROI算法的。我们首先通过分别改变三幅图像中ROI区域大小来分别统计不同大小的ROI编解码所需时间。ROI大小起始大小为1%C(C为图像大小),并以1%C的幅度递增,结果如图3(a)所示。随后我们我们通过改变ROI数据区数量来分别进行时间统计,并以1的增幅来逐渐增大ROI数量来对3幅图像编解码时间分别进行统计,统计结果如图3(b)所示。
图3 ROI数据区对ROI算法影响
通过图3(a),我们可以看出随着ROI数据区大小的增大,ROI算法编解码所用时间成线性增加,而且对于越大的图像,时间增长也越明显,我们看到1 024×480的图像在ROI数据大小仅仅达到整幅图像10%时,所用时间就已经超过5 s,这是用户所不能忍受的,如此低的效率是无法让此算法正常运行的。
而通过图3(b),我们可以看出在不改变ROI数据区大小,仅仅改变ROI数据区数量时,随着ROI数据区数量的增大,ROI算法编解码所用时间几乎保持稳定,尽管随着图像的增大,我们编解码所需时间也随着增大,但是仍在可以接受的范围之内,我们也将在下节中就图像大小对ROI算法的影响进行评估,这里暂不做讨论。
为此,我们可以看出,在对已知ROI区域通过ROI算法来进行编解码时,我们通过改变ROI数据区数量来实现该算法的效果的效率要远远大于通过改变ROI数据区大小的效率,例如,我们的ROI区域大小占整副图像大小的15%,那么我们可以通过编码15个大小占1%的连续的ROI数据区来覆盖整个ROI区域,而不是通过增大ROI数据区来实现这个算法。所以通过改变ROI数量的方法会大大提高ROI算法的效率。因为改变ROI数据区的数量仅仅是对结构体数量变化的操作,而要想改变ROI数据区大小,则涉及内存分配以及ROI结构体初始化等一系列问题,耗时大大增加。
3.3 ROI算法综合评估
在以上的分析中,我们不难发现,图像大小本身也会对ROI算法产生影响,为此我们通过选取不同大小的60幅图像进行了算法时间统计,并为了进一步说明4.2节中ROI数据区数量对算法时间的影响,我们也通过改变每副图像的数量对算法编解码时间分别进行了统计,结果如图4。为方便起见,我们选取的是宽和高像素大小相同的方图来进行数据分析。
图4 算法分别在不同大小图像、不同ROI数量下运行时间
通过图4我们可以看出,随着图像面积的增大,ROI算法成线性增加,而ROI数据区数量的增多则对ROI算法的运行时间影响不大,因此,我们可以看出,算法的主要编解码时间消耗在对图像数据的提取分析上,而这是由JPEG标准算法本身决定的,而我们通过改变ROI数据区数量来编解码ROI区域的算法对原有的算法效率影响不大,且与原有算法有很好的兼容性。
4 ROI算法在DM6446的移植与性能分析
4.1 ROI算法在DM6446上的移植
为了进一步提高算法的性能,我们将ROI算法在DM6446上进行了移植。将ROI算法移植到TI官方给的example中,根据DM6446双核特点,我们分别将编解码算法移植到DSP端codec部分中的encode和decode过程中,图像的输入输出及整个算法的控制则由双核系统中ARM端的APP部分实现。移植中,根据不同图像大小以及所需要分配的内存数量给定不同大小数量的内存池用来共享ARM端的LINUX进程与DSP端的算法之间缓冲区,以实现虚拟内存和物理内存之间的转换,这些都通过调用cmem的API完成[15-16]。由于算法端需要动态分配内存的地方较多,而传统的算法端内存分配是由ARM端统一进行分配管理,这样会大大增加系统复杂度,为了方便起见,我们也不再由统一进行内存管理,而是将DSP端malloc函数分配的内存直接定向到栈,通过在.tcf文件中加入“prog.module("MEM").MALLOCSEG=bios.DDRALGHEAP;”来实现,这样可以大大提高算法效率。
4.2 性能分析
我们分别对移植后ROI算法的成像时间和成像质量与移植前的算法进行了对比,结果如表3所示。
表3 ROI算法在DM6446与PC上性能比较
通过表3分析可知,即使图像像素大小达到1 024×480 pixel,算法在DM6446上的运算时间仍远远小于1 ms,并且成像质量与PC上的成像相同,这与DSP端对算法的高效处理是分不开的。这里需要指出的是以上算法在DM644上的运行时间是仅仅指DSP端对算法处理时间,没有计算在ARM端读取图像数据和生成图像文件的时间,因为这个时间是有计算机本身性能决定的,并没有可参考性。
5 结论
当我们看到一幅图像时,总会对其中的一部分感兴趣,而其他的部分无关紧要,这篇文章,我们基于JPEG标准编解码算法,给出了实现感兴趣区域提取、存储、还原的ROI算法,并对成像前后的质量,以及不同图像,不同情况ROI数据区的算法运行时间进行了统计,可以看出,通过ROI数据区数量的增加来实现ROI算法的效率要远远高于通过ROI数据区单纯的大小变化来实现,而ROI算法的效率又与图像本身的大小密切相关,最后我们将算法在DM6446上移植,利用DM6446双核特点,使得算法的性能得到进一步的提升。
虽然本文是基于JPEG图像来进行的,但在下一步的研究中,我们可以依据文章的思想和研究方法,可以进一步将ROI编解码算法应用在其他格式的图像或视频中,如H.264中。并将算法在DM6446的开发板中进行移植,利用其双核的优势,使编解码算法集中在DSP[17-19]核实现,进而可以极大地提高视频的处理效率,这也必将成为未来研究的趋势。
参考文献:
[1]刘方敏.JPEG2000图像压缩过程及原理概述[J].计算机辅助设计与图形学学报,2002(10):905-911.
[2]陈再良.图像感兴趣区域提取方法研究[D].湖南:中南大学,2012.
[3]Wang,Bovik AC.Bitplane-by-bitplane shift(BbBShift)-a suggestion for JPEG2000 region of interest image coding[J].Singal Processing Letters,IEEE,2002,9(5):160-162.
[4]LiuL,FanG.AnewJPEG2000region-of-interestim⁃age coding methodrpartial significant bitplanes shift[J].Signal Processing Letters,2003,10(2):35-38.
[5]Taubman D,Marcellin M W,Rabbani M.JPEG2000:Image compression fundamentals,standards and practice[J].Journal of Electronic Imaging,2002,11(2):286-287.
[6]杨智海.基于小波变换与ROI编码的雷达图像压缩[D].辽宁:大连海事大学,2014.
[7]冯竞舸.静止图像的ROI区域自动提取与编码[D].江苏:南京邮电大学,2013.
[8]王峰,崔慧娟,唐昆.基于JPEG2000的低速率ROI改进算法的研究[J].信息技术,2013(9):84-87,95.
[9]罗桂娥,钟进.基于JPEG2000的感兴趣区域编码方法研究[J].价值工程,2014(21):229-230.
[10]张雨薇.一种改进的JPEG图像压缩编码算法[J].云南师范大学学报,2016(6):32-39.
[11]郭慧.具有鲁棒性与数据嵌入能力的JPEG压缩图像加密算法[J].计算机应用研究,2016(9):2804-2809.
[12]Zhang Qi-gui,Shen Hai-chao.Design of bootload⁃er in video analysis platform based on DM6446[J].IEEE International Conference on CSAE,2011(1):101-103.
[13]罗茂元.基于DM6446嵌入式虹膜识别系统的电源设计与实现[J].电子设计工程,2014(7):150-153.
[14]陈继成.基于DM6446的超分辨率图像重建系统的设计与实现[D].哈尔滨:哈尔滨工业大学,2014.
[15]焦自龙.基于TM320DM6446的交通图像处理平台设计与实现[D].成都:电子科技大学,2015.
[16]闵志盛.基于DM6446的变焦成像系统设计[J].电子设计工程,2012(8):183-185.
[17]王一丁,魏忠义,董毅.DSP处理器XINTF接口与液晶并口的兼容通信设计[J].西安工程大学学报,2016,30(3):306-311.
[18]李诗琪.雷达信号模拟器的中频信号产生器设计[J].电子科技,2016,29(5):58-61.
[19]焦淑红,焦壮.基于多核DSP的以太网通信接口设计[J].电子科技,2015,28(9):104-108.