专利名称:一种图像压缩和解压缩的方法和装置的制作方法
一种图像压缩和解压缩的方法和装置技术领域
本发明属于图像压缩领域,具体地说,涉及一种图像压缩和解压缩的方法和装置。
技术背景
随着智能手机的普及,智能手机已经成为人们生活中的必需品。从其发展趋势上 可以看出,智能手机的运算能力越来越强,网络连接速度越来越快。与此同时,与人们生活 息息相关的汽车,其智能化速度却远远不及智能手机。在这种情况下,一种弥补这种不平衡 的方法是,将车载终端和智能手机连接起来。图1是示意图,示出了车载终端和智能手机的 协作方式。如图1所示,用户通过操作车载终端来控制智能手机,在一定程度上可将智能手 机上的内容、软件应用等所包含的图像和声音发送到车载终端上显示和播放,从而可以利 用智能手机提供的功能来完成某些任务,如导航、网络连接等。MiirorLink即是为该场景设 计的协议。
通过图1可以看出,在两种设备之间传输的数据包括屏幕显示数据、声音数据、控 制数据这三类。在这三类数据中,数据量最大从而占用传输网络带宽最多的是屏幕显示数 据。例如,要传输一个分辨率为800X480的图像的话,若每个像素占用4个字节,则需要传 输的数据量为800X480X4=1536000字节,即约1.5M字节。考虑到刷屏频率,例如假设屏 幕每秒刷新10帧,则每秒需要传输的数据量为15M,这个数据量是十分巨大的。
在实际中,屏幕分辨率小于640X360的移动设备已经很少见。另一方面,如果刷 屏频率小于10帧/秒,则画面会有明显的卡顿现象。因此,若要同时满足分辨率和刷屏频 率的上述要求的话,设像素大小为4字节,则网络实际带宽就必须在15M/秒以上。屏幕分 辨率越高、刷屏频率越快,则要求的带宽就越大。目前无线传输的理论带宽仅能能达到约 15M/秒左右,实际带宽约为7M/秒左右,这显然无法满足上述要求。因此,如何减少传输的 数据量就成为了 一个重要的研究课题。
一种减少传输数据量的方法是,减少每个像素值所占的存储空间,即将32位(即4 个字节)像素值转成16位(即2个字节)像素值。这样虽然损失一些显示效果,却节约一半 的带宽。实际的效果表明,16位图像的显示效果对于MirrorLink这种应用场景来说是可容 忍的。以前面的例子来说,若采用16位像素值进行传输,则需要的带宽降低一半,为7M/秒 左右,这已经接近无线传输的实际带宽了。因此,在大多数MirrorLink的实现中,一般均采 用16位像素值进行传输。
采用16位像素值进行传输后,仍需进一步减小数据传输量,以提高效率以及增大 可扩展性。容易想到,可以将屏幕数据压缩后再进行传输,以减少数据的传输量。压缩数据 到达接收端后,通过解压缩来获得原始数据。
然而,选择适用于移动设备和车载终端的压缩算法是一个很大的挑战。这是因为, 这两种设备均属于嵌入式设备,运算能力都较弱。对于某些压缩算法来说,尽管其压缩比很 大,但其压缩运算的复杂度比较高,会占用大量的CPU运算时间,使得刷屏频率反而降低。 因此,需要选择一种运算复杂度与压缩比都适中的算法。
分析屏幕图像的像素数据可以发现,屏幕图像中重复的像素值占很大部分。因此, 可以采用行程长度编码(run-length encoding,RLE)压缩算法进行压缩。该算法的压缩和解压缩都比较简单,不会占用大量的CPU运算时间,而且在屏幕图像像素值重复较多时能够获得较大的压缩比,因此很适合用于该场合。
图2是行程长度编码的原理图。该算法将原始的一元数据转换为二元数据,即从 {数据元}转换为{重复次数,数据元}。如图2所示,设有一列数据AAABBBBCCCC,假设每个数据占用一个字节,则编码前该数据要占用的存储空间为11字节。采用RLE编码后,该列数据变为3A4B4C,即相邻的重复数据元不需要重复存储,只需要存储数据元及其重复次数即可。这列数据经RLE编码后仅需要6字节的存储空间,因此达到了压缩的目的。
使用RLE算法压缩图像时,利用图像像素值在每一像素行上都有可能重复的特点,通过逐行扫描的方式进行压缩。然而,对图像原始数据进行分析可以发现,图像像素如果发生重复,一般是成块重复,而不是以行为单位重复。因此,普通的行程长度编码并不能充分利用图像像素按区域重复的特征,因而不能有效地对图像进行压缩。
发明内容
本发明是为了解决现有技术中存在的上述技术问题而做出,其目的在于提供一种图像压缩和解压缩的方法和装置,以改善行程长度编码算法的压缩效率和运算速度。
为了实现上述目的,根据本发明的一个方面,提供一种图像压缩方法,其包括:
a)获取具有η行m列像素的图像,并创建空的存储文件;
b)在所述图像的η个像素行中确定当前未压缩像素数最大且行号最小的像素行, 如果该像素行当前的未压缩像素数不为零,则在所述存储文件中有序地记录该像素行的首个未压缩像素P的像素值,如果该像素行当前的未压缩像素数为零,则压缩过程结束,此时的所述存储文件即为图像压缩文件;
c)确定该像素行中从当前首个未压缩像素算起连续排列的与像素P有相同像素值的当前未压缩像素的数目N,并将这N个像素作为已压缩像素,在所述存储文件中有序地记录该像素数N,然后以该像素行为当前像素行执行步骤d);
d)如果当前像素行是末像素行,则执行步骤b);如果当前像素行不是末像素行,则在当前像素行的下一像素行中确定该像素行中从当前首个未压缩像素算起连续排列的与像素P有相同像素值的当前未压缩像素的数目N,并将这N个像素作为已压缩像素,其中,如果该像素数N > O,则在所述存储文件中有序地记录该像素数N,然后以该像素行作为当前像素行执行步骤d);如果该像素数N=0,则执行步骤b)。
优选地,在步骤d)中,每次在执行步骤b)之前还可以包括在所述存储文件中有序地记录特定标志位。
另外,优选地,所述图像压缩方法可以包括:建立具有η个元素的数组c [],使得该数组中的第i个元素的值c[i]为所述图像的第i个像素行的当前未压缩像素的数目,其中,O彡i彡n-1,从而在步骤b)中,通过所述数组c[]的各元素值c[i]以及各元素下标值 i,获得当前未压缩像素数最大且行号最小的像素行,并获得该像素行的第一个未压缩像素 P ;在步骤C)和d)中,通过所述数组C []和所述像素数N来确定下次执行步骤b)时各像素行的当前未压缩像素的数目。通过该技术方案,可以方便地对各像素行进行搜索和统计。
进一步优选地,所述的图像压缩方法还可以包括:建立具有m个元素的数组b[], 使得该数组的第j个元素的值b[j]为所述图像的当前已压缩像素数为j的像素行的个数, 其中,0彡j彡m-Ι,从而在步骤b)中,按j从小到大的顺序找出第一个b[j]不为O时的 j,该j值即为所述图像的各像素行的当前已压缩像素数中的最小值,从而得以确定所述图像的各像素行中当前已压缩像素数最小即当前未压缩像素数最大的像素行。通过该技术方案,可以提高压缩文件的速度。
根据本发明的另一方面,提供一种图像解压缩方法,其包括:
A)获取由上述图像压缩方法产生的图像压缩文件,并创建具有η行m列单元的空的存储文件;
B)在所述图像压缩文件中按所述图像压缩方法的记录顺序读取当前首个未读取数据作为像素值P’,并读取该数据之后的首个未读数据作为像素数N ;
C)在所述存储文件 的η个单元行中确定当前未存储单元数最大且行号最小的单元行,并使该单元行的前N个连续排列的当前未存储单元均存储像素值P’,然后以该单元行作为当前单元行执行步骤D);
D)在所述图像压缩文件中按所述图像压缩方法的记录顺序搜索当前首个未读取数据,如果该数据不存在,则解压缩过程结束,此时的所述存储文件即为图像原始文件;如果该数据存在且非像素值数据,则读取该数据作为像素数N,并使所述存储文件的当前单元行的下一单元行的前N个连续排列的当前未存储单元均存储像素值P’,然后以该下一单元行作为当前单元行执行步骤D);如果该数据存在且为像素值数据,则执行步骤B)。
上述图像解压缩方法的一个变型可以包括:
Α’)获取由在图形压缩文件中插入标志位的图像压缩方法产生的图像压缩文件, 并创建具有η行m列单元的空的存储文件;
B)在所述图像压缩文件中按所述图像压缩方法的记录顺序读取当前首个未读取数据作为像素值P’,并读取该数据之后的首个未读数据作为像素数N ;
C)在所述存储文件的η个单元行中确定当前未存储单元数最大且行号最小的单元行,并将该单元行的前N个连续排列的当前未存储单元均存储像素值P’,然后以该单元行作为当前单元行执行步骤D’ );
D’ )在所述图像压缩文件中按所述图像压缩方法的记录顺序搜索当前首个未读取数据,如果该数据不存在,则解压缩过程结束,此时的所述存储文件即为图像原始文件;如果该数据存在且非标志位数据,则读取该数据作为像素数N,并使所述存储文件中的当前单元行的下一单元行的前N个连续排列的当前未存储单元均存储像素值P’,然后以该下一单元行作为当前单元行执行步骤D’ );如果该数据存在且为标志位数据,则使该标记位数据的下一个数据为所述图像压缩文件中的当前首个未读取数据,并执行步骤B)。
优选地,所述图像解压缩方法可以包括:建立具有η个元素的数组c□,使得该数组中的第i个元素的值c[i]为所述存储文件的第i个单元行的当前未存储单元的数目,其中,O彡i彡n-1,从而在步骤C)中,通过所述数组c[]的各元素值c[i]以及各元素下标值 i,获得所述存储文件中的当前未存储单元数最大且行号最小的单元行;以及在步骤C)以及在步骤D)或D’)中,通过所述数组c[]和所述像素数N来确定下次执行步骤C)时所述存储文件的各单元行的当前未存储单元的数目。通过该技术方案,可以方便地对各单元行进行搜索和统计。
进一步优选地,所述图像解压缩方法还可以包括:建立具有m个元素的数组b 口, 使得该数组的第j个元素的值b[j]为所述存储文件的当前已存储单元数为j的单元行的 个数,其中,O ( j ( m-1,从而在步骤C)中,按j从小到大的顺序找出第一个b[j]不为O 时的j,该j值即为所述存储文件的各单元行的当前已存储单元数中的最小值,从而得以确 定所述存储文件的各单元行中当前已存储单元数最小即当前未存储单元数最大的单元行。 通过该技术方案,可以提高解压缩文件的速度。
根据本发明的又一个方面,提供一种图像压缩装置,其包括:
图像获取单元,用于获取具有η行m列像素的图像;
存储文件创建单元,用于创建空的存储文件;
像素行确定单元,用于在所述图像的η个像素行中确定当前未压缩像素数最大且 行号最小的像素行以及该像素行的首个未压缩像素P ;
像素数统计单元,用于统计所述图像的当前像素行中从当前首个未压缩像素算起 连续排列的与像素P有相同像素值的当前未压缩像素的数目N,并将这N个像素作为已压缩 像素;
记录单元,用于在所述存储文件中有序地记录由像素行确定单元多次确定的所述 像素P的像素值以及由像素数统计单元对于每次确定的像素P统计的至少一个像素行的所 述像素数N ;
末行判断单元,用于在记录单元每次记录了所述像素数N后判断当前像素行是否 为末像素行,如果判断为是末像素行,则由像素行确定单元重新确定所述像素P,如果判断 为不是末像素行,则由像素数统计单元统计当前像素行的下一像素行的所述像素数N;
像素数判断单元,用于判断所述图像的当前像素行中从当前首个未压缩像素算起 连续排列的与像素P有相同像素值的当前未压缩像素的数目N是否大于零,如果判断为N > O,则记录单元在所述存储文件中有序地记录N值,如果判断为Ν=0,则由像素行确定单元 重新确定所述像素P。
根据本发明的再一个方面,提供一种图像解压缩装置,其包括:
图像压缩文件获取单元,用于获取由上述图像压缩装置产生的图像压缩文件;
存储文件创建单元,用于创建具有η行m列单元的空的存储文件;
数据读取单元,用于在所述图像压缩文件中按所述图像压缩方法的记录顺序依次 读取当前首个未读取数据;
单元行确定单元,用于在所述存储文件的η个单元行中确定当前未存储单元数最 大且行号最小的单元行;
数据写入单元,用于在所述存储文件的单元行中写入像素值;
判断单元,用于判断数据读取单元每次所读取的当前首个未读取数据是否为像素 值数据,如果数据读取单元读取的当前首个未读取数据为像素值P’,则再读取该数据之后 的首个未读取数据作为像素数N,数据写入单元将像素值P’存储在单元行确定单元所确定 的当前单元行的前N个连续排列的当前未存储单元中;如果数据读取单元读取的当前首个 未读取数据为非像素值数据,则数据写入单元以该数据作为像素数N,并将像素值P’存储 在所述存储文件的当前单元行的下一单元行的前N个连续排列的当前未存储单元中。
由上面的描述可知,本发明所述的图像压缩和解压缩的方法和装置通过采用横向 深度优先(即,从当前未压缩像素数最大且行号最小的像素行开始压缩)以及碰壁反弹(即, 统计某像素行连续排列的与像素P有相同像素值的当前未压缩像素的数目N,然后在其下 一像素行统计所述像素数N)的搜索方式对图像局部区域内的像素进行充分搜索,节省了大 量重复存储相同像素值的空间,从而实现了较大的压缩比。另外,针对实际情况还提出了加 速查找过程的方法。实际效果显示,采用该方法和装置获得的平均压缩比在40%左右,且不 消耗过多的CPU资源,是一种适用范围较广的压缩算法。
通过参考以下结合附图的说明及权利要求书的内容,本发明的其它目的及结果将 更加明白及易于理解。在附图中:
图1是示意图,示出了车载终端和智能手机的协作方式;
图2是行程长度编码的原理图3是流程图,示出了本发明的一个实施例所述的图像压缩方法;
图4-1至图4-10是一组图像模型图,示出了采用本发明的一个实施例所述的图像 压缩方法压缩图像时已压缩像素与未压缩像素的变化;
图5是方框图,示出了本发明的一个实施例所述的图像压缩装置的构造;
图6是方框图,示出了本发明的一个实施例所述的图像解压缩装置的构造。
具体实施方式
在下面的描述中,出于说明的目的,为了提供对一个或多个实施例的全面理解,阐 述了许多具体细节。然而,很明显,也可以在没有这些具体细节的情况下实现这些实施例。 在其它例子中,为了便于描述一个或多个实施例,公知的结构和设备以方框图的形式示出。
图3是流程图,示出了本发明的一个实施例所述的图像压缩方法,图4-1至图4-10 是一组图像模型图,示出了采用本发明的一个实施例所述的图像压缩方法压缩图像时已压 缩像素与未压缩像素的变化。下面以图4-1至图4-10为例,结合图3的流程图来说明本发 明的一个实施例所述的图像压缩方法。
如图3所示,首先,在步骤SlOl中,获取具有η行m列像素的图像。所获得的图像 示例性地示于图4-1中,其中,该示例图像有n=6个像素行、m=6个像素列,另外该示例图像 所包含的像素具有两种像素值,即,无色方块所表示的像素具有像素值A,阴影方块所表示 的像素具有像素值B。同时,创建一个空的存储文件。该空的存储文件的示例性例子示于图 4-1的上部。
接着在步骤S103中,在所述图像的η个像素行中通过搜索确定当前未压缩像素数 最大且行号最小的像素行。然后在步骤S105中判断该像素行当前的未压缩像素数是否为 零,也即是判断该像素行当前是否有首个未压缩像素P。如果在步骤S105中判断为该像素 行当前的未压缩像素数不为零,则在步骤S107中在所述存储文件中有序地记录该像素行 的首个未压缩像素P的像素值。如果在步骤S105中判断为该像素行当前的未压缩像素数 为零(即没有未压缩像素P),则压缩过程结束,此时的所述存储文件即为图像压缩文件。
举例说,在图4-1所示的情形中,在开始压缩时,各像素行的当前未压缩像素数均为6且最大,而这其中行号最小的像素行为首像素行,该像素行中首个未压缩像素P为左上 角的像素,然后在存储文件中记录所述像素P的像素值A。而在图4-10所示的情形中,当压 缩完成时,各像素行的当前未压缩像素数均为O且最大,而这其中行号最小的像素行为首 像素行,该像素行中没有未压缩像素P,于是压缩过程结束。
然后,在步骤S109中,确定该像素行中从当前首个未压缩像素算起连续排列的与 像素P有相同像素值的当前未压缩像素的数目N,并将这N个像素作为已压缩像素,在所述 存储文件中有序地记录该像素数N,然后以该像素行为当前像素行执行步骤Slll。
举例说,在图4-2所示的情形中,首像素行中从当前首个未压缩像素算起连续排 列的与像素P有相同像素值的当前未压缩像素的数目N=3,于是,在所述存储文件中在已记 录的像素P的像素值A之后有序地记录像素数3 (此时N=3),这3个像素就变成已压缩像 素了,而下一次对该像素行进行统计时,该像素行的当前未压缩像素数变为6-3=3。应该注 意,只要在步骤S105中搜索到像素P,则在步骤S109中统计到的像素数N —定不为零,至少 为I (即像素P本身)。
然后,在步骤Slll中,判断当前像素行是否为末像素行。如果在步骤Slll中判断 为当前像素行不是末像素行,则在步骤S113中,在当前像素行的下一像素行中确定该像素 行中从当前首个未压缩像素算起连续排列的与像素P有相同像素值的当前未压缩像素的 数目N,并将这N个像素作为已压缩像素,接着在步骤SI 15中判断N是否为零。如果在步骤 SI 15中判断为该像素数N > O,则在步骤SI 17中,在所述存储文件中有序地记录该像素数 N,然后以该像素行作为当前像素行返回步骤S111,循环执行步骤S111-S117。
举例说,在图4-2所示的情形中,当前像素行(此时即为首像素行)不是末像素行, 其下一像素行中从当前首个未压缩像素算起连续排列的与像素P有相同像素值A的当前未 压缩像素的数目N=l,于是,在所述存储文件中在已记录的数据之后有序地记录该像素数I (此时N=l),这I个像素就变成已压缩像素了,而下一次对该像素行进行统计时,该像素行 的当前未压缩像素数变为6-1 = 5。循环执行上述步骤后可以得到,在后续像素行中,各像 素行从当前首个未压缩像素算起连续排列的与像素P有相同像素值A的当前未压缩像素的 数目N分别为3、2、1、6,于是,在所述存储文件中在已记录的数据之后有序地记录这些像素 数3、2、1、6,这些像素就变成已压缩像素了,而下一次对这些像素行进行统计时,这些像素 行的当前未压缩像素数分别变为6-3=3、6-2=4、6-1=5和6-6=0。
在图4-2所示的情形中,当对末像素行执行了统计并记录了所述像素数N后返 回步骤Slll判断该像素行是否为末像素行时,判断的结果为是末像素行,此时返回步骤 S103,重新搜索新的像素P。在一个例子中,每次在重新搜索像素P之前,还可以在所述存储 文件中在已记录的数据之后有序地记录特定标志位,例如Φ。该特定标记位用于在解压缩 时识别像素值数据,即,该标记位之后的数据为像素值数据,而不是像素数数据。但如果数 据的结构本身足以区别像素值数据和像素数数据,则不需要记录该标记位,以便使图形压 缩文件更小。当本轮循环结束后,图形压缩文件中存储的内容为{Α313216Φ},如图4-2的 上部所示。
本发明所述的图像压缩方法包括多轮由上述步骤构成的压缩循环,直到将所述图 像的全部像素都压缩了为止。图4-2至图4-10示出了对图4-1所示的图像进行各轮压缩 循环后已压缩像素与未压缩像素的对比。在每轮压缩循环中,首先在所述图像的η个像素行中通过搜索确定当前未压缩像素数最大且行号最小的像素行以及该像素行的首个未压缩像素P,并记录该像素P的像素值。图4-1至图4-9的左侧的下划线均示出了下轮压缩循环开始时的当前未压缩像素数最大且行号最小的像素行。然后,确定并记录像素P所在像素行及其后续像素行的每个像素行中从当前首个未压缩像素算起连续排列的与像素P有相同像素值的当前未压缩像素的数目N。图4-2至图4-10顺序地示出了各轮压缩循环结束时的图像压缩状态,每个图的左侧的虚线框均示出了本轮压缩循环结束后在压缩文件中顺序记录的各像素数N。其中,当在某个所述后续像素行中判断为从该像素行获得的像素数N=O时,则本轮压缩循环结束,返回步骤S103,执行下一轮压缩循环。N=O的情况有两种, 一种情况如图4-3、4-4、4-5、4-7、4-9所示,构成所述后续像素行的所有后续像素行中的最后一个后续像素行当前不存在未压缩像素(即,该像素行的所有像素当前都已压缩完毕), 另一种情况如图4-6、4-8所示,构成所述后续像素行的所有后续像素行中的最后一个后续像素行当前的首个未压缩像素的像素值与本轮压缩循环所确定的像素P的像素值不同。另夕卜,当某个所述后续像素行为末像素行时,则本轮压缩循环也结束,如图4-2所示。最后,每轮压缩循环结束后,所述存储文件的内容示于图4-1至4-10的上部。
上述在所述图像的η个像素行中通过搜索确定当前未压缩像素数最大且行号最小的像素行这一步骤可以通过例如以下的具体方法来实现。即,建立具有η个元素的数组 c□,使得该数组中的第i个元素的值c[i]为所述图像的第i个像素行的当前未压缩像素的数目,其中,O彡i彡η-l。在图像压缩过程中,通过所述数组c□的各元素值c[i]以及各元素下标值i,获得当前未压缩像素数最大且行号最小的像素行,并获得该像素行的第一个未压缩像素P ;通过所述数组c []和所述像素数N来确定下轮循环时各像素行的当前未压缩像素的数目,以计算机语言来表示,就是c [i]=c [i]-N。
在图4-1至图4-10中,在每个图的左侧示出了数组c []的各元素c[i]每轮压缩循环结束后的的当前值。其中,c 口包括6个元素(即OSiS 5),在未开始压缩图像时,数组c[]的各个元素的初值均为m=6 (即图像的列数)。
显然,也可以将c[i]定义为所述图像的第i个像素行的当前已压缩像素的数目, 则数组c[]的各元素c[i]的初值均为0,并且数组元素的更新公式为c[i]=c[i]+N。这种具体定义完全不影响对像素P的搜索以及对像素数N的统计。
在上述图像压缩方法的实施过程中,需要频繁搜索当前未压缩像素数最大的像素行。该过程会消耗大量的计算资源,因此,对该 过程进行优化是提高所述图像压缩方法的压缩速度的重要一步。
以采用数组c[]来表示各像素行的当前未压缩像素数为例。一种容易想到的提升搜索速度的方法是,对数组c []的元素进行排序。例如,根据数组c []中每个元素值的大小将其排成一个链表,这样当需要寻找其中的最大值时,直接从该链表的头部(或尾部)获取即可。但采用该方法需要在每次压缩完一像素行并更新了与该像素行对应的C[i]的值之后对C[i]进行插入排序,而大量的插入排序会导致很低的运算性能。
另一种解决方法是对数组c []中的元素值做哈希(hash),而在哈希冲突时进行链表扩展。哈希算法一般可以采用将c[i]的值对图像的像素列长度取余来进行哈希,即, hash(c[i])=c[i]%m,其中m为图像像素列的列数。这样,原本无序的数组c[]经过哈希运算存入相应的位置后,就变成了有序的数组。该方法的运算速度虽然比前一方法的运算速度快些,但是,对于图像压缩这样的应用,哈希算法很容易产生哈希冲突。因此仍需在链表扩展时花大量的运算时间进行插入排序。
本发明提供一种对当前未压缩像素数最大的像素行进行搜索的方法,该方法能显著提升搜索速度。具体说,建立具有m个元素的数组b [],使得该数组的第j个元素的值 b[j]为所述图像的当前已压缩像素数为j的像素行的个数,其中,O彡j彡m-1,从而在搜索当前未压缩像素数最大的像素行时,通过数组b[]确定所述图像的各像素行中当前未压缩像素数最大的像素行。
初始时,当前已压缩像素数为O的像素行的个数为η,即,所有像素行均未压缩。通过数组b□,可以快速确定所有像素行中已压缩像素数最小的像素行。S卩,从j = O开始按 j从小到大的顺序查找第一个b[j]不等于O时的j值。该过程是一个非常快速的过程., 这是因为,每次查找出的j是不断增大的,即,下一次查找j时不需要从j = O开始,仅需要从本次查找到的j开始。因此,通过该方法可以快速确定出当前已压缩像素数的最小值(也即当前未压缩像素数的最大值)。然后,再在所有像素行中查找当前已压 缩像素数为该最小值的像素行,即查找当前未压缩像素数最大的像素行。这个过程不需要任何排序操作。实际效果表明,该方法是一种CPU消耗很小的方法。
本发明也提供与上述图像压缩方法相对应的图像解压缩方法。
本发明所述的图像解压缩方法包括下述步骤:
A)获取由前面所描述的图像压缩方法产生的图像压缩文件,并创建具有η行m列单元的空的存储文件;
B)在所述图像压缩文件中按所述图像压缩方法的记录顺序读取当前首个未读取数据作为像素值P’,并读取该数据之后的首个未读数据作为像素数N ;
C)在所述存储文件的η个单元行中确定当前未存储单元数最大且行号最小的单元行,并使该单元行的前N个连续排列的当前未存储单元均存储像素值P’,然后以该单元行作为当前单元行执行步骤D);
D)在所述图像压缩文件中按所述图像压缩方法的记录顺序搜索当前首个未读取数据,如果该数据不存在,则解压缩过程结束,此时的所述存储文件即为图像原始文件;如果该数据存在且非像素值数据,则读取该数据作为像素数N,并使所述存储文件的当前单元行的下一单元行的前N个连续排列的当前未存储单元均存储像素值P’,然后以该下一单元行作为当前单元行执行步骤D);如果该数据存在且为像素值数据,则执行步骤B)。
上述图像解压缩过程与前面所述的图像压缩过程是对应一致的,也是包括由多轮解压缩步骤构成的循环。上述图像解压缩过程的每轮解压缩循环结束后,在包括η行m列单元的存储文件中恢复了的像素的分布与所述图像压缩过程的每轮压缩循环结束后在包括η 行m列像素的图像中已压缩的像素的分布完全一样。本领域中的技术人员很容易从所述图像压缩过程理解所述图像解压缩过程,因此,这里就不再赘述。
如果在所述图像压缩过程中,在图像压缩文件中插入了所述特定标记位(例如 Φ ),则上述图像解压缩过程中的步骤D)可以变为下述步骤D’ ):在所述图像压缩文件中按所述图像压缩方法的记录顺序搜索当前首个未读取数据,如果该数据不存在,则解压缩过程结束,所述存储文件即为图像原始文件;如果该数据存在且非标志位数据,则读取该数据作为像素数N,并使所述存储文件中的当前单元行的下一单元行的前N个连续排列的当前未存储单元均存储像素值P’,然后以该下一单元行作为当前单元行执行步骤D’);如果该数据存在且为标志位数据,则使该标记位数据的下一个数据为所述图像压缩文件中的当前首个未读取数据,并执行步骤B)。
同理,在上述图像解压缩过程中,在所述存储文件的η个单元行中确定当前未存储单元数最大且行号最小的单元行这一步骤可以通过下述具体方法来实现。该方法与图像压缩过程中在所述图像的η个像素行中确定当前未压缩像素数最大且行号最小的像素行的方法完全类似。即,上述图像解压缩方法可以包括:建立具有η个元素的数组c□,使得该数组中的第i个元素的值c [i]为所述存储文件的第i个单元行的当前未存储单元的数目, 其中,O彡i彡n-1,从而在步骤C)中,通过所述数组c[]的各元素值c[i]以及各元素下标值i,获得所述存储文件中的当前未存储单元数最大且行号最小的单元行;以及在步骤C) 以及在步骤D)或D’)中,通过所述数组c[]和所述像素数N来确定下次执行步骤C)时所述存储文件的各单元行的当前未存储单元的数目。
为了提高所述图像解压缩过程的速度,所述图像解压缩方法还可以包括:建立具有m个元素的数组b □,使得该数组的第j个元素的值b[j]为所述存储文件的当前已存储单元数为j的单元行的个数,其中,O彡j彡m-1,从而在步骤C)中,通过数组b[]确定所述存储文件的所有单元行中当前未存储单元数最大的单元行。该图像解压缩过程的加速方法与前述图像压缩过程的加速方法完全类似,这里就不再赘述。
如上参照图3以及图4-1至图4-10描述了本发明所述的图像压缩方法和相应的图像解压缩方法。本发明所述的图像压缩方法和相应的图像解压缩方法可以采用软件实现,也可以采用硬件实现,或采用软件和硬件组合的方式实现。
图5是本发明的一个实施例所述的图像压缩装置的结构示意图。如图5所示,本发明的一个实施例所述的图像压缩装置200包括:图像获取单元210、存储文件创建单元220、 像素行确定单元230、像素数统计单元240、记录单元250、末行判断单元260和像素数判断单元270。
图像获取单元210用于获取具有η行m列像素的图像。
存储文件创建单元220用于创建空的存储文件。
像素行确定单元230用于在所述图像的η个像素行中确定当前未压缩像素数最大且行号最小的像素行以及该像素行的首个未压缩像素P。
像素数统计单 元240用于统计所述图像的当前像素行中从当前首个未压缩像素算起连续排列的与像素P有相同像素值的当前未压缩像素的数目N,并将这N个像素作为已压缩像素。
记录单元250用于在所述存储文件中有序地记录由像素行确定单元230多次确定的所述像素P的像素值以及由像素数统计单元240对于每次确定的像素P统计的至少一个像素行的所述像素数N。
末行判断单元260用于在记录单元250每次记录了所述像素数N后判断当前像素行是否为末像素行,如果判断为是末像素行,则由像素行确定单元230重新确定所述像素 P,如果判断为不是末像素行,则由像素数统计单元240统计当前像素行的下一像素行的所述像素数N。
像素数判断单元270,用于判断所述图像的当前像素行中从当前首个未压缩像素算起连续排列的与像素P有相同像素值的当前未压缩像素的数目N是否大于零,如果判断 为N > O,则记录单元250在所述存储文件中有序地记录N值,如果判断为N=O,则由像素行 确定单元230重新确定所述像素P。
图6是本发明的一个实施例所述的图像解压缩装置的结构示意图。如图6所示,本 发明的一个实施例所述的图像解压缩装置300包括:图像压缩文件获取单元310、存储文件 创建单元320、数据读取单元330、单元行确定单元340、数据写入单元350和判断单元360。
图像压缩文件获取单元310用于获取由图像压缩装置200所产生的图像压缩文 件。
存储文件创建单元320用于创建具有η行m列单元的空的存储文件;
数据读取单元330用于在所述图像压缩文件中按所述图像压缩方法的记录顺序 依次读取当前首个未读取数据。
单元行确定单元340用于在所述存储文件的η个单元行中确定当前未存储单元数 最大且行号最小的单元行。
数据写入单元350。用于在所述存储文件的单元行中写入像素值;
判断单元360。用于判断数据读取单元330每次所读取的当前首个未读取数据是 否为像素值数据,如果数据读取单元330读取的当前首个未读取数据为像素值P’,则再读 取该数据之后的首个未读取数据作为像素数N,数据写入单元350将像素值P’存储在单元 行确定单元340所确定的当前单元行的前N个连续排列的当前未存储单元中;如果数据读 取单元330读取的当前首个未读取数据为非像素值数据,则数据写入单元350以该数据作 为像素数N,并将像素值P’存储在所述存储文件的当前单元行的下一单元行的前N个连续 排列的当前未存储单元中。
由上面的描述可知,本发明所述的图像压缩和解压缩的方法和装置通过采用横向 深度优先(即,从当前未压缩像素数最大且行号最小的像素行开始压缩)以及碰壁反弹(即, 统计某像素行连续排列的与像素P有相同像素值的当前未压缩像素的数目N,然后在其下 一像素行统计所述像素数N)的搜索方式对图像局部区域内的像素进行充分搜索,节省了大 量重复存储相同像素值的空间,从而实现了较大的压缩比。另外,针对实际情况还提出了加 速查找过程的方法。实际效果显示,采用该方法和装置获得的平均压缩比在40%左右,且不 消耗过多的CPU资源,是一种适用范围较广的压缩算法。
尽管已经结合详细示出并描述的优选实施例公开了本发明,但是本领域技术人员 应当理解,对于上述本发明所提出的图像压缩和图像解压缩方法和装置,还可以在不脱离 本发明内容的基础上做出各种改进。因此,本发明的保护范围应当由所附的权利要求书的 内容确定。
权利要求
1.一种图像压缩方法,包括:a)获取具有η行m列像素的图像,并创建空的存储文件;b)在所述图像的η个像素行中确定当前未压缩像素数最大且行号最小的像素行,如果该像素行当前的未压缩像素数不为零,则在所述存储文件中有序地记录该像素行的首个未压缩像素P的像素值,如果该像素行当前的未压缩像素数为零,则压缩过程结束,此时的所述存储文件即为图像压缩文件;c)确定该像素行中从当前首个未压缩像素算起连续排列的与像素P有相同像素值的当前未压缩像素的数目N,并将这N个像素作为已压缩像素,在所述存储文件中有序地记录该像素数N,然后以该像素行为当前像素行执行步骤d);d)如果当前像素行是末像素行,则执行步骤b);如果当前像素行不是末像素行,则在当前像素行的下一像素行中确定该像素行中从当前首个未压缩像素算起连续排列的与像素P 有相同像素值的当前未压缩像素的数目N,并将这N个像素作为已压缩像素,其中,如果该像素数N > O,则在所述存储文件中有序地记录该像素数N,然后以该像素行作为当前像素行执行步骤d);如果该像素数N=0,则执行步骤b)。
2.如权利要求1所述的图像压缩方法,其中,在步骤d)中,每次在执行步骤b)之前还包括在所述存储文件中有序地记录特定标志位。
3.如权利要求1所述的图像压缩方法,包括,建立具有η个元素的数组c □,使得该数组中的第i个元素的值c [i]为所述图像的第 i个像素行的当前未压缩像素的数目,其中,O ( i ( n-1,从而在步骤b)中,通过所述数组 c[]的各元素值c[i]以及各元素下标值i,获得当前未压缩像素数最大且行号最小的像素行,并获得该像素行的第一个未压缩像素P ;在步骤c)和d)中,通过所述数组c []和所述像素数N来确定下次执行步骤b)时各像素行的当前未压缩像素的数目。
4.如权利要求3所述的图像压缩方法,还包括,建立具有m个元素的数组b [],使得该数组的第j个元素的值b [j]为所述图像的当前已压缩像素数为j的像素行的个数,其中,O ( j ( m-1,从而在步骤b)中,按j从小到大的顺序找出第一个b[j]不为O时的j,该j值即为所述图像的各像素行的当前已压缩像素数中的最小值,从而得以确定所述图像的各像素行中当前已压缩像素数最小即当前未压缩像素数最大的像素行。
5.一种图像解压缩方法,包括:A)获取由权利要求1所述的图像压缩方法产生的图像压缩文件,并创建具有η行m列单元的空的存储文件;B)在所述图像压缩文件中按所述图像压缩方法的记录顺序读取当前首个未读取数据作为像素值P’,并读取该数据之后的首个未读数据作为像素数N ;C)在所述存储文件的 η个单元行中确定当前未存储单元数最大且行号最小的单元行, 并使该单元行的前N个连续排列的当前未存储单元均存储像素值P’,然后以该单元行作为当前单元行执行步骤D);D)在所述图像压缩文件中按所述图像压缩方法的记录顺序搜索当前首个未读取数据, 如果该数据不存在,则解压缩过程结束,此时的所述存储文件即为图像原始文件;如果该数据存在且非像素值数据,则读取该数据作为像素数N,并使所述存储文件的当前单元行的下一单元行的前N个连续排列的当前未存储单元均存储像素值P’,然后以该下一单元行作为当前单元行执行步骤D);如果该数据存在且为像素值数据,则执行步骤B)。
6.一种图像解压缩方法,包括:A,)获取由权利要求2所述的图像压缩方法产生的图像压缩文件,并创建具有η行m列单元的空的存储文件;B)在所述图像压缩文件中按所述图像压缩方法的记录顺序读取当前首个未读取数据作为像素值P’,并读取该数据之后的首个未读数据作为像素数N ;C)在所述存储文件的η个单元行中确定当前未存储单元数最大且行号最小的单元行, 并将该单元行的前N个连续排列的当前未存储单元均存储像素值P’,然后以该单元行作为当前单元行执行步骤D’);D’ )在所述图像压缩文件中按所述图像压缩方法的记录顺序搜索当前首个未读取数据,如果该数据不存在,则解压缩过程结束,此时的所述存储文件即为图像原始文件;如果该数据存在且非标志位数据,则读取该数据作为像素数N,并使所述存储文件中的当前单元行的下一单元行的前N个连续排列的当前未存储单元均存储像素值P’,然后以该下一单元行作为当前单元行执行步骤D’ );如果该数据存在且为标志位数据,则使该标记位数据的下一个数据为所述图像压缩文件中的当前首个未读取数据,并执行步骤B)。
7.如权利要求5或6所述的图像解压缩方法,包括:建立具有η个元素的数组c □,使得该 数组中的第i个元素的值c [i]为所述存储文件的第i个单元行的当前未存储单元的数目,其中,O ( i ( n-1,从而在步骤C)中,通过所述数组c[]的各元素值c[i]以及各元素下标值i,获得所述存储文件中的当前未存储单元数最大且行号最小的单元行;以及在步骤C)及在步骤D)或D’)中,通过所述数组c []和所述像素数N来确定下次执行步骤C)时所述存储文件的各单元行的当前未存储单元的数目。
8.如权利要求7所述的图像解压缩方法,还包括:建立具有m个元素的数组b [],使得该数组的第j个元素的值b [j]为所述存储文件的当前已存储单元数为j的单元行的个数,其中,O ( j ( m-1,从而在步骤C)中,按j从小到大的顺序找出第一个b[j]不为O时的j,该j值即为所述存储文件的各单元行的当前已存储单元数中的最小值,从而得以确定所述存储文件的各单元行中当前已存储单元数最小即当前未存储单元数最大的单元行。
9.一种图像压缩装置,包括:图像获取单元,用于获取具有η行m列像素的图像;存储文件创建单元,用于创建空的存储文件;像素行确定单元,用于在所述图像的η个像素行中确定当前未压缩像素数最大且行号最小的像素行以及该像素行的首个未压缩像素P ;像素数统计单元,用于统计所述图像的当前像素行中从当前首个未压缩像素算起连续排列的与像素P有相同像素值的当前未压缩像素的数目N,并将这N个像素作为已压缩像素;记录单元,用于在所述存储文件中有序地记录由像素行确定单元多次确定的所述像素P的像素值以及由像素数统计单元对于每次确定的像素P统计的至少一个像素行的所述像素数N ;末行判断单元,用于在记录单元每次记录了所述像素数N后判断当前像素行是否为末像素行,如果判断为是末像素行,则由像素行确定单元重新确定所述像素P,如果判断为不是末像素行,则由像素数统计单元统计当前像素行的下一像素行的所述像素数N ;像素数判断单元,用于判断所述图像的当前像素行中从当前首个未压缩像素算起连续排列的与像素P有相同像素值的当前未压缩像素的数目N是否大于零,如果判断为N > O, 则记录单元在所述存储文件中有序地记录N值,如果判断为N=0,则由像素行确定单元重新确定所述像素P。
10.一种图像解压缩装置,包括:图像压缩文件获取单元,用于获取由权利要求9所述的图像压缩装置产生的图像压缩文件;存储文件创建单元,用于创建具有η行m列单元的空的存储文件;数据读取单元,用于在所述图像压缩文件中按所述图像压缩方法的记录顺序依次读取当前首个未读取数据;单元行确定单元,用 于在所述存储文件的η个单元行中确定当前未存储单元数最大且行号最小的单元行;数据写入单元,用于在所述存储文件的单元行中写入像素值;判断单元,用于判断数据读取单元每次所读取的当前首个未读取数据是否为像素值数据,如果数据读取单元读取的当前首个未读取数据为像素值P’,则再读取该数据之后的首个未读取数据作为像素数N,数据写入单元将像素值P’存储在单元行确定单元所确定的当前单元行的前N个连续排列的当前未存储单元中;如果数据读取单元读取的当前首个未读取数据为非像素值数据,则数据写入单元以该数据作为像素数N,并将像素值P’存储在所述存储文件的当前单元行的下一单元行的前N个连续排列的当前未存储单元中。
全文摘要
本发明提供一种图像压缩方法和装置及其相应的图像解压缩方法和装置,所述图像压缩方法包括多轮压缩循环,在每轮压缩循环中,首先在图像的n个像素行中确定当前未压缩像素数最大且行号最小的像素行并记录该像素行的首个未压缩像素P的像素值。然后,分别确定并记录像素P所在像素行及其后续像素行中从当前首个未压缩像素算起连续排列的与像素P有相同像素值的当前未压缩像素的数目N。其中,当在某个所述后续像素行中判断为从该像素行获得的所述像素数N=0,或者当某个所述后续像素行为末像素行时,本轮压缩循环结束。该方法获得的平均压缩比在40%左右,且不消耗过多的CPU资源,是一种适用范围较广的压缩算法。
文档编号H04N7/26GK103139567SQ20131003190
公开日2013年6月5日 申请日期2013年1月28日 优先权日2013年1月28日
发明者聂山人, 张骞, 杨明, 张翼, 刘婕妤, 毛泳江 申请人:东软集团股份有限公司