发明内容
本申请实施例提供了一种图像无损压缩方法和装置,可以在确保图像质量不变的情况下,提升图像的压缩率。
第一方面,本申请提供了一种图像无损压缩方法,该方法包括:获取第一图像数据,第一图像数据为十进制数据,第一图像数据包含M个第一整数,M个第一整数中的每个第一整数表征在第一图像上与该第一整数对应像素点的像素值,M为正整数;获取第一图像数据对应的目标数据序列,并利用目标数据序列对第一图像数据进行处理,得到第二图像数据,第二图像数据包含N个第二整数,M个第一整数中的每个第一整数与N个第二整数中的一个或多个第二整数对应,N为正整数;根据第二图像数据和目标数据序列生成第三图像数据,第三图像数据包含N个第三整数,N个第三整数与N个第二整数一一对应,N个第三整数中的任一第三整数用于表征该任一第三整数对应的第二整数在目标数据序列中的序号;根据第三图像数据,得到压缩后的图像。
可以看出,在本申请实施例中,首先将第一图像数据中的第一整数转换成目标数据序列中的元素,得到第二图像数据;然后确定第二图像数据中的第二整数在目标数据序列中的序号,将所确定的序号作为第三整数构成第三图像数据。由于第三整数是用于表征与其对应的第二整数在目标数据序列中的序号,因而第三整数小于与其对应的第二整数,因而节约存储空间,进而对由第三整数组成的第三图像数据进行压缩的过程可以有效提升压缩率;此外,由于本申请实施例对图像的十进制数据文件进行处理,不受图像尺寸的限制(例如,全景图或不同长宽比的图像),因而本申请实施例的方法应用场景广泛,适应性强。
在一种可行的实施方式中,上述目标数据序列包括质数序列、斐波拉契序列和阶乘序列中的一个或多个,阶乘序列中的任一元素用于表征该任一元素进行阶乘后的数值。
应当理解,在本申请实施例中,通过采用质数序列、斐波拉契序列和阶乘序列中的一个或多个对第一图像数据进行处理,得到第二图像数据;该第二图像数据可以为质数序列、或斐波拉契序列、或阶乘序列,或上述三种序列中两种或三种的组合。
在一种可行的实施方式中,上述利用目标数据序列对第一图像数据进行处理,得到第二图像数据,包括:利用目标数据序列中的一个或多个对第一图像数据进行处理,得到第二图像数据,第二图像数据中的N个第二整数为目标数据序列中的元素。
可以看出,在本申请实施例中,通过将第一图像数据中的第一整数转化成目标数据序列中的元素,得到第二图像数据,可以确保后续用第二图像数据中的第二整数在目标数据序列中的序号来表征第二整数,将每个第二整数对应的序号作为第三整数组成第三图像数据,由于第三整数小于与其对应的第二整数,因而减小了存储第三图像数据所需的存储空间,可以有效提升后续对第三图像数据进行压缩的压缩比。
在一种可行的实施方式中,上述根据第三图像数据,得到压缩后的图像,包括:获取目标数据序列对应的标志位数据;对第三图像数据和标志位数据进行无损压缩,得到压缩后的图像。
可以看出,在本申请实施例中,通过获取目标图像数据对应的标志位数据,可以确保后续对压缩后的图像进行解压时,准确还原第一图像数据,确保图像信息的完整性。
第二方面,本申请提供了一种图像无损压缩装置,包括:获取单元,用于第一图像数据,第一图像数据为十进制数据,第一图像数据包含M个第一整数,M个第一整数中的每个第一整数表征在第一图像上与该第一整数对应像素点的像素值,M为正整数;以及获取第一图像数据对应的目标数据序列;处理单元,用于利用目标数据序列对第一图像数据进行处理,得到第二图像数据,第二图像数据包含N个第二整数,M个第一整数中的每个第一整数与N个第二整数中的一个或多个第二整数对应,N为正整数;以及用于根据第二图像数据和目标数据序列生成第三图像数据,第三图像数据包含N个第三整数,N个第三整数与N个第二整数一一对应,N个第三整数中的任一第三整数用于表征该任一第三整数对应的第二整数在目标数据序列中的序号;压缩单元,用于根据第三图像数据,得到压缩后的图像。
在一种可行的实施方式中,目标数据序列包括质数序列、斐波拉契序列和阶乘序列中的一个或多个,阶乘序列中的任一元素用于表征该任一元素进行阶乘后的数值。
在一种可行的实施方式中,在利用目标数据序列对第一图像数据进行处理,得到第二图像数据的方面,处理单元具体用于:利用目标数据序列中的一个或多个对第一图像数据进行处理,得到第二图像数据,第二图像数据中的N个第二整数为目标数据序列中的元素。
在一种可行的实施方式中,获取单元,还用于获取目标数据序列对应的标志位数据;压缩单元,具体用于对第三图像数据和标志位数据进行无损压缩,得到压缩后的图像。
第三方面,本申请提供了一种计算机存储介质,该计算机存储介质用于存储程序指令,当该程序指令被执行时,执行上述第一方面中任一项的方法。
第四方面,本申请提供了一种芯片,该芯片包括处理器与数据接口,该处理器通过数据接口读取存储器上存储的指令,以执行如第一方面中任一项的方法。
具体实施方式
下面结合本申请实施例中的附图对本申请实施例进行详细描述。
请参阅图1,图1是本申请提供的一种图像无损压缩方法100的流程示意图。如图1所示,方法100包含步骤S110、S120、S130和S140。
步骤S110,获取第一图像数据,该第一图像数据为十进制数据,第一图像数据包含M个第一整数,M个第一整数中的每个第一整数表征在第一图像上与该第一整数对应像素点的像素值,M为正整数。
具体地,获取需要进行压缩的图像,读取该图像的原始图像数据,该原始图像可以为JPEG2000、JPEG XS等格式的图像,原始图像数据可以是二进制数据、十六进制数据或其它类型的数据,然后将该原始图像数据转换成十进制数据,得到上述第一图像数据,该第一图像数据中包含M个第一整数,该M个第一整数中的每个第一整数表征在需要压缩的第一图像上与该第一整数对应像素点的像素值,该第一整数可以是个位数、十位数、百位数、其它数位的整数,或者多种数位整数的组合,本申请对此不做具体限定。
步骤S120,获取第一图像数据对应的目标数据序列,利用目标数据序列对第一图像数据进行处理,得到第二图像数据,第二图像数据包含N个第二整数,M个第一整数中的每个第一整数与N个第二整数中的一个或多个第二整数对应,N为正整数。
在一种可行的实施方式中,该目标数据序列可以包括质数序列、斐波拉契序列和阶乘序列中的一个或多个,阶乘序列中的任一元素用于表征该任一元素进行阶乘后的数值;应当理解,目标质数序列也可包括其它类型的数据序列,本申请对此不做具体限定。
上述利用目标数据序列对第一图像数据进行处理,得到第二图像数据,具体为:利用目标数据序列中的一个或多个对第一图像数据进行处理,得到第二图像数据,其中,第二图像数据中的N个第二整数为目标数据序列中的元素。根据目标数据序列的不同,上述过程具体可分为三种方式:
(1)当目标数据序列为质数序列时,该质数序列为从2开始的,且包含所有质数的集合,例如,该质数序列可以为{2,3,5,7,11,13……},根据该质数序列对第一图像数据进行处理,得到第二图像数据的过程具体为:将第一图像数据中的M个第一整数中的非质数转换成质数,得到N个第二整数,该N个第二整数构成上述第一数据;此时该N个第二整数为质数序列中的元素。
上述将第一图像数据中的M个第一整数中的非质数转换成质数可以包括多种方式,例如,将非质数进行加或减运算,得到一个质数;或者将该非质数拆分为多个质数,该多个质数的乘积等于该非质数;此外,可以采用其它方式将非质数转化为质数,本申请实施例对此不做具体限定。
下面将举例详细说明将非质数转化为质数的过程:当M个第一整数中包含的非质数为21、26、62和96时,可采用2、3、5、7分别对该四个非质数进行加法操作,得到23、39、67和103;当M个第一整数中包含的非质数为210时,可将210拆分为2、3、5和7,该四个质数的乘积等于210,此时位于第一整数中的210在第二整数中对应的整数为四个(即2、3、5和7)。
(2)当目标数据序列为斐波拉契序列时,将M个第一整数中不属于斐波拉契序列的整数转换为属于斐波拉契序列中的整数,得到N个第二整数,该第二整数都属于斐波拉契序列。例如,当该M个第一整数中包含整数7、10和20时,可将该三个第一整数分别转换成第二整数:8、13和21,此时该N个第二整数为斐波拉契序列中的元素。
其中,斐波拉契序列的规律为任一整数等于该整数前面两个整数的和,即{0、1、1、2、3、5、8、13、21、34、……}。
(3)当目标数据序列为阶乘序列时,将M个第一整数中无法用阶乘表示的第一整数转换为可以使用阶乘进行表示的第二整数,第二N个第二整数。例如,上述M个第一整数中包含8和25时,将该两个第一整数转换成第二整数:6和24;其中,6可以表示为3的阶乘,即3!,24可以表示为4的阶乘,即4!,此时该N个第二整数为阶乘序列中的元素。
应当理解,也可以对上述M个第一整数都采用上述三种目标数据序列中的一个或多个进行处理,得到N个第二整数,本申请对此不做具体限定;此外,除本申请中所列出的三种目标数据序列外,可以采用其它数据序列对图像数据进行处理,本申请对此不做具体限定。
步骤S130,根据第二图像数据和目标数据序列生成第三图像数据,第三图像数据包含N个第三整数,该N个第三整数与N个第二整数一一对应,上述N个第三整数中的任一第三整数用于表征该任一第三整数对应的第二整数在目标数据序列中的序号。
具体地,根据N个第二整数中的每个第二整数确定在目标序列中该每个第二整数的序号,将该选出的序号作为与该第二整数对应的第三整数,根据每个第二整数所对应的第三整数生成第二图像数据。
下面将举例介绍如何根据第二图像数据中的N个第二整数所对应的第三整数生成第二图像数据,具体可分为三种方式:
(1)当目标数据序列为质数序列时,此时第二图像数据中的N个第二整数都属于质数序列中的元素,例如,第二图像数据中的第二整数可以包括{3,7,23,29},此时,该四个第二整数在质数序列中序号分别为{2,4,9,10},即为第三图像数据。
(2)当目标数据序列为斐波拉契序列时,此时第二图像数据中的N个第二整数都属于斐波拉契序列中的元素,例如,第二图像数据中的第二整数可以包括{3,8,21,34},此时,该四个第二整数在斐波拉契序列中序号分别为{5,7,9,10},即为第三图像数据。
(3)当目标数据序列为阶乘序列时,此时第二图像数据中的N个第二整数都属于阶乘序列中的元素,例如,第二图像数据中的第二整数可以包括{6,24,120,720},此时,该四个第二整数在阶乘序列中序号分别为{3,4,5,6},即为第三图像数据。
步骤S140,根据第三图像数据,得到压缩后的图像。
具体地,将上述第三图像数据中的N个第三整数按照从小到大或者从大到小的顺序进行排列,得到排序后的第三图像数据,然后对该排序后的第三图像数据采用无损压缩算法进行编码,得到压缩后的图像。
在一种可行的实施方式中,上述根据第三图像数据,得到压缩后的图像,包括:获取目标数据序列对应的标志位数据,对第三图像数据和标志位数据进行无损压缩,得到压缩后的图像。
其中,上述标志位数据用于指示第一图像数据采用何种类型的目标数据序列对该第一图像数据进行了处理。上述无损压缩编码方法可以是串表压缩算法(Lempel-Ziv-Welch Encoding,LZW),或哈夫曼编码或其它功能类似的算法,本申请对此不做具体限定。
可以看出,在本申请实施例中,首先将第一图像数据中的第一整数转换成目标数据序列中的元素,得到第二图像数据;然后确定第二图像数据中的第二整数在目标数据序列中的序号,将所确定的序号作为第三整数构成第三图像数据。由于第三整数是用于表征与其对应的第二整数在目标数据序列中的序号,因而第三整数小于与其对应的第二整数,进而对由第三整数组成的第三图像数据进行压缩的过程可以有效提升压缩率;此外,由于本申请实施例对图像的十进制数据文件进行处理,不受图像尺寸的限制(例如,全景图或不同长宽比的图像),因而本申请实施例的方法应用场景广泛,适应性强。
请参阅图2,图2为本申请实施例提供的一种图像无损压缩装置200的结构示意图。如图2所示,该装置200包括获取单元210、处理单元220和压缩单元230。
获取单元210,用于第一图像数据,第一图像数据为十进制数据,第一图像数据包含M个第一整数,M个第一整数中的每个第一整数表征在第一图像上与该第一整数对应像素点的像素值,M为正整数;以及获取第一图像数据对应的目标数据序列;
处理单元220,用于利用目标数据序列对第一图像数据进行处理,得到第二图像数据,第二图像数据包含N个第二整数,M个第一整数中的每个第一整数与N个第二整数中的一个或多个第二整数对应,N为正整数;以及用于根据第二图像数据和目标数据序列生成第三图像数据,第三图像数据包含N个第三整数,N个第三整数与N个第二整数一一对应,N个第三整数中的任一第三整数用于表征该任一第三整数对应的第二整数在目标数据序列中的序号。
压缩单元230,用于根据第三图像数据,得到压缩后的图像。
在一种可行的实施方式中,上述目标数据序列可以包括质数序列、斐波拉契序列和阶乘序列中的一个或多个,阶乘序列中的任一元素用于表征该任一元素进行阶乘后的数值。
在一种可行的实施方式中,在上述利用目标数据序列对第一图像数据进行处理,得到第二图像数据的方面,处理单元220具体用于:利用目标数据序列中的一个或多个对第一图像数据进行处理,得到第二图像数据,第二图像数据中的N个第二整数为目标数据序列中的元素。
在一种可行的实施方式中,获取单元210,还用于获取目标数据序列对应的标志位数据;压缩单元230,具体用于对第三图像数据和标志位数据进行无损压缩,得到压缩后的图像。
请参阅图3,图3是本申请实施例提供的一种电子设备300的结构示意图,如图3所示,电子设备300包括通信接口301、处理器302、存储器303和至少一个用于连接通信接口301、处理器302、存储器303的通信总线304。
存储器303包括但不限于是随机存储记忆体(random access memory,RAM)、只读存储器(read-only memory,ROM)、可擦除可编程只读存储器(erasable programmableread only memory,EPROM)、或便携式只读存储器(compact disc read-only memory,CD-ROM),该存储器303用于相关指令及数据。
通信接口301用于接收和发送数据。
处理器302可以是一个或多个中央处理器(central processing unit,CPU),在处理器302是一个CPU的情况下,该CPU可以是单核CPU,也可以是多核CPU。
该电子设备300中的处理器302用于读取存储器303中存储的一个或多个程序代码,执行以下操作:获取第一图像数据,第一图像数据为十进制数据,第一图像数据包含M个第一整数,M个第一整数中的每个第一整数表征在第一图像上与该第一整数对应像素点的像素值,M为正整数;获取第一图像数据对应的目标数据序列,并利用目标数据序列对第一图像数据进行处理,得到第二图像数据,第二图像数据包含N个第二整数,M个第一整数中的每个第一整数与N个第二整数中的一个或多个第二整数对应,N为正整数;根据第二图像数据和目标数据序列生成第三图像数据,第三图像数据包含N个第三整数,N个第三整数与N个第二整数一一对应,N个第三整数中的任一第三整数用于表征该任一第三整数对应的第二整数在目标数据序列中的序号;根据第三图像数据,得到压缩后的图像。
需要说明的是,电子设备300各操作的实现还可以对应参照上述图1中方法实施例中相应的描述。
本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,当其在终端上运行时,上述方法实施例中所示的方法流程得以实现。
本申请实施例还提供一种计算机程序产品,当计算机程序产品在终端上运行时,上述方法实施例中所示的方法流程得以实现。
应理解,本申请实施例中提及的处理器可以是中央处理单元(CentralProcessing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
还应理解,本申请实施例中提及的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(Read-Only Memory,ROM)、可编程只读存储器(Programmable ROM,PROM)、可擦除可编程只读存储器(Erasable PROM,EPROM)、电可擦除可编程只读存储器(Electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(Random Access Memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(Static RAM,SRAM)、动态随机存取存储器(Dynamic RAM,DRAM)、同步动态随机存取存储器(Synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(Double DataRate SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(Synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(Direct Rambus RAM,DR RAM)。
需要说明的是,当处理器为通用处理器、DSP、ASIC、FPGA或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件时,存储器(存储模块)集成在处理器中。
应注意,本文描述的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
上述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本申请实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
本申请实施例装置中的模块可以根据实际需要进行合并、划分和删减。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。