图像编码方法和装置与流程

文档序号:12890339阅读:215来源:国知局
图像编码方法和装置与流程

本发明涉及图像编码领域,具体而言,涉及一种图像编码方法和装置。



背景技术:

联合图像专家小组jpeg编码是一种广泛使用的无专利权的图像编码算法,通常的实现都是使用cpu或者gpu进行jpeg编码。其中,jpeg编码的步骤包括:1.图像分块;2.离散余弦变换(discretecosinetransform,简称dct)变换;3.量化;4.编码。如图1所示,先将原始图象数据分成8*8的小块,然后进行dct变换,再通过量化器根据量化表对dct变换之后得到的结果进行量化,然后通过熵编码器根据码表对量化之后得到的结果进行编码,得到最后的压缩数据。现有的技术通常全部使用cpu进行编码计算,cpu性能负载较大,或者,全部使用gpu进行编码,gpu在编码的时候,cpu处于空闲状态。

针对相关技术中的jpeg图像编码方法系统利用效率较低导致编码效率较低的技术问题,目前尚未提出有效的解决方案。



技术实现要素:

本发明实施例提供了一种图像编码方法和装置,以至少解决相关技术中的jpeg图像编码方法系统利用效率较低导致编码效率较低的技术问题。

根据本发明实施例的一个方面,提供了一种图像编码方法,包括:确定用于将原始图像编码为联合图像专家小组jpeg图像文件的中央处理器cpu和图像处理器gpu;利用确定的cpu和gpu共同执行编码过程。

进一步地,利用确定的cpu和gpu共同执行编码过程包括:通过cpu和gpu分别执行编码过程的不同子任务,其中,编码过程包括多个子任务。

进一步地,通过cpu和gpu分别执行编码过程的不同子任务包括:通过cpu对原始图像执行图像分块;调用gpu的应用程序编程接口api将图像分块的结果复制到gpu的显存中;通过gpu执行压缩,进而对压缩的结果执行量化运算;调用gpu的api将量化运算的结果复制到主机内存中;通过cpu对量化运算的结果执行熵编码,得到jpeg图像文件。

进一步地,通过cpu对原始图像执行图像分块包括:通过cpu从主机内存中读取原始图像;通过cpu按照预设长度和预设宽度对原始图像进行分块,得到多块图像;通过cpu提取每块图像中的预设参数,得到每块图像的参数矩阵。

进一步地,通过gpu执行压缩,进而对压缩的结果执行量化运算包括:通过gpu采用浮点float向量类型分别对每个参数矩阵执行离散余弦dct变换;通过gpu利用预设量化表分别对经过dct变换之后的每个参数矩阵进行量化。

进一步地,在通过gpu利用预设量化表分别对经过dct变换之后的每个参数矩阵进行量化之前,该方法还包括:通过cpu生成预设量化表;调用gpu的api将预设量化表复制到gpu的显存中。

进一步地,通过cpu对量化运算的结果执行熵编码包括:通过cpu基于zigzag扫描方式分别对量化之后的每个参数矩阵进行扫描,得到多个数组;通过cpu对多个数组进行huffman编码,得到jpeg图像文件。

根据本发明实施例的另一方面,还提供了一种图像编码装置,包括:确定单元,用于确定用于将原始图像编码为联合图像专家小组jpeg图像文件的中央处理器cpu和图像处理器gpu;执行单元,用于利用确定的cpu和gpu共同执行编码过程。

进一步地,执行单元进一步用于通过cpu和gpu分别执行编码过程的不同子任务,其中,编码过程包括多个子任务。

进一步地,执行单元包括:第一执行模块,用于通过cpu对原始图像执行图像分块;第一调用模块,用于调用gpu的应用程序编程接口api将图像分块的结果复制到gpu的显存中;第二执行模块,用于通过gpu执行压缩,进而对压缩的结果执行量化运算;第二调用模块,用于调用gpu的api将量化运算的结果复制到主机内存中;第三执行模块,用于通过cpu对量化运算的结果执行熵编码,得到jpeg图像文件。

进一步地,第一执行模块包括:读取模块,用于通过cpu从主机内存中读取原始图像;分块模块,用于通过cpu按照预设长度和预设宽度对原始图像进行分块,得到多块图像;提取模块,用于通过cpu提取每块图像中的预设参数,得到每块图像的参数矩阵。

进一步地,第二执行模块包括:变换模块,用于通过gpu采用浮点float向量类型分别对每个参数矩阵执行离散余弦dct变换;量化模块,用于通过gpu利用预设量化表分别对经过dct变换之后的每个参数矩阵进行量化。

进一步地,该装置还包括:生成模块,用于在通过gpu利用预设量化表分别对经过dct变换之后的每个参数矩阵进行量化之前,通过cpu生成预设量化表;第三调用模块,用于调用gpu的api将预设量化表复制到gpu的显存中。

进一步地,第三执行模块包括:扫描模块,用于通过cpu基于zigzag扫描方式分别对量化之后的每个参数矩阵进行扫描,得到多个数组;编码模块,用于通过cpu对多个数组进行huffman编码,得到jpeg图像文件。

在本发明实施例中,通过确定用于将原始图像编码为联合图像专家小组jpeg图像文件的中央处理器cpu和图像处理器gpu;利用确定的中央处理器cpu和图像处理器gpu共同执行编码过程,解决了相关技术中的jpeg图像编码方法系统利用效率较低导致编码效率较低的技术问题,进而实现了能够提高系统利用效率进而提高编码效率的技术效果。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是现有技术的一种图像编码方法的流程图;

图2是根据本发明实施例的一种可选的图像编码方法的流程图;

图3是根据本发明实施例的另一种可选的图像编码方法的流程图;

图4是根据本发明实施例的一种可选的图像分块的示意图;

图5是根据本发明实施例的一种可选的gpu中存储的参数矩阵的示意图;

图6是根据本发明实施例的一种可选的量化的示意图;

图7是根据本发明实施例的一种可选的zigzag扫描方式的示意图;

图8是根据本发明实施例的一种可选的图像编码装置的示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

实施例1

本申请提供了一种图像编码方法的实施例。

图2是根据本发明实施例的一种可选的图像编码方法的流程图,如图2所示,该方法包括如下步骤:

步骤s101,确定用于将原始图像编码为联合图像专家小组jpeg图像文件的中央处理器cpu和图像处理器gpu。

cpu和gpu可以均可以是一个或多个,在为多个的情况下,需要在多个处理器中选择一个处理器,在只有一个cpu或只有一个gpu的情况下,则直接采用唯一的cpu或gpu进行处理器。该步骤可以是通过cpu确定的,例如,通过cpu在主机的内存中获取预先存储的处理方式,根据预先存储的内容确定编码所用的cpu和gpu。

步骤s102,利用确定的cpu和gpu共同执行编码过程。

在确定出用于将原始图像编码为联合图像专家小组jpeg图像文件的中央处理器cpu和图像处理器gpu之后,利用确定的cpu和gpu共同执行编码过程。通过cpu和gpu共同执行编码过程,可以充分利用系统的效率,并可以对某个部分的运算选用处理效率较高的处理器(cpu或gpu)进行处理。

可选的,可以通过中央处理器cpu和图像处理器gpu分别执行编码过程的不同子任务,其中,编码过程包括多个子任务,或者,也可以将一个子任务通过中央处理器cpu和图像处理器gpu共同执行,中央处理器cpu和图像处理器gpu执行一个子任务的不同部分。

可选的,由于jpeg图像编码的过程包括多个子任务,具体每个子任务由哪个处理器(cpu或gpu)进行处理可以是预先存储的;也可以是用户输入的;也可以是随机确定的;也可以是根据当前每个处理器的状态确定的,例如,在处理当前子任务之前,先根据之前的处理器运行状态确定处于空闲状态的处理器(cpu或gpu),通过处于空闲状态的处理器来执行当前的子任务。

该实施例通过确定用于将原始图像编码为联合图像专家小组jpeg图像文件的中央处理器cpu和图像处理器gpu;利用确定的中央处理器cpu和图像处理器gpu共同执行编码过程,解决了相关技术中的jpeg图像编码方法系统利用效率较低导致编码效率较低的技术问题,进而实现了能够提高系统利用效率进而提高编码效率的技术效果。

可选地,可以通过分析中央处理器cpu和图像处理器gpu的优缺点,将jpeg编码中的不同子任务使用中央处理器cpu和图像处理器gpu进行协同异构运算,从而在降低中央处理器cpu负载的同时加快运算速度,不仅能够发挥中央处理器cpu和图像处理器gpu的优势,避免缺点,而且可以在图像处理器gpu进行运算的同时中央处理器cpu进行运算,流水作业,从而提高编码效率,有效降低中央处理器cpu负载。

可选地,通过中央处理器cpu和图像处理器gpu分别执行编码过程的不同子任务包括:通过中央处理器cpu对原始图像执行图像分块;调用图像处理器gpu的应用程序编程接口api将图像分块的结果复制到图像处理器gpu的显存中;通过图像处理器gpu执行压缩,进而对压缩的结果执行量化运算;调用图像处理器gpu的api将量化运算的结果复制到主机内存中;通过中央处理器cpu对量化运算的结果执行熵编码,得到jpeg图像文件。

可选地,通过中央处理器cpu对原始图像执行图像分块包括:通过中央处理器cpu从主机内存中读取原始图像;通过中央处理器cpu按照预设长度和预设宽度对原始图像进行分块,得到多块图像;通过中央处理器cpu提取每块图像中的预设参数,得到每块图像的参数矩阵。

可选地,通过图像处理器gpu执行压缩,进而对压缩的结果执行量化运算包括:通过图像处理器gpu采用浮点float向量类型分别对每个参数矩阵执行离散余弦dct变换;通过图像处理器gpu利用预设量化表分别对经过dct变换之后的每个参数矩阵进行量化。

可选地,在通过图像处理器gpu利用预设量化表分别对经过dct变换之后的每个参数矩阵进行量化之前,该方法还包括:通过中央处理器cpu生成预设量化表;调用图像处理器gpu的api将预设量化表复制到图像处理器gpu的显存中。

可选地,通过中央处理器cpu对量化运算的结果执行熵编码包括:通过中央处理器cpu基于zigzag扫描方式分别对量化之后的每个参数矩阵进行扫描,得到多个数组;通过中央处理器cpu对多个数组进行huffman编码,得到jpeg图像文件。

实施例2

作为上述实施例1的一种优选实施例,通过中央处理器cpu和图像处理器gpu分别执行编码过程的不同子任务。

如图3所示,是上述优选实施例的一种优选的实施方式,其中,通过(主机的)中央处理器cpu和图像处理器gpu分别执行编码过程的不同子任务包括:通过中央处理器cpu对原始图像执行图像分块;调用图像处理器gpu的应用程序编程接口api将图像分块的结果复制(数据拷贝)到图像处理器gpu的显存中;通过图像处理器gpu执行压缩,进而对压缩的结果执行量化运算;调用图像处理器gpu的api将量化运算的结果复制(数据拷贝)到主机内存中;通过中央处理器cpu对量化运算的结果执行熵编码,得到jpeg图像文件。

具体而言,通过中央处理器cpu对原始图像执行图像分块可以包括:通过中央处理器cpu从主机内存中读取原始图像(输入图像);通过中央处理器cpu按照预设长度和预设宽度对原始图像进行分块,得到多块图像;通过中央处理器cpu提取每块图像中的预设参数,得到每块图像的参数矩阵。

例如,按照8*8像素的大小对原始图像进行分块的情况如图4所示。中央处理器cpu从主机内存中读取图像数据,将图像数据分成8*8像素的图像块。在图像数据的宽、高方向按照8像素进行分割,不足8像素的图像块,将空白处的像素值采用0值补齐8像素。

图像中的每个像素可以包括多个参数,每个像素的像素值是多个参数的值,例如,以rgb形式存储的图像,每个像素值包括三个参数值(r,g,b),分别是r(red,红色)、g(green,绿色)、b(blue,蓝色)的参数值,而以hsv模型表示的图像,每个像素的值包括(h,s,v)三个参数的值,分别为h(hue,色度)、s(saturation,饱和度)、v(value,亮度)。每个参数矩阵只包括多个参数中的一个参数,每个参数矩阵中的各个元素的值为图像块中对应像素的一个参数的值。

图像分块的结果包括多个参数矩阵,每块图像对应有多个参数矩阵,在将图像分块的结果复制到图像处理器gpu的显存中之后,通过图像处理器gpu执行压缩,进而对压缩的结果执行量化运算。具体的,压缩的方式可以是dct变换,在压缩式,可以通过图像处理器gpu采用浮点float向量类型分别对每个参数矩阵执行离散余弦dct变换,如图5所示,每个参数矩阵中的各行和各列均采用图像处理器gpu浮点向量,参数矩阵中每个元素的值可以用一个字节的长度表示。dct变换的运算采用的是整数dct的蝶形变换,通过图像处理器gpu进行运算与通过中央处理器cpu进行运算的算法大致相同,分别对参数矩阵的8行和8列数据进行运算。区别在于通过图像处理器gpu进行dct变换时,可以采用图像处理器gpu的float向量类型来进行数据运算,加快运算速度。

对每个参数矩阵执行dct变换之后得到的结果仍然是大小相同的矩阵,可以称作dct变换二维数组,如图6所示。在执行dct变换之后,可以通过图像处理器gpu利用预设量化表分别对经过dct变换之后的每个参数矩阵进行量化。

量化运算的过程是把dct变换运算得出的结果与量化表上对应位置的数值相乘,如图6所示,量化表也即量化参数二维数组。预设量化表是与参数矩阵的大小相同的矩阵,例如,如图6所示,参数矩阵是8*8的二维数组,量化表也为8*8的二维数组。预设量化表可以是通过中央处理器cpu准备的,具体的,在进行量化之前,通过中央处理器cpu生成预设量化表,然后调用图像处理器gpu的api将预设量化表复制到图像处理器gpu的显存中。可选的,通过中央处理器cpu进行图像分块和准备量化表的步骤可以是同步进行的,在得到图像分块的结果和准备完量化表之后,调用图像处理器gpu的api,将图像分块的结果与量化表拷贝到图像处理器gpu显存中。

需要说明的是,不同的参数需要采用不同的量化表进行量化,例如,对于亮度的参数矩阵,采用用于量化图像亮度的量化表进行量化,对于色度的参数矩阵,采用用于量化图像色度的量化表进行量化。

通过图像处理器gpu进行量化运算的优势在于使用向量来进行乘法运算,能够加快运算速度。需要说明的是,每个参数矩阵可以由一个图像处理器gpu核心kernel进行处理,图像处理器gpu包括多个核心。

通过中央处理器cpu对量化运算的结果执行熵编码可以包括:通过中央处理器cpu基于zigzag扫描方式分别对量化之后的每个参数矩阵进行扫描,得到多个数组,通过中央处理器cpu对多个数组进行huffman编码,得到jpeg图像文件(压缩数据)。

dct变换和量化将一个n*n的二维数组变换成另一个n*n的二维数组,但是内存里所有数据都是线形存放的,如果一行行的存放这n2个数字,每行的结尾的点和下行开始的点就没有什么关系,所以jpeg规定按图7中所示的顺序依次保存和读取n2个dct的系数值,图7中为64个系数,这样数列里的相邻点在图片上也是相邻的了。这种数据的扫描、保存、读取方式,是从8*8矩阵的左上角开始,按照英文字母z的形状进行扫描的,因而称之为zigzag扫描排序。

huffman(赫夫曼)编码的编码方式为,对出现概率大的字符分配字符长度较短的二进制编码,对出现概率小的字符分配字符长度较长的二进制编码,从而使得字符的平均编码长度最短。

需要说明的是,在附图的流程图虽然示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

本申请还提供了一种存储介质的实施例,该实施例的存储介质包括存储的程序,其中,在程序运行时控制存储介质所在设备执行本发明实施例的图像编码方法。

本申请还提供了一种处理器的实施例,该实施例的处理器用于运行程序,其中,程序运行时执行本发明实施例的图像编码方法。

实施例3

本申请还提供了一种图像编码装置的实施例。

图8是根据本发明实施例的一种可选的图像编码装置的示意图,如图8所示,该装置包括确定单元10和执行单元20。

其中,确定单元用于确定用于将原始图像编码为联合图像专家小组jpeg图像文件的中央处理器cpu和图像处理器gpu;执行单元用于利用确定的cpu和gpu共同执行编码过程。

该实施例通过确定单元,用于确定用于将原始图像编码为联合图像专家小组jpeg图像文件的中央处理器cpu和图像处理器gpu;执行单元,用于利用确定的cpu和gpu共同执行编码过程,解决了相关技术中的jpeg图像编码方法系统利用效率较低导致编码效率较低的技术问题,进而实现了能够提高系统利用效率进而提高编码效率的技术效果。

作为一种可选的实施方式,执行单元进一步用于通过中央处理器cpu和图像处理器gpu分别执行编码过程的不同子任务,其中,编码过程包括多个子任务。

作为一种可选的实施方式,执行单元包括:第一执行模块,用于通过中央处理器cpu对原始图像执行图像分块;第一调用模块,用于调用图像处理器gpu的应用程序编程接口api将图像分块的结果复制到图像处理器gpu的显存中;第二执行模块,用于通过图像处理器gpu执行压缩,进而对压缩的结果执行量化运算;第二调用模块,用于调用图像处理器gpu的api将量化运算的结果复制到主机内存中;第三执行模块,用于通过中央处理器cpu对量化运算的结果执行熵编码,得到jpeg图像文件。

作为一种可选的实施方式,第一执行模块包括:读取模块,用于通过中央处理器cpu从主机内存中读取原始图像;分块模块,用于通过中央处理器cpu按照预设长度和预设宽度对原始图像进行分块,得到多块图像;提取模块,用于通过中央处理器cpu提取每块图像中的预设参数,得到每块图像的参数矩阵。

作为一种可选的实施方式,第二执行模块包括:变换模块,用于通过图像处理器gpu采用浮点float向量类型分别对每个参数矩阵执行离散余弦dct变换;量化模块,用于通过图像处理器gpu利用预设量化表分别对经过dct变换之后的每个参数矩阵进行量化。

作为一种可选的实施方式,该装置还包括:生成模块,用于在通过图像处理器gpu利用预设量化表分别对经过dct变换之后的每个参数矩阵进行量化之前,通过中央处理器cpu生成预设量化表;第三调用模块,用于调用图像处理器gpu的api将预设量化表复制到图像处理器gpu的显存中。

作为一种可选的实施方式,第三执行模块包括:扫描模块,用于通过中央处理器cpu基于zigzag扫描方式分别对量化之后的每个参数矩阵进行扫描,得到多个数组;编码模块,用于通过中央处理器cpu对多个数组进行huffman编码,得到jpeg图像文件。

上述的装置可以包括处理器和存储器,上述单元均可以作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。

存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram),存储器包括至少一个存储芯片。

上述本申请实施例的顺序不代表实施例的优劣。

在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。

其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

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