一种数字图像几何变换的处理方法及装置与流程

文档序号:12748839阅读:370来源:国知局
一种数字图像几何变换的处理方法及装置与流程

本发明涉及计算机技术领域,特别涉及一种数字图像几何变换的处理方法及装置。



背景技术:

随着计算机技术的发展,图像处理技术应用越来越广泛。在对图像进行处理时,会涉及图像的翻转、旋转、缩放、平移等操作。现有技术中,图像的旋转或/和翻转操作往往使用查表法。若要在H.264码流中实现图像旋转或/和翻转,就要求输入H.264编码器的数据源为已经实现旋转或/和翻转的宏块数据。

参阅图1所示,待编码的图像数据往往以宏块格式存储在内存中,在进行编码时,通过总线协议(Advanced eXtensible Interface,AXI)从内存中读取出来,送至编码器进行编码。而图像数据在预处理阶段时,是以行的顺序输出的,因此输出的图像数据存至内存中的过程中,要进行行至宏块的转换。

现有技术中一般是在进行行至宏块的转化的过程中完成图像旋转或/和翻转的操作。若一个宏块大小由16×16亮度像素块组成(仅从亮度信息Y进行说明),而行至宏块转化的内部缓存往往不够大,假设只有4行数据大小的缓存,所以,在需要进行旋转或/和翻转处理时,以旋转90度为例,因旋转90度处理后的图像在横、竖方向上发生了变化,因此旋转90度后的宏块在连续地址上只有4个有效数据,也就是说,此时发起总线请求,其突发脉冲(即burst)长度只有4个字节,大大降低了访问效率,而且,如果要增加burst长度,则相应缓存大小会急剧增加。

如果图像需要实现旋转或/和翻转要求,在将数据写入内存时,就需要获取当前数据在旋转或/和翻转后所从属的宏块坐标,并且,宏块内的数据也需要按 照旋转或/和翻转后的顺序重新排列。其中,实现方法为,将原始图像的像素,按照一定的地址顺序,写至内部缓存,在数据写至总线时,按顺序从缓存内读出,就可以达到旋转或/和翻转的目的。在按照一定的地址顺序,写至内部缓存的过程中,一般是以查表法来获取原始图像在旋转或/和翻转后的宏块坐标和当前数据应写至的缓存地址。其中,每一种旋转或/和翻转方式对应一张大小为256×256的查找表,以及,一张随图像宽、高变化的表格用来查找宏块坐标。这种方法消耗的资源较大,并且随着旋转、翻转方式的增加,消耗的资源也急剧增大。

综上所述,现有技术中,数字图像旋转、翻转一般都在图像预处理阶段进行,在实现过程中,往往使用查表法,降低了总线、内存访问的效率,增加了带宽消耗,也增大了功耗,硬件消耗的资源也较大,并且随着支持的旋转、翻转方式的增多,消耗的资源也急剧增加。



技术实现要素:

本发明实施例提供一种数字图像几何变换的处理方法及装置,用以解决现有技术中数字图像几何变换操作降低总线、内存访问效率的问题。

本发明实施例提供的具体技术方案如下:

一种数字图像几何变换的处理方法,包括:

根据图像的几何变换方式对应的预设的宏块映射关系,确定宏块的读取顺序,并按照所述读取顺序依次从内存中读取相应的宏块,其中,所述宏块映射关系用于表示几何变换后的一个宏块的编号与该宏块在原始图像中的位置关系;

每读取一个宏块,按照所述几何变化方式对应的预设的地址计算方法,计算当前读取的宏块内每一个数据对应的目标存放地址,按照获得的目标存放地址将宏块内的每一个数据依次存入数据缓存中;

将所述数据缓存中的数据按顺序读出并发送至编码器。

这样,实现了在H.264编码后的码流中的图像旋转、翻转,在不增加总线、内存访问次数的基础上,保障了总线、内存的访问效率,减少带宽消耗及相应的访问功耗,并且硬件实现资源也较小。

较佳地,在根据图像的几何变换方式对应的预设的宏块映射关系,确定宏块的读取顺序之前:

根据几何变换后宏块的编号、原始图像中水平方向的宏块个数以及原始图像中垂直方向的宏块个数,确定每一种几何变换方式对应的宏块映射关系;

根据将要写入缓存的数据的编号、当前读取的一个宏块在水平方向上的数据个数以及当前读取的一个宏块在垂直方向上的数据个数,确定每一种几何变换方式对应的宏块内数据存入缓存的地址计算方法。

较佳地,根据所述几何变换方式对应的预设的宏块映射关系,确定宏块的读取顺序,并按照所述读取顺序依次从内存中读取相应的宏块,具体包括:

根据所述几何变换方式对应的预设的宏块映射关系,依次计算所述几何变换后每一个编号的宏块在原始图像宏块阵列中对应的坐标值;

每计算一个坐标值,按照所计算的坐标值所对应的内存地址读取宏块数据;

其中,所述坐标值用于表征宏块在原始图像宏块阵列中的位置。

这样,使用实时计算而非查表的方式,获得宏块坐标,节省资源消耗。

较佳地,根据所述几何变换方式对应的预设的宏块映射关系,依次计算所述几何变换后每一个编号的宏块在原始图像宏块阵列中对应的坐标值,具体包括:

若所述几何变换为水平翻转,则宏块映射关系为以及y=W-1-(NUM%W);

若所述几何变换为垂直翻转,则宏块映射关系为以及y=(NUM%W);

若所述几何变换为90°旋转,则宏块映射关系为x=H-1-NUM%H以及

若所述几何变换为180°旋转,则宏块映射关系为以及y=W-1-NUM%W;

若所述几何变换为270°旋转,则宏块映射关系为x=NUM%H以及

若所述几何变换为水平翻转以及90°旋转,则宏块映射关系为x=H-1-NUM%H以及

若所述几何变换为垂直翻转以及90°旋转,则宏块映射关系为x=NUM%H以及

其中,W表示所述原始图像中水平方向的宏块个数,H表示所述原始图像中垂直方向的宏块个数,NUM为几何变换后宏块的编号,x为编号NUM的宏块在原始图像宏块阵列中对应的行坐标值,y为编号NUM的宏块在原始图像宏块阵列中对应的列坐标值,符号表示对符号内的参量进行向0方向取整操作,符号%表示取余操作;

较佳地,按照所述几何变化方式对应的预设的地址计算方法,计算当前读取的一个宏块内每一个数据对应的目标存放地址,具体包括:

若所述几何变换方式为水平翻转,则地址计算方法为:

若所述几何变换方式为垂直翻转,则地址计算方法为:

若所述几何变换方式为90°旋转,则地址计算方法为:

若所述几何变换方式为180°旋转,则地址计算方法为:

若所述几何变换方式为270°旋转,则地址计算方法为:

若所述几何变换方式为水平翻转以及90°旋转,则地址计算方法为:

若所述几何变换方式为垂直翻转以及90°旋转,则地址计算方法为:

其中,w表示所述当前读取的一个宏块在水平方向上的数据个数,h表示所述当前读取的一个宏块在垂直方向上的数据个数,num表示将要写入缓存的数据的编号,D表示宏块内编号num的数据应写入缓存的地址,符号表示对符号内的参量进行向0方向取整操作,符号%表示取余操作。

这样,使用实时计算,而非查表的方式,获得数据应写至缓存的地址,很大程度上节省了资源消耗。

较佳地,对几何变换后宏块的编号以及将要写入缓存的数据的编号皆执行以下取值方式:

从0开始取值,按从左到右,从上到下的顺序,依次加1。

一种数字图像几何变换的处理装置,包括:

宏块读取单元,用于根据图像几何变换方式对应的预设的宏块映射关系,确定宏块的读取顺序,并按照所述读取顺序依次从内存中读取相应的宏块,其中,所述宏块映射关系用于表示几何变换后的一个宏块的编号与该宏块在原始图像中的位置关系;

数据存入单元,用于每读取一个宏块,按照所述几何变化方式对应的预设的地址计算方法,计算当前读取的一个宏块内每一个数据对应的目标存放地址,按照获得的目标存放地址将宏块内的每一个数据依次存入数据缓存中;

数据读取单元,用于将所述数据缓存中的数据按顺序读出并发送至编码器。

这样,实现了在H.264编码后的码流中的图像旋转、翻转,在不增加总线、内存访问次数的基础上,保障了总线、内存的访问效率,减少带宽消耗及相应的访问功耗,并且硬件实现资源也较小。

较佳地,在根据图像的几何变换方式对应的预设的宏块映射关系,确定宏块的读取顺序之前:

设置单元,用于根据几何变换后宏块的编号、原始图像中水平方向的宏块个数以及原始图像中垂直方向的宏块个数,确定每一种几何变换方式对应的宏块映射关系;以及,用于根据将要写入缓存的数据的编号、当前读取的一个宏块在水平方向上的数据个数以及当前读取的一个宏块在垂直方向上的数据个数,确定每一种几何变换方式对应的宏块内数据存入缓存的地址计算方法。

较佳地,在根据图像几何变换方式对应的预设的宏块映射关系,确定宏块的读取顺序,并按照所述读取顺序依次从内存中读取相应的宏块时,所述宏块读取单元具体用于:

根据所述几何变换方式对应的预设的宏块映射关系,依次计算所述几何变换后每一个编号的宏块在原始图像宏块阵列中对应的坐标值;

每计算一个坐标值,按照所计算的坐标值所对应的内存地址读取宏块数据;

其中,所述坐标值用于表征宏块在原始图像宏块阵列中的位置。

这样,使用实时计算而非查表的方式,获得宏块坐标,节省资源消耗。

较佳地,在根据所述几何变换方式对应的预设的宏块映射关系,依次计算所述几何变换后每一个编号的宏块在原始图像宏块阵列中对应的坐标值时,所 述宏块读取单元具体用于:

若所述几何变换为水平翻转,则宏块映射关系为以及y=W-1-(NUM%W);

若所述几何变换为垂直翻转,则宏块映射关系为以及y=(NUM%W);

若所述几何变换为90°旋转,则宏块映射关系为x=H-1-NUM%H以及

若所述几何变换为180°旋转,则宏块映射关系为以及y=W-1-NUM%W;

若所述几何变换为270°旋转,则宏块映射关系为x=NUM%H以及

若所述几何变换为水平翻转以及90°旋转,则宏块映射关系为x=H-1-NUM%H以及

若所述几何变换为垂直翻转以及90°旋转,则宏块映射关系为x=NUM%H以及

其中,W表示所述原始图像中水平方向的宏块个数,H表示所述原始图像中垂直方向的宏块个数,NUM为几何变换后宏块的编号,x为编号NUM的宏块在原始图像宏块阵列中对应的行坐标值,y为编号NUM的宏块在原始图像宏块阵列中对应的列坐标值,符号表示对符号内的参量进行向0方向取整操作,符号%表示取余操作;

较佳地,在按照所述几何变化方式对应的预设的地址计算方法,计算当前读取的一个宏块内每一个数据对应的目标存放地址时,所述数据存入单元具体 用于:

若所述几何变换方式为水平翻转,则地址计算方法为:

若所述几何变换方式为垂直翻转,则地址计算方法为:

若所述几何变换方式为90°旋转,则地址计算方法为:

若所述几何变换方式为180°旋转,则地址计算方法为:

若所述几何变换方式为270°旋转,则地址计算方法为:

若所述几何变换方式为水平翻转以及90°旋转,则地址计算方法为:

若所述几何变换方式为垂直翻转以及90°旋转,则地址计算方法为:

其中,w表示所述当前读取的一个宏块在水平方向上的数据个数,h表示所述当前读取的一个宏块在垂直方向上的数据个数,num表示将要写入缓存的数据的编号,D表示宏块内编号num的数据应写入缓存的地址,符号表示对符号内的参量进行向0方向取整操作,符号%表示取余操作。

这样,使用实时计算,而非查表的方式,获得数据应写至缓存的地址,很大程度上节省了资源消耗。

较佳地,所述宏块读取单元以及所述数据存入单元对几何变换后宏块的编 号以及将要写入缓存的数据的编号皆执行以下取值方式:

从0开始取值,按从左到右,从上到下的顺序,依次加1。

附图说明

图1为现有技术中处理几何变换的系统结构图;

图2为本发明实施例中处理几何变换的系统结构图;

图3为本发明实施例中处理几何变换的流程图;

图4为本发明实施例中几何变换之前的原图像示意图;

图5为本发明实施例中水平翻转后的图像示意图;

图6a和6b为本发明实施例中垂直翻转后的图像示意图;

图7a和7b为本发明实施例中90°旋转后的图像示意图;

图8a和8b为本发明实施例中180°旋转后的图像示意图;

图9a和9b为本发明实施例中270°旋转后的图像示意图;

图10a和10b为本发明实施例中水平翻转以及90°旋转后的图像示意图;

图11a和11b为本发明实施例中垂直翻转以及90°旋转后的图像示意图;

图12为本发明实施例中宏块内数据顺序重新排列的操作示意图;

图13为本发明实施例中几何变换模块结构图。

具体实施方式

本发明实施例设计了一种数字图像几何变换的处理方法及装置,在H.264编码器前端的数据处理电路,基于宏块结构,通过简单的计算方式而非查表方式,进行图像旋转、翻转处理,以将旋转、翻转处理后的宏块数据输入H.264编码器中进行编码,从而实现在H.264编码后的码流中的图像旋转、翻转,在不增加总线、内存访问次数的基础上,保障了总线、内存的访问效率,减少带宽消耗及相应的访问功耗,并且硬件实现资源也较小。

需要说明的是,本发明实施例提供的数字图像几何变换的处理方法不局限 于H.264编码,只要是基于宏块结构,以块为单位的编码都适用,例如JPEG编码、H265编码等,因此,本发明实施例提供的方法对应用场景不作限制。

下面结合附图对本发明实施例优选的实施方案作详细说明。

参阅图2所示,本发明实施例中,将图像旋转或/和翻转的处理过程与行至宏块的转化过程分离开来,为方便叙述,将实现图像旋转或/和翻转操作的数据处理电路称为几何变换模块。

在预处理阶段,预处理模块只将图像数据进行行至宏块的转化,并将数据以宏块格式存储在内存中,在预处理过程中,并不涉及图像翻转或/和旋转的处理操作,因此,行至宏块的转化过程较为独立,假设从亮度信息Y(即Luminance)进行说明,那么,在内部缓存只有4行的情况下,数据写至总线,请求burst长度可以达到64个字节,从而避免了访问效率过低的问题。

图像数据在输入H.264编码器之前,由几何变换模块完成图像旋转或/和翻转的操作,具体地,几何变换模块按照指定的旋转翻转方式,计算当前需要取的宏块在原始图像宏块阵列中的行、列坐标,并基于计算获得的坐标值,从内存中读取对应的整个宏块的数据,然后,将宏块内的数据通过缓存的方式进行重新排列,重新排列后,该宏块内数据顺序为旋转或/和翻转方式所要求的图像数据,并将该图像数据送至H.264编码器进行编码,这样,可以通过计算方式而非查表方式获得数据应写至缓存的地址,大大节省了资源消耗。

参阅图3所示,本发明实施例中,在实现图像几何变化的过程中,几何变换模块具体执行以下操作:

步骤300:根据图像几何变换方式对应的预设的宏块映射关系,确定宏块的读取顺序,并按照读取顺序依次从内存中读取相应的宏块,其中,宏块映射关系用于表示几何变换后图像某一个宏块的编号与该宏块在原始图像中的位置关系。

在预处理阶段,预处理模块已将图像数据进行行至宏块的转化,并将数据以宏块格式存储在内存中。

几何变换模块首先确定图像的几何变换方式,该几何变换方式可包括不同角度的旋转、不同形式的翻转或两者的组合,其中,每一种几何变换方式都对应着一种宏块映射关系,该宏块映射关系为几何变换后图像某宏块的编号与该宏块在原始图像中的位置关系。

接着,几何变换模块需要按照一定的顺序从内存中将宏块读取出来,该顺序是基于当前的几何变换方式及其宏块映射关系确定的。

具体地,先为要取的宏块设置编号,该编号从0开始设置,从左到右,从上到下,每取一个宏块,编号的数值加1,假设当前图像划分为16×16=256个宏块,则编号值依次设置为0、1、2、3、……、255。例如,取第一个宏块时,即取编号值为0的宏块,根据当前几何变换方式对应的宏块映射关系,确定编号值为0的宏块在原始图像中的位置,即,计算编号值为0的宏块在原始图像宏块阵列中的坐标,根据坐标进一步计算该坐标值在内存中对应的地址信息,根据该地址信息在内存中读取相应的宏块。根据这种方式,可依次读取编号为1、2、3、……、255的宏块,即,可按照当前几何变换方式的要求从内存中按顺序依次将宏块读取出来。

步骤310:每读取一个宏块,按照几何变化方式对应的预设的地址计算方法,计算当前读取的一个宏块内每一个数据对应的目标存放地址,按照获得的目标存放地址将宏块内的每一个数据依次存入数据缓存中。

每一个宏块在刚刚读进来的时候,宏块内的数据顺序还是保持原来图像的数据排列,因此,要将每一个宏块内的数据排列顺序按照当前几何变换方式的要求重新排列。

每一种几何变换方式预先设置一种对应的地址计算方法,该地址计算方法用于计算宏块内每一个数据应该存放到数据缓存中的地址(该地址可称为目标存放地址),几何变换模块每读取一个宏块,按顺序依次计算当前宏块内的数据的目标存放地址,每计算一个数据的目标存放地址,就按照该目标存放地址将数据存放到数据缓存中去,按照该方法,依次将当前所取的宏块内的所有数 据都按照当前的几何变换方式的要求对应的进行重新排列,存在数据缓存中的宏块数据即是当前几何变换方式要求数据排列顺序。

步骤320:将数据缓存中的数据按顺序读出并发送至编码器。

在H.264码流中实现图像几何变换,就要求输入仅H.264编码器的数据源已经是几何变换后的宏块数据,经过步骤300和步骤310以后,将存在缓存中的数据按照地址顺序读出,就是按照几何变换要求的宏块数据,这样就能在H.264编码后的码流中实现当前要求的几何变换。

下面基于以下旋转、翻转两种几何变换方式对本发明进行进一步详细的说明。

参阅图4所示,为一个编码图像的原图像,在编码之前要进行几何变换,由图中可以看出,该图像由多个宏块组成,每一个宏块由一个16×16亮度像素组成,图中仅体现了亮度信息Y,除亮度信息之外,一个宏块通常还附加一个U和一个V的色度信息来共同组成,下面仅以亮度信息为例进行说明。

为了表示每一个宏块在整个图像中的位置,为每一个宏块标记一个坐标(x,y),x用来表示一个宏块在整个图像宏块阵列中位于第x行,y用来表示一个宏块在整个图像宏块阵列中位于第y列。

假设整个图像被分为16×16个宏块,即整个图像宏块阵列的每一行有16个宏块,每一列也有16个宏块,宏块坐标的x值和y值从0开始标记,四角为位于四个角落的四个宏块的示意图,用MB(Macro Block)来表示宏块,如图所示,左上角、右上角、左下角以及右下角四个宏块坐标分别为MB(0,0)、MB(0,15)、MB(15,0)以及MB(15,15)。

每一个宏块内又各包含一个16×16亮度像素,为方便描述,为宏块内的每一个数据记录一个其在宏块内的位置信息,如图4所示,以左上角宏块为例,共16行、16列数据,行和列数据都是从0开始计,第0行的数据记录为00_00、00_01、……、00_15,其中,00_00表示数据位于宏块内第0行第0列,00_01表示数据位于宏块内第0行第1列,……00_15表示数据位于宏块内第0行第 15列;第15行的数据记录为15_00、15_01、……、15_15,其中,15_00表示数据位于宏块内第15行第0列,15_01表示数据位于宏块内第15行第1列,……,15_15表示数据位于宏块内第15行第15列。

假设没有要求对该图像进行几何变换,则将图像数据从内存中输出,输入到编码器时,输入宏块的顺序为从左到右,从上到下,即先输入第0宏块行的宏块,第0行的输入顺序为MB(0,0)、MB(0,1)、MB(0,2)、……、MB(0,15),再依次输入第1宏块行的宏块、第2宏块行的宏块、……、第15宏块行的宏块,输入第i宏块行的宏块的顺序为MB(i,0)、MB(i,1)、MB(i,2)、……、MB(i,15)。

假设对该图像进行以下几种几何变换,则针对不同的几何变换方式,几何变换模块分别执行不同的操作。下面分别进行说明。

一、水平翻转

几何变换模块根据该几何变换方式对应的预设的宏块映射关系,依次计算该几何变换后每一个编号的宏块在原始图像宏块阵列中对应的坐标值;

每计算一个坐标值,按照这一个坐标值所对应的内存地址获取宏块数据,并将获得的宏块数据存储至内部缓存中;

其中,该坐标值用于表征宏块在原始图像宏块阵列中的位置。

具体地,几何变换模块从内存中将宏块按照一定的顺序读取出来。参阅图5所示,为图4所示的原图像水平翻转后的图像,可以看出,由于水平翻转后的图像,对于宏块阵列中的每一个宏块行,宏块的先后顺序正好跟原来图像宏块的先后顺序相反,即,原来第i宏块行的宏块顺序为MB(i,0)、MB(i,1)、MB(i,2)、……、MB(i,15),水平翻转后的宏块顺序变为MB(i,15)、MB(i,14)、MB(i,13)、……、MB(i,0)。因此,几何变换模块就要按照水平翻转后的宏块顺序从内存中将宏块依次读取出来。

从图5中还可以看出,经过水平翻转后的每一个宏块内的数据顺序也发生了变化,宏块内每一行的数据先后顺序也正好跟原来的图像宏块内数据先后顺 序相反,宏块内的数据顺序变化规律与宏块阵列的变化规律完全一致。

例如,原来图像在宏块阵列中左上角的宏块(即MB(0,0))在水平翻转后移到了的右上角,且这个MB(0,0)宏块内的数据顺序发生了变化,第0行的数据从左至右的顺序为00_15,00_14,……,00_01,00_00。

由于每一个宏块刚从内存中读取出来时,宏块内的数据顺序还是原来图像宏块内的数据顺序,因此几何变换模块需要将每一个宏块内的数据顺序按照水平翻转后的数据顺序进行重新排列。

对于宏块的读取顺序的确定,可以建立宏块映射关系,该宏块映射关系用于表示当前要取的宏块编号与在原始图像中的位置坐标之间的关联关系。

对水平翻转来说,宏块映射关系可以由式[1]和式[2]计算。

y=W-1-(NUM%W) [2]

其中,W为原始图像宏块阵列中一行的宏块个数,NUM为水平翻转后的图像宏块的编号,编号从0开始,从左到右,从上到下,依次递增1个,符号表示向0方向取整,符号%表示取余。

计算所得的x值即为当前编号对应的宏块在原来图像宏块阵列中的宏块行坐标,计算所得的y值即为当前编号对应的宏块在原来图像宏块阵列中的宏块列坐标。

例如,取水平翻转后的第1个宏块(即编号为0的宏块),计算该编号为0的宏块在原始图像宏块阵列中的坐标值,代入W为16,NUM为0,则x为0,y为15,即编号为0的宏块在原始图像宏块阵列中的坐标为(0,15),几何变换模块从内存中取第0宏块行、第15宏块列的宏块作为第1个宏块。

又例如,取水平翻转后的第4个宏块(即编号为3的宏块),计算该编号为3的宏块在原始图像宏块阵列中的坐标值,代入W为16,NUM为3,则x为0,y为12,即编号为3的宏块在原始图像宏块阵列中的坐标为(0,12),几何变换模块从内存中取第0宏块行、第12宏块列的宏块作为第4个宏块。

又例如,取水平翻转后的第21个宏块(即编号为20的宏块),计算该编号为20的宏块在原始图像宏块阵列中的坐标值,代入W为16,NUM为20,则x为1,y为11,即编号为20的宏块在原始图像中的坐标为(1,11),几何变换模块从内存中取第1宏块行、第11宏块列的宏块作为第21个宏块。

以此方法,可以计算水平翻转后每一个编号的宏块在原来图像中的位置坐标,根据计算所得的每一个坐标,按顺序依次读取宏块,生成水平翻转后的宏块阵列。

接着,几何变换模块将读进来的每一个宏块内的数据进行重新排列操作,在重新排列操作过程中,对一个宏块内的每一个数据建立编号,编号从0开始,从左到右,从上到下,依次递增1,按照编号顺序,计算每一个数据应该写入缓存的地址,按照计算所得的地址将每一个数据依次写入缓存中。

其中,对于重新排列顺序的确定,可以预设一种地址计算方法,该地址计算方法用于计算数据编号与写入缓存的地址之间的关联关系。

对于水平翻转后的宏块内数据重新排列的地址计算方法如式[3]所示。

w表示宏块的宽度,即一个宏块内一行的数据个数,num为当前要写入缓存的数据的编号,D表示数据应写入缓存的地址,符号表示向0方向取整,符号%表示取余。对于亮度信息Y来说,w和h都为16,对于色度信息U和V来说,w和h都为8。

其中,计算获得的地址的值表征数据在调整后宏块内的位置,也可以理解为,将宏块内的数据按水平翻转的要求写入缓存后,每一个数据对应一个编号,编号的方式还是从0开始,从左到右,从上到下,依次递增1,计算获得的地址的值为13,则表示该数据在水平翻转后宏块内的编号为13。

例如,计算第一个数据(即编号为0)应写入缓存的地址,应用式[3]代入w=16,num=0,计算可得地址为15,即,编号为0的数据水平翻转后的宏块 内的编号为15,也就是在MB(0,0)第一行的最后一个位置。

又例如,计算第18个数据(即编号为17)应写入缓存的地址,应用式[3]代入w=16,num=17,计算可得地址为30,即,编号为17的数据水平翻转后的宏块内的编号为30,也就是在MB(0,0)第二行的倒数第二个位置。

于此,可根据该地址计算方法将转换前宏块内的数据依次写入缓存中对应位置,写入缓存后的数据顺序符合水平翻转要求的宏块内数据顺序。

以上以水平翻转操作为例进行了说明,其他几何变换的操作与水平翻转类似,同样是根据宏块映射关系按一定顺序从内存中读取宏块,接着将读取的宏块内数据顺序按照地址计算方法进行重新排列。其他几何变换的宏块映射关系与地址计算方法与水平翻转不同,下面对其他的几何变换根据宏块映射关系以及地址计算方法进行的操作进行说明。

二、垂直翻转

参阅图6a所示,为图4所示的原图像垂直翻转后的图像,可以看出,垂直翻转以后的图像,宏块阵列中的宏块顺序都发生了变化,例如,原图像左上宏块MB(0,0)移到了左下角,并且,经过垂直翻转后每一个宏块内的数据顺序也发生了变化,如图6b所示,为图4所示的原图像左上角的宏块内数据经过垂直翻转后的宏块内数据顺序,第0行的数据从左至右的顺序为15_00,15_01,……,15_14,15_15。

几何变换模块按照垂直翻转后宏块顺序的要求,从内存中依次将宏块读取出来,同样,宏块在刚刚读取进来的时候,宏块内的数据顺序还是原来图像宏块内的数据顺序,几何变换模块接着将每一个宏块内的数据顺序按照垂直翻转后的数据顺序进行重新排列。

其中,对于宏块的读取顺序的确定,同样也建立宏块映射关系,对垂直翻转来说,宏块映射关系可以由式[4]和式[5]计算。

y=(NUM%W) [5]

其中,H为原始图像宏块阵列中一列的宏块个数,NUM为水平翻转后的图像宏块的编号,编号从0开始,从左到右,从上到下,依次递增1个,符号表示向0方向取整,符号%表示取余。

计算所得的x值即为当前编号对应的宏块在原来图像宏块阵列中的宏块行坐标,计算所得的y值即为当前编号对应的宏块在原来图像宏块阵列中的宏块列坐标。

例如,取垂直翻转后的第1个宏块(即编号为0的宏块),计算该编号为0的宏块在原始图像宏块阵列中的坐标值,代入W为16,NUM为0,则x为15,y为0,即编号为0的宏块在原始图像中的坐标为(15,0),几何变换模块从内存中取第15宏块行、第0宏块列的宏块作为第1个宏块。

以此方法,可以计算垂直翻转后每一个编号的宏块在原来图像宏块阵列中的位置坐标,根据计算所得的每一个坐标,按顺序依次读取宏块,生成垂直翻转后的宏块阵列。

接着,几何变换模块将读进来的每一个宏块内的数据进行重新排列操作,在重新排列操作过程中,对一个宏块内的每一个数据建立编号,编号从0开始,从左到右,从上到下,依次递增1,按照编号顺序,计算每一个数据应该写入缓存的地址,按照计算所得的地址将每一个数据依次写入缓存中。

其中,对于重新排列顺序的确定,同样可以预设一种地址计算方法,该地址计算方法用于计算数据编号与写入缓存的地址之间的关联关系。

对于垂直翻转后的宏块内数据重新排列的地址计算方法如式[6]所示

其中,w表示宏块的宽度,即一个宏块内一行的数据个数,h表示宏块的高度,即一个宏块内一列的数据个数,num为当前要写入缓存的数据的编号,D表示数据应写入缓存的地址,符号表示向0方向取整,符号%表示取余。

对于亮度信息Y来说,w和h都为16,对于色度信息U和V来说,w和 h都为8。

于此,可根据该地址计算方法将转换前宏块内的数据依次写入缓存中对应位置,写入缓存后数据顺序符合垂直翻转要求的宏块内数据顺序。

三、90°旋转

参阅图7a所示,为图4所示的原图像垂直翻转后的图像,可以看出,90°旋转以后的图像,宏块阵列中的宏块顺序都发生了变化,例如,原图像左上宏块MB(0,0)移到了右上角,并且,经过90°旋转后每一个宏块内的数据顺序也发生了变化,如图7b所示,为图4所示的原图像左上角的宏块内数据经过90°旋转后的宏块内数据顺序,第0行的数据从左至右的顺序为15_00,14_00,……,01_00,00_00。

几何变换模块按照90°旋转后宏块顺序的要求,从内存中依次将宏块读取出来,同样,宏块在刚刚读取进来的时候,宏块内的数据顺序还是原来图像宏块内的数据顺序,几何变换模块接着将每一个宏块内的数据顺序按照90°旋转后的数据顺序进行重新排列。

其中,对于宏块的读取顺序的确定,同样也建立宏块映射关系,对90°旋转来说,宏块映射关系可以由式[7]和式[8]计算。

x=H-1-NUM%H [7]

其中,H为图像宏块阵列中一列的宏块个数,NUM为水平翻转后的图像宏块的编号,编号从0开始,从左到右,从上到下,依次递增1个,符号表示向0方向取整,符号%表示取余。

计算所得的x值即为当前编号对应的宏块在原来图像宏块阵列中的宏块行坐标,计算所得的y值即为当前编号对应的宏块在原来图像宏块阵列中的宏块列坐标。

例如,取90°旋转后的第1个宏块(即编号为0的宏块),计算该编号为0的宏块在原始图像宏块阵列中的坐标值,代入H为16,NUM为0,则x为 15,y为0,即编号为0的宏块在原始图像宏块阵列中的坐标为(15,0),几何变换模块从内存中取第15宏块行、第0宏块列的宏块(即原图像宏块阵列中最后一行第一列的宏块)作为第1个宏块。

以此方法,可以计算90°旋转后每一个编号的宏块在原来图像宏块阵列中的位置坐标,根据计算所得的每一个坐标,按顺序依次读取宏块,生成90°旋转后的宏块阵列。

接着,几何变换模块将读进来的每一个宏块内的数据进行重新排列操作,在重新排列操作过程中,对一个宏块内的每一个数据建立编号,编号从0开始,从左到右,从上到下,依次递增1,按照编号顺序,计算每一个数据应该写入缓存的地址,按照计算所得的地址将每一个数据依次写入缓存中。

其中,对于重新排列顺序的确定,同样可以预设一种地址计算方法,该地址计算方法用于计算数据编号与写入缓存的地址之间的关联关系。

对于90°旋转后的宏块内数据重新排列的地址计算方法如式[9]所示

其中,w表示宏块的宽度,即一个宏块内一行的数据个数,h表示宏块的高度,即一个宏块内一列的数据个数,num为当前要写入缓存的数据的编号,D表示数据应写入缓存的地址,符号表示向0方向取整,符号%表示取余。

对于亮度信息Y来说,w和h都为16,对于色度信息U和V来说,w和h都为8。

于此,可根据该地址计算方法将转换前宏块内的数据依次写入缓存中对应位置,写入缓存后数据顺序符合90°旋转要求的宏块内数据顺序。

四、180°旋转

参阅图8a所示,为图4所示的原图像经180°旋转后的图像,可以看出,180°旋转以后的图像,宏块阵列中的宏块顺序都发生了变化,例如,原图像左上宏块MB(0,0)移到了右下角,并且,经过180°旋转后每一个宏块内 的数据顺序也发生了变化,如图8b所示,为图4所示的原图像左上角的宏块内数据经过180°旋转后的宏块内数据顺序,第0行的数据从左至右的顺序为15_15,15_14,……,15_01,15_00。

几何变换模块按照180°旋转后宏块顺序的要求,从内存中依次将宏块读取出来,同样,宏块在刚刚读取进来的时候,宏块内的数据顺序还是原来图像宏块内的数据顺序,几何变换模块接着将每一个宏块内的数据顺序按照180°旋转后的数据顺序进行重新排列。

其中,对于宏块的读取顺序的确定,同样也建立宏块映射关系,对180°旋转来说,宏块映射关系可以由式[10]和式[11]计算。

y=W-1-NUM%W [11]

其中,W为原始图像宏块阵列中一行的宏块个数,H为原始图像宏块阵列中一列的宏块个数,NUM为180°旋转后的图像宏块的编号,编号从0开始,从左到右,从上到下,依次递增1个,符号表示向0方向取整,符号%表示取余。

计算所得的x值即为当前编号对应的宏块在原来图像宏块阵列中的宏块行坐标,计算所得的y值即为当前编号对应的宏块在原来图像宏块阵列中的宏块列坐标。

例如,取180°旋转后的第1个宏块(即编号为0的宏块),计算该编号为0的宏块在原始图像宏块阵列中的坐标值,代入H为16,W为16,NUM为0,则x为15,y为15,即编号为0的宏块在原始图像宏块阵列中的坐标为(15,15),几何变换模块从内存中取第15宏块行、第15宏块列的宏块(即原图像宏块阵列最后一行最后一列的宏块)作为第1个宏块。

以此方法,可以计算180°旋转后每一个编号的宏块在原来图像宏块阵列中的位置坐标,根据计算所得的每一个坐标,按顺序依次读取宏块,生成180°旋转后的宏块阵列。

接着,几何变换模块将读进来的每一个宏块内的数据进行重新排列操作,在重新排列操作过程中,对一个宏块内的每一个数据建立编号,编号从0开始,从左到右从上到下,依次递增1,按照编号顺序,计算每一个数据应该写入缓存的地址,按照计算所得的地址将每一个数据依次写入缓存中。

其中,对于重新排列顺序的确定,同样可以预设一种地址计算方法,该地址计算方法用于计算数据编号与写入缓存的地址之间的关联关系。

对于180°旋转后的宏块内数据重新排列的地址计算方法如式[12]所示。

其中,w表示宏块的宽度,即一个宏块内一行的数据个数,h表示宏块的高度,即一个宏块内一列的数据个数,num为当前要写入缓存的数据的编号,D表示数据应写入缓存的地址,符号表示向0方向上取整,符号%表示取余。

对于亮度信息Y来说,w和h都为16,对于色度信息U和V来说,w和h都为8。

于此,可根据该地址计算方法将转换前宏块内的数据依次写入缓存中对应位置,写入缓存后的数据顺序符合180°旋转要求的宏块内数据顺序。

五、270°旋转

参阅图9a所示,为图4所示的原图像经270°旋转后的图像,可以看出,270°旋转以后的图像,宏块阵列中的宏块顺序都发生了变化,例如,原图像左上宏块MB(0,0)移到了左下角,并且,经过180°旋转后每一个宏块内的数据顺序也发生了变化,如图9b所示,为图4所示的原图像左上角的宏块内数据经过270°旋转后的宏块内数据顺序,第0行的数据从左至右的顺序为00_15,01_15,……,14_15,15_15。

几何变换模块按照270°旋转后宏块顺序的要求,从内存中依次将宏块读取出来,同样,宏块在刚刚读取进来的时候,宏块内的数据顺序还是原来图像宏块内的数据顺序,几何变换模块接着将每一个宏块内的数据顺序按照270° 旋转后的数据顺序进行重新排列。

其中,对于宏块的读取顺序的确定,同样也建立宏块映射关系,对270°旋转来说,宏块映射关系可以由式[13]和式[14]计算。

x=NUM%H [13]

其中,W为原始图像宏块阵列中一行的宏块个数,H为原始图像宏块阵列中一列的宏块个数,NUM为水平翻转后的图像宏块的编号,编号从0开始,从左到右,从上到下,依次递增1个,符号表示向0方向取整,符号%表示取余。

计算所得的x值即为当前编号对应的宏块在原来图像宏块阵列中的宏块行坐标,计算所得的y值即为当前编号对应的宏块在原来图像宏块阵列中的宏块列坐标。

例如,取270°旋转后的第1个宏块(即编号为0的宏块),计算该编号为0的宏块在原始图像宏块阵列中的坐标值,代入H为16,W为16,NUM为0,则x为0,y为15,即编号为0的宏块在原始图像宏块阵列中的坐标为(0,15),几何变换模块从内存中取第0宏块行、第15宏块列的宏块作为第1个宏块。

以此方法,可以计算270°旋转后每一个编号的宏块在原来图像宏块阵列中的位置坐标,根据计算所得的每一个坐标,按顺序依次读取宏块,生成270°旋转后的宏块阵列。

接着,几何变换模块将读进来的每一个宏块内的数据进行重新排列操作,在重新排列操作过程中,对一个宏块内的每一个数据建立编号,编号从0开始,从左到右,从上到下,依次递增1,按照编号顺序,计算每一个数据应该写入缓存的地址,按照计算所得的地址将每一个数据依次写入缓存中。

其中,对于重新排列顺序的确定,同样可以预设一种地址计算方法,该地址计算方法用于计算数据编号与写入缓存的地址之间的关联关系。

对于270°旋转后的宏块内数据重新排列的地址计算方法如式[15]所示。

其中,w表示宏块的宽度,即一个宏块内一行的数据个数,h表示宏块的高度,即一个宏块内一列的数据个数,num为当前要写入缓存的数据的编号,D表示数据应写入缓存的地址,符号表示向0方向取整,符号%表示取余。

对于亮度信息Y来说,w和h都为16,对于色度信息U和V来说,w和h都为8。

于此,可根据该地址计算方法将转换前宏块内的数据依次写入缓存中对应位置,写入缓存后的数据顺序符合270°旋转要求的宏块内数据顺序。

六、水平翻转+90°旋转

参阅图10a所示,为图4所示的原图像经水平翻转以及90°旋转后的图像,可以看出,水平翻转以及90°旋转以后的图像,宏块阵列中的宏块顺序都发生了变化,例如,原图像左上宏块MB(0,0)移到了右下角,并且,经过水平翻转以及90°旋转后每一个宏块内的数据顺序也发生了变化,如图10b所示,为图4所示的原图像左上角的宏块内数据经过水平翻转以及90°旋转后的宏块内数据顺序,第0行的数据从左至右的顺序为15_15,14_15,……,01_15,00_15。

几何变换模块按照水平翻转以及90°旋转后宏块顺序的要求,从内存中依次将宏块读取出来,同样,宏块在刚刚读取进来的时候,宏块内的数据顺序还是原来图像宏块内的数据顺序,几何变换模块接着将每一个宏块内的数据顺序按照水平翻转以及90°旋转后的数据顺序进行重新排列。

其中,对于宏块的读取顺序的确定,同样也建立宏块映射关系,对水平翻转以及90°旋转来说,宏块映射关系可以由式[16]和式[17]计算。

x=H-1-NUM%H [16]

其中,W为原始图像宏块阵列中一行的宏块个数,H为原始图像宏块阵列 中一列的宏块个数,NUM为水平翻转后的图像宏块的编号,编号从0开始,从左到右,从上到下,依次递增1个,符号表示向0方向取整,符号%表示取余。

计算所得的x值即为当前编号对应的宏块在原来图像宏块阵列中的宏块行坐标,计算所得的y值即为当前编号对应的宏块在原来图像宏块阵列中的宏块列坐标。

例如,取水平翻转以及90°旋转后的第1个宏块(即编号为0的宏块),计算该编号为0的宏块在原始图像宏块阵列中的坐标值,代入H为16,W为16,NUM为0,则x为15,y为15,即编号为0的宏块在原始图像宏块阵列中的坐标为(15,15),几何变换模块从内存中取第15宏块行、第15宏块列的宏块作为第1个宏块。

以此方法,可以计算水平翻转以及90°旋转后每一个编号的宏块在原来图像宏块阵列中的位置坐标,根据计算所得的每一个坐标,按顺序依次读取宏块,生成水平翻转以及90°旋转后的宏块阵列。

接着,几何变换模块将读进来的每一个宏块内的数据进行重新排列操作,在重新排列操作过程中,对一个宏块内的每一个数据建立编号,编号从0开始,从左到右,从上到下,依次递增1,按照编号顺序,计算每一个数据应该写入缓存的地址,按照计算所得的地址将每一个数据依次写入缓存中。

其中,对于重新排列顺序的确定,同样可以预设一种地址计算方法,该地址计算方法用于计算数据编号与写入缓存的地址之间的关联关系。

对于水平翻转以及90°旋转后的宏块内数据重新排列的地址计算方法如式[18]所示。

其中,w表示宏块的宽度,即一个宏块内一行的数据个数,h表示宏块的高度,即一个宏块内一列的数据个数,num为当前要写入缓存的数据的编号, D表示数据应写入缓存的地址,符号表示向0方向取整,符号%表示取余。

对于亮度信息Y来说,w和h都为16,对于色度信息U和V来说,w和h都为8。

于此,可根据该地址计算方法将转换前宏块内的数据依次写入缓存中对应位置,写入缓存后的数据顺序符合水平翻转以及90°旋转要求的宏块内数据顺序。

七、垂直翻转+90°旋转

参阅图11a所示,为图4所示的原图像经垂直翻转以及90°旋转后的图像,可以看出,垂直翻转以及90°旋转以后的图像,宏块阵列中的宏块顺序都发生了变化,例如,原图像第0行的宏块移到了第0列,原图像左上角的宏块依然在左上角,但是,经过垂直翻转以及90°旋转后每一个宏块内的数据顺序发生了变化,如图11b所示,为图4所示的原图像左上角的宏块内数据经过垂直翻转以及90°旋转后的宏块内数据顺序,第0行的数据从左至右的顺序为00_00,01_00,……,14_00,15_00。

几何变换模块按照垂直翻转以及90°旋转后宏块顺序的要求,从内存中依次将宏块读取出来,同样,宏块在刚刚读取进来的时候,宏块内的数据顺序还是原来图像宏块内的数据顺序,几何变换模块接着将每一个宏块内的数据顺序按照垂直翻转以及90°旋转后的数据顺序进行重新排列。

其中,对于宏块的读取顺序的确定,同样也建立宏块映射关系,对垂直翻转以及90°旋转来说,宏块映射关系可以由式[19]和式[20]计算。

x=NUM%H [19]

其中,W为原始图像宏块阵列中一行的宏块个数,H为原始图像宏块阵列中一列的宏块个数,NUM为水平翻转后的图像宏块的编号,编号从0开始,从左到右,从上到下,依次递增1个,符号表示向0方向取整,符号%表示取余。

计算所得的x值即为当前编号对应的宏块在原来图像宏块阵列中的宏块行坐标,计算所得的y值即为当前编号对应的宏块在原来图像宏块阵列中的宏块列坐标。

例如,取垂直翻转以及90°旋转后的第1个宏块(即编号为0的宏块),计算该编号为0的宏块在原始图像宏块阵列中的坐标值,代入H为16,W为16,NUM为0,则x为0,y为0,即编号为0的宏块在原始图像宏块阵列中的坐标为(0,0),几何变换模块从内存中取第0宏块行、第0宏块列的宏块作为第1个宏块。

又例如,取垂直翻转以及90°旋转后的第17个宏块(即编号为16的宏块),计算该编号为16的宏块在原始图像宏块阵列中的坐标值,代入H为16,W为16,NUM为16,则x为0,y为1,即编号为16的宏块在原始图像宏块阵列中的坐标为(0,1),几何变换模块从内存中取第0宏块行、第1宏块列的宏块作为第17个宏块。

以此方法,可以计算垂直翻转以及90°旋转后每一个编号的宏块在原来图像宏块阵列中的位置坐标,根据计算所得的每一个坐标,按顺序依次读取宏块,生成垂直翻转以及90°旋转后的宏块阵列。

接着,几何变换模块将读进来的每一个宏块内的数据进行重新排列操作,在重新排列操作过程中,对一个宏块内的每一个数据建立编号,编号从0开始,从左到右,从上到下,依次递增1,按照编号顺序,计算每一个数据应该写入缓存的地址,按照计算所得的地址将每一个数据依次写入缓存中。

其中,对于重新排列顺序的确定,同样可以预设一种地址计算方法,该地址计算方法用于计算数据编号与写入缓存的地址之间的关联关系。

对于垂直翻转以及90°旋转后的宏块内数据重新排列的地址计算方法如式[21]所示。

其中,w表示宏块的宽度,即一个宏块内一行的数据个数,h表示宏块的 高度,即一个宏块内一列的数据个数,num为当前要写入缓存的数据的编号,D表示数据应写入缓存的地址,符号表示向0方向取整,符号%表示取余。

对于亮度信息Y来说,w和h都为16,对于色度信息U和V来说,w和h都为8。

于此,可根据该地址计算方法将转换前宏块内的数据依次写入缓存中对应位置,写入缓存后的数据顺序符合垂直翻转以及90°旋转要求的宏块内数据顺序。

以上是对部分旋转、翻转方式及几种旋转翻转结合的方式进行的举例说明,其他旋转、翻转以及旋转翻转结合的几何变换方式的操作方法相同,只是宏块映射关系与地址计算方法不同。

另外需要说明的是,上述几种几何变换方式中的宏块映射关系与地址计算方法只是本发明实施例的一种举例,计算公式并不局限于此,可在本发明实施例列举的公式的基础上采取任何可以达到宏块映射或地址计算目的的数学计算方法进行修改。

在通过宏块映射关系计算宏块在原图像中的位置,并按照一定顺序从内存中读取宏块的过程中,可以将宏块映射关系中的宏块行、宏块列坐标的映射关系看成两个部分组成,第一部分可以看作是与宏块阵列的宽或高相关的部分,第二部分可以看作是通过取余或者取商计算的部分。表1是上述几种几何变换方式下每一部分的计算式,式中W为原始图像宏块阵列水平方向的宏块个数(即宏块阵列的宽度),H为原始图像宏块阵列垂直方向的宏块个数(即宏块阵列的高度)。

表1

在计算的过程中,按照表1中的记录,通过选择器可简单实现选择宏块行、宏块列坐标的第一部分值,通过两组计数器,可实现选择宏块行、宏块列坐标的第二部分值。关于宏块阵列宽度取商及取余操作对应一组计数器(例如cnt_w_q和cnt_w_r),关于宏块阵列高度取商及取余操作对应一组计数器(例如cnt_h_q和cnt_h_r)。这两组计数器设置为只有在每取一个宏块开始时进行如下操作一次:关于宏块阵列宽、高的取余计数器(即cnt_w_r和cnt_h_r)自加1,实现NUM%W以及NUM%H的计算,因其分别以W-1及H-1为模,即两个取余计数器当分别计算到W-1及H-1时,对应计数器各自清零,再取下一个宏块时从零开始计数;而关于宏块阵列宽、高取商的计数器(即cnt_w_q和cnt_h_q)实现以及的计算,分别以H-1及W-1为模,只有相应 的取余计数器各自记到模值时,该两个计数器才会分别自加1。

参照表1中记录的计算表达式,当实施不同方式的几何变换时,根据表1中记录的第一部分及第二部分的计算表达式,选择相应的计数器,进行计算,并将第一部分与第二部分的值进行相加,即得宏块映射后的宏块行、宏块列坐标,其中,第二部分若为负值,需将对应计数器计算的值进行取负操作。

通过计数器计算当前要取的宏块在宏块阵列中的行、列坐标后,按照计算所得的坐标通过总线将存于内存中对应的宏块数据读取出来,之后进行宏块内的数据顺序的重新排列,通过内部的块缓存实现,如图12所示,为宏块内数据顺序重新排列的示意图。

地址计算电路计算原宏块内的每一个数据应写入缓存的地址,根据地址按顺序将原宏块内的每一个数据写入相应的数据缓存。在读出时,按顺序读出即可。

与宏块映射类似,原宏块内的数据的写地址也可分成三部分来实现。这三部分的计算表达式如表2所示。

表2

几何变换在宏块内,按Y(亮度信息)、U、V(色度信息)独立成块实现。表2中w为宏块内一行数据的宽度,h为宏块内一列数据的高度,Y块的大小为16X16,故对于Y来说,w,h都为16;而对于U、V数据来说,根据其格式,块大小不同,在4:2:0时为8X8,w、h都为8。因Y、U、V三者操作一致,故在此只Y操作进行说明。

同样,通过一组计数器来实现取余及取商操作,即计算num%w及并通过简单的乘法,即可得到表2中第二部分和第三部分的值,与第一部分值进行相加后,即可得到当前数据写入缓存的地址。

如此,在一个宏块数据输入完成后,本地缓存的数据已是重新排列过顺序的,之后按地址先后顺序读出数据即可。

另外,在实现宏块内数据顺序调整时,还可以采用以下方式。

在写入缓存时不对原宏块内的数据顺序进行调整,而在读取的时候,按照一定的地址计算公式实时计算读取的顺序,按一定的顺序读出。

该地址计算公式如表3所示。

表3

同样,几何变换在宏块内,按Y(亮度信息)、U、V(色度信息)独立成块实现。表3中W为宏块内一行数据的宽度,H为宏块内一列数据的高度,Y块的大小为16X16,故对于Y来说,w,h都为16;而对于U、V数据来说,根据其格式,块大小不同,在4:2:0时为8X8,w、h都为8。因Y、U、V三者操作一致,故在此只Y操作进行说明。

基于上述实施例,如图13所示,本发明还设计了一种数字图像几何变换的处理装置,包括:

宏块读取单元131,用于根据图像几何变换方式对应的预设的宏块映射关系,确定宏块的读取顺序,并按照读取顺序依次从内存中读取相应的宏块,其中,宏块映射关系用于表示几何变换后的一个宏块的编号与该宏块在原始图像中的位置关系;

数据存入单元132,用于每读取一个宏块,按照几何变化方式对应的预设的地址计算方法,计算当前读取的一个宏块内每一个数据对应的目标存放地址,按照获得的目标存放地址将宏块内的每一个数据依次存入数据缓存中;

数据读取单元133,用于将数据缓存中的数据按顺序读出并发送至编码器。

较佳地,在根据图像的几何变换方式对应的预设的宏块映射关系,确定宏块的读取顺序之前:

设置单元130,用于根据几何变换后宏块的编号、原始图像宏块阵列中水平方向的宏块个数以及原始图像宏块阵列中垂直方向的宏块个数,确定每一种几何变换方式对应的宏块映射关系;以及,用于根据将要写入缓存的数据的编号、当前读取的一个宏块在水平方向上的数据个数以及当前读取的一个宏块在垂直方向上的数据个数,确定每一种几何变换方式对应的地址计算方法。

较佳地,在根据图像几何变换方式对应的预设的宏块映射关系,确定宏块的读取顺序,并按照读取顺序依次从内存中读取相应的宏块时,宏块读取单元131具体用于:

根据几何变换方式对应的预设的宏块映射关系,依次计算几何变换后每一个编号的宏块在原始图像宏块阵列中对应的坐标值;

每计算一个坐标值,按照所计算的坐标值所对应的内存地址读取宏块数据;

其中,坐标值用于表征宏块在原始图像宏块阵列中的位置。

较佳地,在根据几何变换方式对应的预设的宏块映射关系,依次计算几何变换后每一个编号的宏块在原始图像宏块阵列中对应的坐标值时,宏块读取单元133具体用于:

若所述几何变换为水平翻转,则宏块映射关系为以及y=W-1-(NUM%W);

若所述几何变换为垂直翻转,则宏块映射关系为以及y=(NUM%W);

若所述几何变换为90°旋转,则宏块映射关系为x=H-1-NUM%H以及

若所述几何变换为180°旋转,则宏块映射关系为以及y=W-1-NUM%W;

若所述几何变换为270°旋转,则宏块映射关系为x=NUM%H以及

若所述几何变换为水平翻转以及90°旋转,则宏块映射关系为x=H-1-NUM%H以及

若所述几何变换为垂直翻转以及90°旋转,则宏块映射关系为x=NUM%H以及

其中,W表示原始图像宏块阵列中水平方向的宏块个数,H表示原始图像宏块阵列中垂直方向的宏块个数,NUM为几何变换后宏块的编号,x为编号NUM的宏块在原始图像宏块阵列中对应的宏块行坐标值,y为编号NUM的宏块在原始图像宏块阵列中对应的宏块列坐标值,符号表示对符号内的参量进行向0方向取整操作,符号%表示取余操作;

较佳地,在按照几何变化方式对应的预设的地址计算方法,计算当前读取的一个宏块内每一个数据对应的目标存放地址时,数据存入单元132具体用于:

若所述几何变换方式为水平翻转,则地址计算方法为:

若所述几何变换方式为垂直翻转,则地址计算方法为:

若所述几何变换方式为90°旋转,则地址计算方法为:

若所述几何变换方式为180°旋转,则地址计算方法为:

若所述几何变换方式为270°旋转,则地址计算方法为:

若所述几何变换方式为水平翻转以及90°旋转,则地址计算方法为:

若所述几何变换方式为垂直翻转以及90°旋转,则地址计算方法为:

其中,w表示当前读取的一个宏块在水平方向上的数据个数,h表示当前读取的一个宏块在垂直方向上的数据个数,num表示将要写入缓存的数据的编号,D表示宏块内编号num的数据应写入缓存的地址,符号表示对符号内的参量进行向0方向取整操作,符号%表示取余操作。

较佳地,宏块读取单元131以及数据存入单元132对几何变换后宏块的编号以及将要写入缓存的数据的编号皆执行以下取值方式:

从0开始取值,按从左到右,从上到下的顺序,依次加1。

综上所述,本发明实施例中,根据图像的几何变换方式对应的预设的宏块映射关系,确定宏块的读取顺序,并按照所述读取顺序依次从内存中读取相应的宏块,每读取一个宏块,按照该几何变化方式对应的预设的地址计算方法,计算当前读取的一个宏块内每一个数据对应的目标存放地址,按照获得的目标存放地址将宏块内的每一个数据依次存入数据缓存中,将数据缓存中的数据按顺序读出并发送至编码器,这样,实现了在H.264编码后的码流中的图像旋转、翻转,在不增加总线、内存访问次数的基础上,保障了总线、内存的访问效率,减少带宽消耗及相应的访问功耗,并且硬件实现资源也较小。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入 式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1