一种面向海量图片数据的重复数据删除方法
【技术领域】
[0001]本发明涉及数据存储研宄领域,特别涉及一种面向海量图片数据的重复数据删除方法。
【背景技术】
[0002]随着计算机网络的发展,信息的呈现方式已逐渐转变为图片为主、文字为辅。目前社交网站、购物网站等均含有大量图片信息,这类信息在网络中呈现爆炸式增长,如何有效地存储和管理这些图片数据成为存储领域的一个热点。
[0003]重复数据删除技术能够有效减少存储系统中的冗余数据,但是现有技术对图片文件的去重效果欠佳。经研宄发现,其主要原因是常见的图片文件均为压缩文件,压缩过程会使数据的二进制流发生改变,从而使原本具有冗余性的数据不再具有冗余性。
[0004]因此,研宄一种能针对图片文件压缩前的数据去重的方法,则能在一定程度上提高去重率,具有重要的应用价值。
【发明内容】
[0005]本发明的目的在于克服现有技术的缺点与不足,提供一种面向海量图片数据的重复数据删除方法,该方法通过将图片文件解压,针对解压后的像素矩阵数据进行分块去重,能大大缩减其实际存储的数据量。
[0006]本发明的目的通过以下的技术方案实现:一种面向海量图片数据的重复数据删除方法,包括步骤:
[0007](I)文件过滤:对文件类型和文件大小进行过滤;
[0008](2)过滤后的文件类型识别与数据读取:根据文件后缀名识别图片文件类型,根据类型获取其位图矩阵数据并读入内存;
[0009](3)对位图矩阵数据进行分块;
[0010](4)判断分块后的各个数据块是唯一块还是冗余块,若为冗余块,则将其删除,否则执行步骤(5);
[0011](5)根据原图片文件类型,用相应的图片压缩方法对唯一块进行压缩存储。
[0012]本发明所针对的文件具体是指后缀名为jpg、png、bmp等格式的图片文件,若非图片文件,则可按传统的重复数据删除方法进行去重。同时计算图片文件大小,若文件大小小于某个阈值,则将图片文件整体视为一个数据块,按传统的重复数据删除方法进行去重。本发明是针对文件较大的图片文件提出的处理方法。
[0013]优选的,所述步骤(2)中,若图片文件类型为压缩格式文件,则采用相应的解压算法将其解压,然后获得其位图矩阵数据,若为非压缩格式,则直接读取其位图矩阵数据;其中若图片文件类型为jpg格式文件,则在解压的同时计算文件元数据包含的亮度量化表的所有元素的和。
[0014]优选的,所述步骤(2)中的数据读取与步骤(3)中的分块过程采用多线程并行的方式,即并行读取多个图片文件的位图矩阵数据,对同一个位图矩阵采用多个线程并行地对矩阵不同区域进行分块。通过以上方法达到减少时间开销的目的。
[0015]优选的,所述步骤(3)对位图矩阵数据进行分块,采用一种基于图片尺寸的分块方法,步骤如下:
[0016](3-1)获取图片的宽和高,以及可根据实际需求进行调节的默认块边长,用X表示最终用于分块的边长,执行步骤(3-2);
[0017](3-2)若图片宽或高小于默认块边长,则X等于图片高、宽中的更小者,执行步骤(3-4),否则执行步骤(3-3);
[0018](3-3)用Z表示控制每张图片通过分块所能得到的数据块个数,根据公式:Y2=图片宽*图片高/Ζ,计算出Y的值,并对Y取整,若Y小于默认块边长,则最终用于分块的边长X为默认块边长,否则X为Y,执行步骤(3-4);
[0019](3-4)从行和列两个方向对位图矩阵进行划分,每隔X个元素划分一次,将划分后得到的每个矩形区域所包含的所有数据视为一个数据块。
[0020]作为一种优选方式,所述步骤(4)中,判断分块后的各个数据块是唯一块还是冗余块,采用传统的唯一块判定方法,其步骤是:计算数据块哈希指纹,并在已存储的指纹数据库中查找该指纹,若找到则标记该数据块为冗余块,否则标记该数据块为唯一块。
[0021]更进一步的,为了避免计算纯色块的哈希指纹时造成的指纹冲突,用纯色块的宽、高以及纯色块的R、G、B颜色值标记该纯色块,指纹查找过程中,若通过指纹值在指纹数据库中找到某指纹,还需对比两指纹的以上标记,若不同,则判定它们为不同的指纹。
[0022]作为另一种优选方式,所述步骤(4)中,判断分块后的各个数据块是唯一块还是冗余块,采用相似性判定方法,其步骤是:
[0023](4-1)将已存储数据块中与待去重数据块长度相同的数据块以队列结构读入内存,执行步骤(4-2);
[0024](4-2)若队列为空,表示系统中没有与待去重数据块长度相同的数据块,将其标记为唯一块,若队列不为空,执行步骤(4-3);
[0025](4-3)从队列中取一个数据块,从数据起始点开始,依次计算其与待去重数据块对应字节的ASCII码值的差的绝对值,若所有计算出的绝对值均小于阈值A,且绝对值小于阈值B的个数与总个数的比例达到C,则标记待去重数据块为冗余块,否则执行步骤(4-4) ;A、B、C均为预设值;
[0026](4-4)若队列不为空,执行步骤(4-3),否则标记待去重数据块为唯一块。
[0027]优选的,所述步骤(5)中,若原图片文件类型为jpg,则用图片质量判定算法选择合适的质量因子,再对唯一块进行压缩存储,图片质量判定算法步骤是:
[0028](5-1)用sum表示压缩算法中所使用的量化表的所有元素值的和,sum与压缩算法中用于设定图片质量的质量因子一一对应,计算压缩算法所使用的每一个亮度量化表的sum,并将其加入集合C,计算完成后执行步骤(5-2);
[0029](5-2)将集合C存入系统,执行步骤(5-3);
[0030](5-3)读取jpg文件中的亮度量化表,计算该亮度量化表所有元素值的和a,在集合C中选取一个最接近a的元素,根据该元素获得其对应的质量因子,该质量因子即反映原jpg图片的质量。
[0031]本发明与现有技术相比,具有如下优点和有益效果:
[0032]1、本发明提出了一种针对图片文件的去重方法,该方法通过将图片文件解压,针对解压后的像素矩阵数据进行分块去重,能大大提高去重率,缩减其实际存储的数据量。
[0033]2、本发明提出了一种基于图片尺寸的分块方法,能将数据块数量限制在一定范围内,从而有效减少指纹表数据量。
[0034]3、本发明提出一种相似性判定方法,能够将视觉无法识别出差异但实际上不同的两张图片判定为相似图片。
[0035]4、本发明提出了一种jpg图片质量判定方法,通过该方法能够在一定程度上解决不同应用软件生成的jpg格式图片之间的图片质量比较问题。
【附图说明】
[0036]图1为本实施例方法的流程图。
[0037]图2为本实施例中基于图片尺寸的分块方法流程图。
[0038]图3为本实施例中基于图片尺寸的分块方法的分块示意图。
[0039]图4为本实施例中相似性判定方法的流程图。
[0040]图5为本实施例中jpg图片质量判定方法流程图。
【具体实施方式】
[0041]下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
[0042]实施例1
[0043]参见图1,本实施例重复数据删除流程包括以下步骤:
[0044]—、文件过滤。
[0045](1-1)读取备份流中的一个文件,根据文件后缀名判断文件是否为图片文件。
[0046](1-2)若非图片文件,则按一般流程对文件进行去重,一般重复数据删除流程为:基于文件二进制流进行分块,计算数据块的哈希指纹,通过在指纹数据库中查找该指纹来判断数据块是否冗余,若数据块冗余,则将其删除,若数据块为唯一块,则将其存入系统,并将指纹添加到指纹数据库。
[0047](1-3)若是图片文件,则执行步骤(1-4)。
[0048](1-4)计算图片文件大小,若文件小于5KB,则将文件整体视为一个数据块,计算其哈希指纹,通过查找指纹数据库判断该文件是否冗余,若文件冗余则将其删除,否则将其存入系统,并添加文件指纹到指纹数据库;否则执行步骤二。
[0049]二、过滤后的文件类型识别与数据读取。
[0050]通过文件后缀名识别图片文件类型,若为png、jgp等压缩格式文件,则选择相应解压算法进行解压,获取其位图矩阵数据,对于jpg文件,在解压时还要计算其文件元数据包含的亮度量化表的所有元素的和;若为bmp等非压缩格式文件,则直接读取其位图矩阵数据。
[0051]三、将位图矩阵数据用基于图片尺寸的分块方法进行分块。
[0052]参见图2、3,选择合适的块边长对位图矩阵进行分块,分块示意图如