专利名称:一种减小在线图像压缩数据缓冲区大小的缓冲区读写方法
技术领域:
本发明涉及一种减小在线图像压缩数据缓冲区的缓冲区读写方法。
背景技术:
大多数静态图像压缩标准(如JPEG,JPEG2000)和动态图像压缩标准(如MPEG1,MPEG2,MPEG4,H263等)中,首先对图像的原始数据进行时域到频域的变换,再对频域信号进行压缩。其中时域到频域的变换有一个共有特征对一定大小的块(如8×8,共64个像素)进行变换。此外,某些标准中,还有最小编码单元的限制(Minimum Code Unit,MCU),要求每次获得一个MCU的数据,如JPEG YUV4:2:0的图像MCU为16×16像素的块。我们称DCT等对图像中一定大小的块依次进行操作的运算或处理模块为“块处理模块”。
数码相机传感器产生的数据是一行接着一行传输的,而JPEG进行离散余弦变换(Discrete Cosine Transform,DCT)变换时是以8×8的小块为单位进行操作,因此DCT需要同时使用8行的数据。对于大小为1280×1024的130万像素图象一般的在线DCT压缩数据缓冲区设计采用两个缓冲区的设计,(每个缓冲区可存储8行共8×1280个像素的数据),进行乒乓读写(即从一块准备好8行数据的缓冲区读取数据时,需要另一块缓冲区来准备后续的8行数据)为DCT提供8×8的数据单元。两个缓冲区的乒乓读写方式如图1所示,其中,→表示“写”的过程,而 表示“读”的过程。
这样的设计需要的缓冲区大,从而导致设计的集成电路芯片面积较大,从而成本也高。
发明内容
本发明所要解决的技术问题是提供一种减小百万像素在线DCT压缩数据缓冲区大小的方法,该方法可对同一块缓冲区进行巧妙的分区和读写的合理分配,在一个可存储8行共8×1280个像素数据的缓冲区中完成了原本需要两块缓冲区完成的功能,降低了最终的芯片面积和产品成本。
为了解决上述技术问题,本发明所采用的技术方案是提供一种减小在线图像压缩数据缓冲区大小的缓冲区读写方法,其从行数据得到为块处理模块提供A×N的块数据,其中A、N可为任何自然数,包括如下步骤首先将缓冲区分成A×A等分;步骤1对数码相机传感器得到的输入数据进行水平写入,直到写入第A行的1/A行数据,这段时间缓冲区只能被写,不能被读;步骤2数码相机传感器在写入第A行剩余的A-1/A行数据过程中,块处理模块将左边第一个垂直小块列读走。
步骤3-5缓冲区从步骤2进入垂直写、垂直读的状态,经过A-1个垂直小块列读写,到垂直读走最后一列;步骤6当输入数据垂直写入到第2A行的前1/A行数据过程中,缓冲区只能被写,不能被读;步骤7当输入数据写到第2A行剩余的(A-1)/A行数据过程中,块处理模块需要将最上方的一个水平小块行读走;步骤8-10缓冲区从步骤7进入水平写、水平读的状态。经过A-1个水平小块行读写,到水平读走最后一行;步骤11当输入数据水平写入第3A行的前1/A行数据过程中,缓冲区只能被写,不能被读;步骤12缓冲区的读写状态又重新回到类似步骤2,从而完成2A行数据的从行数据转换成A×A个像素块数据的过程。
进一步地,本发明还提供另一种减小在线图像压缩数据缓冲区大小的缓冲区读写方法,其从行数据得到为块处理模块提供B×N的块数据,其中,B,N可为任何自然数,包括如下步骤首先将缓冲区分成B×C等分,B表示行数,C表示列数,其中C大于B,且B和C都为S的幂,S为大于1的自然数;步骤1对数码相机传感器得到的输入数据进行水平写入,直到写入第B行的第1个小块,这段时间缓冲区只能被写,不能被读;步骤2数码相机传感器在写入第B行的第1小块后,块处理模块将第1个垂直小块的读走。数码相机传感器在写入第B行的第2小块后,块处理模块可第2个垂直小块列读走。在数码相机传感器开始写入第(B+1)行的第1个小块之前,块处理模块必须读走第1个垂直小块列。
步骤3此后,块处理模块依次将垂直小块列读走,直至将这B行的最后一个垂直小块列读走。每读走一个垂直小块列,数码相机传感器可垂直写入B/C行像素数据,共B个小块。对于重映射后的次序表而言,数码相机传感器是水平写入下一个B行图像的像素数据。
步骤4在数码相机传感器写入第2B行的第1个小块期间,缓冲区只能被写,不能被读;步骤5重映射次序表,缓冲区的读写状态又重新回到类似步骤2,从而完成B行数据的从行数据转换成B×N个像素块数据的过程。
本发明支持在线DCT压缩,不提高DCT处理能力的要求的情况下,使所需的缓冲区减少为一般设计的一半。
图1是现有的乒乓缓冲区读写示意图;图2是本发明的旋转缓冲区分块结构;图3是旋转缓冲区读写状态转换图。
具体实施例方式
如图2所示本发明的缓冲区(面积为8×1280)按水平和垂直方向分别8等分,形成等分的64个小块,每个小块可以存储160像素的数据。在水平写入数据时,水平的8个小块可以组成一个水平小块,保存一行数据。在水平写入8行数据后,DCT进行垂直的读取,而垂直读取完的8个小块可以组成一个垂直小块,可以进行后续行的垂直写入,保存一行新的数据。
如图3所示本发明的缓冲区的读写操作方法包括如下步骤步骤1对传感器得到的输入数据进行水平写入,直到写入第8行的1/8行数据,这段时间缓冲区只能被写,不能被读;步骤2数码相机传感器在写入第8行剩余的7/8行数据过程中,DCT模块将左边第一个垂直小块列的8×160像素数据读走。
步骤3-5旋转缓冲区从步骤2进入垂直写、垂直读的状态,经过七个垂直小块列读写,到垂直读走最后一列;
步骤6当输入数据垂直写入到第16行的前1/8行数据过程中,缓冲区只能被写,不能被读;步骤7当输入数据写到第16行剩余的7/8行数据过程中,DCT模块需要将最上方的一个水平小块行的8×160读走;步骤8-10旋转缓冲区从步骤7进入水平写、水平读的状态。经过七个水平小块行读写,到水平读走最后一行;步骤11当输入数据水平写入第24行的前1/8行数据过程中,缓冲区只能被写,不能被读;步骤12旋转缓冲区的读写状态又重新回到类似步骤2,从而完成16行数据的从行数据转换成8×8个像素块数据的过程。
图中,→表示“读”的过程,而 表示“写”的过程。
以上具体实施例以JPEG中为例,阐述一种减小在线图像压缩数据缓冲区的缓冲区读写方法,但本发明并不局限JPEG,也不局限于DCT。
本发明的保护范围并不局限于以上具体的实施方式,比如,本发明并不局限于8×8数据单元,本发明还可以适用于1)从行数据得到为DCT提供16×16的数据单元(对YUV:2:0的图像,JPEG的最小编码单元为16×16像素的小块);这种情况下,我们需要一个可存储16行共16×1280个像素数据的缓冲区,并将每行分为16个小块(每块包含80个像素的数据),共16×16个小块。16×16个小块的读写操作,类似8×8个小块。
2)从行数据得到为块处理模块提供A×N的块数据(A,N可为任何自然数);假设一行有L个像素,我们需要一个可存储A行共A×L个像素数据的缓冲区,并将每行分为A个小块,共A×A个小块(每块包含L/A个像素的数据,L必须是A*N的整数倍)。A×A个小块的读写操作,类似8×8个小块。
3)从行数据得到为块处理模块提供B×N的块数据(B,N可为任何自然数);假设一行有L个像素,我们需要一个可存储B行共B×L个像素数据的缓冲区,并将每行分为C个小块,共B×C个小块(每块包含L/C个像素的数据,L必须是C*N的整数倍,C必须是B的整数倍)。为了便于ASIC实现,B和C通常都为2的幂。理论上,B和C都为S的幂即可(S为大于1的自然数)。
以下的例子是将缓冲区分为4×8个小块,以提供4×N的数据块S0,S1,…,S31表示32个小块。每写入B行数据,各小块在B行图像中的位置经过了一次重映射。对于B×C中B和C相等的情况(即以上的A×A的情况),重映射在图形上是把水平行映射为垂直列,或把水平行映射为垂直列。对于B×C中B和C不相等的情况,因为缓冲区需经过大于2次重映射,才能返回初始状态,所以无法在图形上用缓冲区垂直、水平两种读写状态来表示。因此,我们将每次重映射的结果表示在如下表格中。
初始次序(次序1)为
表1次序1对传感器得到的输入数据按表1水平次序写入,则各小块存储的像素数据在第一个4行图像中的位置正如表1所示。数码相机传感器在写入表1第4行的第1小块S24后,块处理模块可将表1左边第1个垂直小块的{S0,S8,S16,S24}读走。数码相机传感器在写入表1第4行的第2小块S25后,块处理模块可将表1左边第2个垂直小块列的{S1,S9,S17,S25}读走。
此后,块处理模块依次将表1的垂直小块列读走。每读走一个,数码相机传感器可垂直写入半行像素数据。在表1中半行接着半行垂直写入像素数据,等效于在表2中按水平次序写入。所以,则各小块存储的像素数据在第二个4行图像中的位置正如表2所示。
当块处理模块读走表1中的第8个垂直小块列时,数码相机传感器可写入表1中的第7个垂直小块列{S6,S14,S22,S30},相当于写入表2中第4个水平小块行的前半行。
表2次序2数码相机传感器在写入表2第4行的第1小块S6后,块处理模块可将左边表2第1个垂直小块的{S0,S2,S4,S6}读走。数码相机传感器在写入表2第4行的第2小块S14后,块处理模块可将表2左边第2个垂直小块列的{S8,S10,S12,S14}读走。
此后,块处理模块依次将表2的垂直小块列读走。每读走一个,数码相机传感器可垂直写入半行像素数据。在表2中半行接着半行垂直写入像素数据,等效于在表3中按水平次序写入。所以,则各小块存储的像素数据在第三个4行图像中的位置正如表3所示。
当块处理模块读走表2中的第8个垂直小块列时,数码相机传感器可写入表2中的第7个垂直小块列{S17,S19,S21,S23},相当于写入表3中第4个水平小块行的前半行。
表3次序3以此类推,缓冲区各小块在4行图像中的位置关系,依次从表3、表4、表5,又回到表1。
表4次序4
表5次序5以上5张表具有很强的内在关系,可很方便的用ASIC设计中的比特位循环移位来实现。
首先,将任一小块的块号N(0,1,2,…,31)用二进制表示为5比特的数N=16*n4+8*n3+4*n2+2*n1+n0(其中n4,n3,n2,n1,n0取值为1或0)设任一小块在一个4行图像中的坐标为(X,Y),其中X=0,1,…,7,Y=0,1,…,3。X的二进制表示为3比特的数,Y的二进制表示为2比特的数。
X=4*x2+2*x1+x0(其中x2,x1,x0取值为1或0)Y=2*y1+y0(其中y1,y0取值为1或0)表1中的N与(X,Y)的对应关系可用下式表示{y1,y0,x2,x1,x0}={n4,n3,n2,n1,n0}循环移位2位,可得表2中的N与(X,Y)的对应关系{y1,y0,x2,x1,x0}={n2,n1,n0,n4,n3}再循环移位2位,可得表3中的N与(X,Y)的对应关系{y1,y0,x2,x1,x0}={n0,n4,n3,n2,n1}再循环移位2位,可得表4中的N与(X,Y)的对应关系{y1,y0,x2,x1,x0}={n3,n2,n1,n0,n4}再循环移位2位,可得表5中的N与(X,Y)的对应关系{y1,y0,x2,x1,x0}={n1,n0,n4,n3,n2}再循环移位2位,又回到表1中的N与(X,Y)的对应关系{y1,y0,x2,x1,x0}={n4,n3,n2,n1,n0}可见,对于将缓冲区分为B×C个小块(C必须是B的整数倍),且B和C都为2的幂的情况,缓冲区在逻辑上的重映射可很方便用块号(即ASIC设计中的地址)的比特位循环移位来实现。
一般地,对于将缓冲区分为B×C个小块(C必须是B的整数倍),且B和C都为S的幂(S为大于1的自然数)的情况,设B=Sb,C=Sc,其中b,c为自然数,且b<c。设b,c的最大公因子为g。
则缓冲区需经过(b+c)/g次重映射后,可回到初始次序。
权利要求
1.一种减小在线图像压缩数据缓冲区大小的缓冲区读写方法,其特征在于,从行数据得到为块处理模块提供AxN的块数据,其中A、N可为任何自然数,包括如下步骤首先将缓冲区分成AxA等分;步骤1对数码相机传感器得到的输入数据进行水平写入,直到写入第A行的1/A行数据,这段时间缓冲区只能被写,不能被读;步骤2数码相机传感器在写入第A行剩余的A-1/A行数据过程中,块处理模块将左边第一个垂直小块列读走。步骤3-5缓冲区从步骤2进入垂直写、垂直读的状态,经过A-1个垂直小块列读写,到垂直读走最后一列;步骤6当输入数据垂直写入到第2A行的前1/A行数据过程中,缓冲区只能被写,不能被读;步骤7当输入数据写到第2A行剩余的(A-1)/A行数据过程中,块处理模块需要将最上方的一个水平小块行读走;步骤8-10缓冲区从步骤7进入水平写、水平读的状态。经过A-1个水平小块行读写,到水平读走最后一行;步骤11当输入数据水平写入第3A行的前1/A行数据过程中,缓冲区只能被写,不能被读;步骤12缓冲区的读写状态又重新回到类似步骤2,从而完成2A行数据的从行数据转换成AxN个像素块数据的过程。
2.一种减小在线图像压缩数据缓冲区大小的缓冲区读写方法,其特征在于,所述的A为8或16。
3.一种减小在线图像压缩数据缓冲区大小的缓冲区读写方法,其特征在于,从行数据得到为块处理模块提供BxN的块数据,其中,B,N可为任何自然数,包括如下步骤首先将缓冲区分成BxC等分,B表示行数,C表示列数,其中C大于B,且B和C都为S的幂,S为大于1的自然数,(假设一行有L个像素,则L必须是C*N的整数倍);步骤1对数码相机传感器得到的输入数据进行水平写入,直到写入第B行的第1个小块,这段时间缓冲区只能被写,不能被读;步骤2数码相机传感器在写入第B行的第1小块后,块处理模块将第1个垂直小块的读走。数码相机传感器在写入第B行的第2小块后,块处理模块可第2个垂直小块列读走。在数码相机传感器开始写入第(B+1)行的第1个小块之前,块处理模块必须读走第1个垂直小块列。步骤3此后,块处理模块依次将垂直小块列读走,直至将这B行的最后一个垂直小块列读走。每读走一个垂直小块列,数码相机传感器可垂直写入B/C行像素数据,共B个小块。对于重映射后的次序表而言,数码相机传感器是水平写入下一个B行图像的像素数据。步骤4在数码相机传感器写入第2B行的第1个小块期间,缓冲区只能被写,不能被读;步骤5重映射次序表,缓冲区的读写状态又重新回到类似步骤2,从而完成B行数据的从行数据转换成BxN个像素块数据的过程。
4.一种减小在线图像压缩数据缓冲区大小的缓冲区读写方法,其特征在于,所述的B、C为2的幂。
全文摘要
本发明提供一种减小在线图像压缩数据缓冲区大小的缓冲区读写方法,数据缓冲区首先水平写入A行数据,块处理模块进行垂直的读取,而垂直读取完的A个小块可以组成一个垂直小块,可以进行后续行的垂直写入,保存一行新的数据。该方法可对同一块缓冲区进行巧妙的分区和读写的合理分配,在一个可缓冲区中完成了原本需要两块缓冲区完成的功能,降低了最终的芯片面积和产品成本。
文档编号H04N5/14GK1787382SQ20051002519
公开日2006年6月14日 申请日期2005年4月19日 优先权日2005年4月19日
发明者林豪, 蒋道三 申请人:展讯通信(上海)有限公司