一種面向海量圖片數(shù)據(jù)的重復(fù)數(shù)據(jù)刪除方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)存儲(chǔ)研宄領(lǐng)域,特別涉及一種面向海量圖片數(shù)據(jù)的重復(fù)數(shù)據(jù)刪除方法。
【背景技術(shù)】
[0002]隨著計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展,信息的呈現(xiàn)方式已逐漸轉(zhuǎn)變?yōu)閳D片為主、文字為輔。目前社交網(wǎng)站、購(gòu)物網(wǎng)站等均含有大量圖片信息,這類信息在網(wǎng)絡(luò)中呈現(xiàn)爆炸式增長(zhǎng),如何有效地存儲(chǔ)和管理這些圖片數(shù)據(jù)成為存儲(chǔ)領(lǐng)域的一個(gè)熱點(diǎn)。
[0003]重復(fù)數(shù)據(jù)刪除技術(shù)能夠有效減少存儲(chǔ)系統(tǒng)中的冗余數(shù)據(jù),但是現(xiàn)有技術(shù)對(duì)圖片文件的去重效果欠佳。經(jīng)研宄發(fā)現(xiàn),其主要原因是常見(jiàn)的圖片文件均為壓縮文件,壓縮過(guò)程會(huì)使數(shù)據(jù)的二進(jìn)制流發(fā)生改變,從而使原本具有冗余性的數(shù)據(jù)不再具有冗余性。
[0004]因此,研宄一種能針對(duì)圖片文件壓縮前的數(shù)據(jù)去重的方法,則能在一定程度上提高去重率,具有重要的應(yīng)用價(jià)值。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的在于克服現(xiàn)有技術(shù)的缺點(diǎn)與不足,提供一種面向海量圖片數(shù)據(jù)的重復(fù)數(shù)據(jù)刪除方法,該方法通過(guò)將圖片文件解壓,針對(duì)解壓后的像素矩陣數(shù)據(jù)進(jìn)行分塊去重,能大大縮減其實(shí)際存儲(chǔ)的數(shù)據(jù)量。
[0006]本發(fā)明的目的通過(guò)以下的技術(shù)方案實(shí)現(xiàn):一種面向海量圖片數(shù)據(jù)的重復(fù)數(shù)據(jù)刪除方法,包括步驟:
[0007](I)文件過(guò)濾:對(duì)文件類型和文件大小進(jìn)行過(guò)濾;
[0008](2)過(guò)濾后的文件類型識(shí)別與數(shù)據(jù)讀取:根據(jù)文件后綴名識(shí)別圖片文件類型,根據(jù)類型獲取其位圖矩陣數(shù)據(jù)并讀入內(nèi)存;
[0009](3)對(duì)位圖矩陣數(shù)據(jù)進(jìn)行分塊;
[0010](4)判斷分塊后的各個(gè)數(shù)據(jù)塊是唯一塊還是冗余塊,若為冗余塊,則將其刪除,否則執(zhí)行步驟(5);
[0011](5)根據(jù)原圖片文件類型,用相應(yīng)的圖片壓縮方法對(duì)唯一塊進(jìn)行壓縮存儲(chǔ)。
[0012]本發(fā)明所針對(duì)的文件具體是指后綴名為jpg、png、bmp等格式的圖片文件,若非圖片文件,則可按傳統(tǒng)的重復(fù)數(shù)據(jù)刪除方法進(jìn)行去重。同時(shí)計(jì)算圖片文件大小,若文件大小小于某個(gè)閾值,則將圖片文件整體視為一個(gè)數(shù)據(jù)塊,按傳統(tǒng)的重復(fù)數(shù)據(jù)刪除方法進(jìn)行去重。本發(fā)明是針對(duì)文件較大的圖片文件提出的處理方法。
[0013]優(yōu)選的,所述步驟(2)中,若圖片文件類型為壓縮格式文件,則采用相應(yīng)的解壓算法將其解壓,然后獲得其位圖矩陣數(shù)據(jù),若為非壓縮格式,則直接讀取其位圖矩陣數(shù)據(jù);其中若圖片文件類型為jpg格式文件,則在解壓的同時(shí)計(jì)算文件元數(shù)據(jù)包含的亮度量化表的所有元素的和。
[0014]優(yōu)選的,所述步驟(2)中的數(shù)據(jù)讀取與步驟(3)中的分塊過(guò)程采用多線程并行的方式,即并行讀取多個(gè)圖片文件的位圖矩陣數(shù)據(jù),對(duì)同一個(gè)位圖矩陣采用多個(gè)線程并行地對(duì)矩陣不同區(qū)域進(jìn)行分塊。通過(guò)以上方法達(dá)到減少時(shí)間開(kāi)銷的目的。
[0015]優(yōu)選的,所述步驟(3)對(duì)位圖矩陣數(shù)據(jù)進(jìn)行分塊,采用一種基于圖片尺寸的分塊方法,步驟如下:
[0016](3-1)獲取圖片的寬和高,以及可根據(jù)實(shí)際需求進(jìn)行調(diào)節(jié)的默認(rèn)塊邊長(zhǎng),用X表示最終用于分塊的邊長(zhǎng),執(zhí)行步驟(3-2);
[0017](3-2)若圖片寬或高小于默認(rèn)塊邊長(zhǎng),則X等于圖片高、寬中的更小者,執(zhí)行步驟(3-4),否則執(zhí)行步驟(3-3);
[0018](3-3)用Z表示控制每張圖片通過(guò)分塊所能得到的數(shù)據(jù)塊個(gè)數(shù),根據(jù)公式:Y2=圖片寬*圖片高/Ζ,計(jì)算出Y的值,并對(duì)Y取整,若Y小于默認(rèn)塊邊長(zhǎng),則最終用于分塊的邊長(zhǎng)X為默認(rèn)塊邊長(zhǎng),否則X為Y,執(zhí)行步驟(3-4);
[0019](3-4)從行和列兩個(gè)方向?qū)ξ粓D矩陣進(jìn)行劃分,每隔X個(gè)元素劃分一次,將劃分后得到的每個(gè)矩形區(qū)域所包含的所有數(shù)據(jù)視為一個(gè)數(shù)據(jù)塊。
[0020]作為一種優(yōu)選方式,所述步驟(4)中,判斷分塊后的各個(gè)數(shù)據(jù)塊是唯一塊還是冗余塊,采用傳統(tǒng)的唯一塊判定方法,其步驟是:計(jì)算數(shù)據(jù)塊哈希指紋,并在已存儲(chǔ)的指紋數(shù)據(jù)庫(kù)中查找該指紋,若找到則標(biāo)記該數(shù)據(jù)塊為冗余塊,否則標(biāo)記該數(shù)據(jù)塊為唯一塊。
[0021]更進(jìn)一步的,為了避免計(jì)算純色塊的哈希指紋時(shí)造成的指紋沖突,用純色塊的寬、高以及純色塊的R、G、B顏色值標(biāo)記該純色塊,指紋查找過(guò)程中,若通過(guò)指紋值在指紋數(shù)據(jù)庫(kù)中找到某指紋,還需對(duì)比兩指紋的以上標(biāo)記,若不同,則判定它們?yōu)椴煌闹讣y。
[0022]作為另一種優(yōu)選方式,所述步驟(4)中,判斷分塊后的各個(gè)數(shù)據(jù)塊是唯一塊還是冗余塊,采用相似性判定方法,其步驟是:
[0023](4-1)將已存儲(chǔ)數(shù)據(jù)塊中與待去重?cái)?shù)據(jù)塊長(zhǎng)度相同的數(shù)據(jù)塊以隊(duì)列結(jié)構(gòu)讀入內(nèi)存,執(zhí)行步驟(4-2);
[0024](4-2)若隊(duì)列為空,表示系統(tǒng)中沒(méi)有與待去重?cái)?shù)據(jù)塊長(zhǎng)度相同的數(shù)據(jù)塊,將其標(biāo)記為唯一塊,若隊(duì)列不為空,執(zhí)行步驟(4-3);
[0025](4-3)從隊(duì)列中取一個(gè)數(shù)據(jù)塊,從數(shù)據(jù)起始點(diǎn)開(kāi)始,依次計(jì)算其與待去重?cái)?shù)據(jù)塊對(duì)應(yīng)字節(jié)的ASCII碼值的差的絕對(duì)值,若所有計(jì)算出的絕對(duì)值均小于閾值A(chǔ),且絕對(duì)值小于閾值B的個(gè)數(shù)與總個(gè)數(shù)的比例達(dá)到C,則標(biāo)記待去重?cái)?shù)據(jù)塊為冗余塊,否則執(zhí)行步驟(4-4) ;A、B、C均為預(yù)設(shè)值;
[0026](4-4)若隊(duì)列不為空,執(zhí)行步驟(4-3),否則標(biāo)記待去重?cái)?shù)據(jù)塊為唯一塊。
[0027]優(yōu)選的,所述步驟(5)中,若原圖片文件類型為jpg,則用圖片質(zhì)量判定算法選擇合適的質(zhì)量因子,再對(duì)唯一塊進(jìn)行壓縮存儲(chǔ),圖片質(zhì)量判定算法步驟是:
[0028](5-1)用sum表示壓縮算法中所使用的量化表的所有元素值的和,sum與壓縮算法中用于設(shè)定圖片質(zhì)量的質(zhì)量因子一一對(duì)應(yīng),計(jì)算壓縮算法所使用的每一個(gè)亮度量化表的sum,并將其加入集合C,計(jì)算完成后執(zhí)行步驟(5-2);
[0029](5-2)將集合C存入系統(tǒng),執(zhí)行步驟(5-3);
[0030](5-3)讀取jpg文件中的亮度量化表,計(jì)算該亮度量化表所有元素值的和a,在集合C中選取一個(gè)最接近a的元素,根據(jù)該元素獲得其對(duì)應(yīng)的質(zhì)量因子,該質(zhì)量因子即反映原jpg圖片的質(zhì)量。
[0031]本發(fā)明與現(xiàn)有技術(shù)相比,具有如下優(yōu)點(diǎn)和有益效果:
[0032]1、本發(fā)明提出了一種針對(duì)圖片文件的去重方法,該方法通過(guò)將圖片文件解壓,針對(duì)解壓后的像素矩陣數(shù)據(jù)進(jìn)行分塊去重,能大大提高去重率,縮減其實(shí)際存儲(chǔ)的數(shù)據(jù)量。
[0033]2、本發(fā)明提出了一種基于圖片尺寸的分塊方法,能將數(shù)據(jù)塊數(shù)量限制在一定范圍內(nèi),從而有效減少指紋表數(shù)據(jù)量。
[0034]3、本發(fā)明提出一種相似性判定方法,能夠?qū)⒁曈X(jué)無(wú)法識(shí)別出差異但實(shí)際上不同的兩張圖片判定為相似圖片。
[0035]4、本發(fā)明提出了一種jpg圖片質(zhì)量判定方法,通過(guò)該方法能夠在一定程度上解決不同應(yīng)用軟件生成的jpg格式圖片之間的圖片質(zhì)量比較問(wèn)題。
【附圖說(shuō)明】
[0036]圖1為本實(shí)施例方法的流程圖。
[0037]圖2為本實(shí)施例中基于圖片尺寸的分塊方法流程圖。
[0038]圖3為本實(shí)施例中基于圖片尺寸的分塊方法的分塊示意圖。
[0039]圖4為本實(shí)施例中相似性判定方法的流程圖。
[0040]圖5為本實(shí)施例中jpg圖片質(zhì)量判定方法流程圖。
【具體實(shí)施方式】
[0041]下面結(jié)合實(shí)施例及附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)的描述,但本發(fā)明的實(shí)施方式不限于此。
[0042]實(shí)施例1
[0043]參見(jiàn)圖1,本實(shí)施例重復(fù)數(shù)據(jù)刪除流程包括以下步驟:
[0044]—、文件過(guò)濾。
[0045](1-1)讀取備份流中的一個(gè)文件,根據(jù)文件后綴名判斷文件是否為圖片文件。
[0046](1-2)若非圖片文件,則按一般流程對(duì)文件進(jìn)行去重,一般重復(fù)數(shù)據(jù)刪除流程為:基于文件二進(jìn)制流進(jìn)行分塊,計(jì)算數(shù)據(jù)塊的哈希指紋,通過(guò)在指紋數(shù)據(jù)庫(kù)中查找該指紋來(lái)判斷數(shù)據(jù)塊是否冗余,若數(shù)據(jù)塊冗余,則將其刪除,若數(shù)據(jù)塊為唯一塊,則將其存入系統(tǒng),并將指紋添加到指紋數(shù)據(jù)庫(kù)。
[0047](1-3)若是圖片文件,則執(zhí)行步驟(1-4)。
[0048](1-4)計(jì)算圖片文件大小,若文件小于5KB,則將文件整體視為一個(gè)數(shù)據(jù)塊,計(jì)算其哈希指紋,通過(guò)查找指紋數(shù)據(jù)庫(kù)判斷該文件是否冗余,若文件冗余則將其刪除,否則將其存入系統(tǒng),并添加文件指紋到指紋數(shù)據(jù)庫(kù);否則執(zhí)行步驟二。
[0049]二、過(guò)濾后的文件類型識(shí)別與數(shù)據(jù)讀取。
[0050]通過(guò)文件后綴名識(shí)別圖片文件類型,若為png、jgp等壓縮格式文件,則選擇相應(yīng)解壓算法進(jìn)行解壓,獲取其位圖矩陣數(shù)據(jù),對(duì)于jpg文件,在解壓時(shí)還要計(jì)算其文件元數(shù)據(jù)包含的亮度量化表的所有元素的和;若為bmp等非壓縮格式文件,則直接讀取其位圖矩陣數(shù)據(jù)。
[0051]三、將位圖矩陣數(shù)據(jù)用基于圖片尺寸的分塊方法進(jìn)行分塊。
[0052]參見(jiàn)圖2、3,選擇合適的塊邊長(zhǎng)對(duì)位圖矩陣進(jìn)行分塊,分塊示意圖如