本發(fā)明涉及碎片文件的恢復(fù)。特別是,本發(fā)明涉及為了重組JPEG圖像的目的而找到碎片JPEG圖像的碎裂點(diǎn)和繼續(xù)點(diǎn)。
發(fā)明背景
隨著越來(lái)越多地使用數(shù)字存儲(chǔ)介質(zhì),對(duì)更復(fù)雜的數(shù)據(jù)恢復(fù)和取證恢復(fù)產(chǎn)品的需要也增加了。大部分文件系統(tǒng)和存儲(chǔ)設(shè)備通過(guò)將數(shù)據(jù)分成很多簇并通過(guò)維持用于存儲(chǔ)每個(gè)文件的數(shù)據(jù)的簇的列表(文件-表格)來(lái)存儲(chǔ)數(shù)據(jù)。例如,在文件系統(tǒng)FAT-32中,具有文件名的根表格條目將指向文件的第一簇,其又指向下一簇,依此類推,直到指向文件的最后一個(gè)簇為止。當(dāng)訪問(wèn)文件時(shí),從簇的這個(gè)列表依次取回?cái)?shù)據(jù)。類似地,一般通過(guò)從文件表格移除文件的條目來(lái)實(shí)現(xiàn)文件的刪除。傳統(tǒng)文件恢復(fù)和取證產(chǎn)品試圖通過(guò)分析文件系統(tǒng)并提取由文件系統(tǒng)指向的數(shù)據(jù)來(lái)恢復(fù)數(shù)據(jù)。當(dāng)文件系統(tǒng)被毀壞、不是當(dāng)前的或具有缺少的條目時(shí),傳統(tǒng)恢復(fù)技術(shù)恢復(fù)數(shù)據(jù)失敗。所謂的“文件雕復(fù)”被引入以從磁盤(pán)的“未分配”空間(不被文件系統(tǒng)指向的磁盤(pán)的區(qū)域)恢復(fù)文件。
當(dāng)文件未被存儲(chǔ)在數(shù)據(jù)扇區(qū)的連續(xù)區(qū)域上時(shí),文件被認(rèn)為是“碎裂的”。(術(shù)語(yǔ)“數(shù)據(jù)扇區(qū)”的含義旨在包括“簇”或“數(shù)據(jù)塊”。)例如,當(dāng)文件未以正確的順序被存儲(chǔ)在磁盤(pán)上的連續(xù)數(shù)據(jù)扇區(qū)上時(shí),文件碎片被認(rèn)為出現(xiàn)。換句話說(shuō),如果文件碎裂,則從文件的開(kāi)始部分到文件的末尾的數(shù)據(jù)扇區(qū)的順序?qū)?dǎo)致文件的部分的和/或不正確的重建。
可能對(duì)從取證觀點(diǎn)恢復(fù)有意義的一個(gè)文件是JPEG圖像。因?yàn)镴PEG圖像可包含很多數(shù)據(jù),JPEG碎裂的風(fēng)險(xiǎn)可能相當(dāng)大。Martin Karresand的“Completing the Picture—Fragments and Back Again”建議用于重組JPEG 圖像的一種方法,其中,使用被包括在JPEG圖像中的數(shù)據(jù)扇區(qū)中的RST標(biāo)記,以便確定當(dāng)重組JPEG圖像時(shí)被組合的可能的數(shù)據(jù)扇區(qū)。因?yàn)镴PEG壓縮由在頻域中存儲(chǔ)數(shù)據(jù)組成,數(shù)據(jù)的兩個(gè)扇區(qū)的組合通過(guò)比較單獨(dú)的數(shù)據(jù)扇區(qū)的DC系數(shù)而被確認(rèn)。
然而,這是復(fù)雜的方法,且可能例如難以手動(dòng)地驗(yàn)證結(jié)果的正確性,因?yàn)橛脩舨豢赡芾斫庠陬l域中的數(shù)據(jù)。
本發(fā)明的實(shí)施方式在這個(gè)上下文內(nèi)產(chǎn)生。
發(fā)明概述
在鑒于上述內(nèi)容,本發(fā)明的目的是解決或至少減小上面討論的一個(gè)或幾個(gè)缺點(diǎn)。通常,上述目的由所附獨(dú)立專利權(quán)利要求實(shí)現(xiàn)。
根據(jù)第一方面,本發(fā)明由當(dāng)從包括多個(gè)連續(xù)數(shù)據(jù)扇區(qū)的數(shù)據(jù)扇區(qū)的集合重組碎片JPEG圖像時(shí)使用的方法實(shí)現(xiàn),其中,多個(gè)連續(xù)數(shù)據(jù)扇區(qū)中的至少一些包括相應(yīng)的重新開(kāi)始標(biāo)記值。
數(shù)據(jù)扇區(qū)一般由512個(gè)字節(jié)組成,但不同類型的存儲(chǔ)器可包括其它尺寸的數(shù)據(jù)扇區(qū)。
重新開(kāi)始標(biāo)記(RST)是JPEG文件格式的特征,并可用于檢測(cè)圖片的碎片或損壞。存在被稱為RST0–RST7的、用十六進(jìn)制表示為0xFFD0–0xFFD7的八個(gè)不同的RST值。使用重新開(kāi)始標(biāo)記的JPEG文件將具有包括RST值的數(shù)據(jù)扇區(qū),所述RST可能跟隨有不包括RST值的一個(gè)或多個(gè)數(shù)據(jù)扇區(qū),即JPEG最小編碼單位(MCU),且然后是包括下一RST值的數(shù)據(jù)扇區(qū),依此類推。在RST7之后,下一標(biāo)記是RST0。在一個(gè)數(shù)據(jù)扇區(qū)內(nèi)可以有幾個(gè)RST標(biāo)記值也是可能的。
本方法包括在多個(gè)連續(xù)數(shù)據(jù)扇區(qū)中找出包括JPEG文件簽名的數(shù)據(jù)扇區(qū)。
從包括JPEG文件簽名的數(shù)據(jù)扇區(qū)和至少一個(gè)連續(xù)數(shù)據(jù)扇區(qū)中,可接著提取相應(yīng)于待重組的JPEG圖像的JPEG縮略圖??s略圖圖像是包含在JPEG文件中的小圖像,且一般是低分辨率,例如在尺寸上是160x128個(gè) 像素??s略圖是主要圖像、即待重組的圖像的小版本。它們通常位于JPEG文件的前幾千字節(jié)中,且獲取非碎片縮略圖的可能性比在沒(méi)有碎片的情況下提取主要圖像的可能性高得多。應(yīng)注意,可以只從與包括JPEG文件簽名的數(shù)據(jù)扇區(qū)連續(xù)的數(shù)據(jù)扇區(qū)提取JPEG縮略圖。換句話說(shuō),包括JPEG文件簽名的數(shù)據(jù)扇區(qū)在一些實(shí)施方式中可以不包括構(gòu)成JPEG縮略圖的任何數(shù)據(jù)。最常見(jiàn)的情況是,JPEG縮略圖將不在文件的第一扇區(qū)、即包括JPEG文件簽名的數(shù)據(jù)扇區(qū)內(nèi)開(kāi)始。通常,諸如時(shí)間戳、孔徑設(shè)置和可能GPS坐標(biāo)的其它EXIF元數(shù)據(jù)出現(xiàn)在實(shí)際縮略圖之前。
本方法還包括從與包括JPEG文件簽名的數(shù)據(jù)扇區(qū)連續(xù)的數(shù)據(jù)扇區(qū)確定屬于待重組的JPEG圖像的數(shù)據(jù)扇區(qū)和第一碎裂點(diǎn)數(shù)據(jù)扇區(qū),其中,第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)相應(yīng)于重新開(kāi)始標(biāo)記值。
例如,首先找出包括掃描開(kāi)始(SoS)十六進(jìn)制值的扇區(qū)。在JPEG圖像文件中,圖片的編碼數(shù)據(jù)剛好出現(xiàn)在SoS扇區(qū)之后。在SoS段之后,在第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)之前并包括第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)的所有數(shù)據(jù)段被確定為屬于待重組的JPEG圖像。
當(dāng)在存儲(chǔ)器中的數(shù)據(jù)的集合——在這種情況下是待重組的JPEG圖像——分裂成不在連續(xù)的順序中(例如,在多個(gè)連續(xù)數(shù)據(jù)扇區(qū)中)的很多小片時(shí),碎片出現(xiàn)。
如在本文使用的,術(shù)語(yǔ)“第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)”應(yīng)被理解為意指在連續(xù)數(shù)據(jù)扇區(qū)當(dāng)中的被確定為不屬于待重組的JPEG圖像的數(shù)據(jù)扇區(qū)之前的最后一個(gè)數(shù)據(jù)扇區(qū)。
通常,在JPEG編碼圖像中,包括RST標(biāo)記的數(shù)據(jù)扇區(qū)跟隨有不包括RST標(biāo)記的一個(gè)或多個(gè)數(shù)據(jù)扇區(qū),即JPEG最小編碼單元(MCU)。不包括RST標(biāo)記的一個(gè)或多個(gè)扇區(qū)的數(shù)量可在JPEG圖像中改變。如先前提到的,在一個(gè)數(shù)據(jù)扇區(qū)內(nèi)遇到多個(gè)RST標(biāo)記是可能的,雖然這不是常見(jiàn)的情況。存在被稱為DRI的JPEG標(biāo)記,DRI規(guī)定在重新開(kāi)始標(biāo)記之間的MCU的數(shù)量。因?yàn)镸CU本身尺寸是可變的,不存在看到重新開(kāi)始標(biāo)記之間的字節(jié)(或扇區(qū))數(shù)量的可容易地預(yù)測(cè)的方式。在第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)被確定為不包括RST標(biāo)記值的數(shù)據(jù)扇區(qū)的情況下,第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)被確定 為相應(yīng)于緊接著包括RST標(biāo)記的前一數(shù)據(jù)扇區(qū)的重新開(kāi)始標(biāo)記值。在多個(gè)RST標(biāo)記存在于緊接著包括RST標(biāo)記的前一數(shù)據(jù)扇區(qū)中的情況下,第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)被確定為相應(yīng)于在多個(gè)RST標(biāo)記中的最后一個(gè)的值。
本方法還可包括基于相應(yīng)于第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)的重新開(kāi)始標(biāo)記值來(lái)在多個(gè)數(shù)據(jù)扇區(qū)中的所述至少一些當(dāng)中選擇包括相應(yīng)的重新開(kāi)始標(biāo)記值的多個(gè)候選數(shù)據(jù)扇區(qū)。在數(shù)據(jù)扇區(qū)包括幾個(gè)RST標(biāo)記的情況下,在選擇候選數(shù)據(jù)扇區(qū)時(shí)使用在數(shù)據(jù)扇區(qū)中的第一RST標(biāo)記。
本方法的下一步驟是對(duì)每個(gè)候選數(shù)據(jù)扇區(qū)通過(guò)以下操作確定繼續(xù)點(diǎn)數(shù)據(jù)扇區(qū):
·通過(guò)將至少候選數(shù)據(jù)扇區(qū)附加到屬于待重組的JPEG圖像的數(shù)據(jù)扇區(qū)來(lái)形成數(shù)據(jù)扇區(qū)的候選組,以及
·通過(guò)將數(shù)據(jù)扇區(qū)的候選組和JPEG縮略圖用作為在適應(yīng)度函數(shù)中的參數(shù)來(lái)計(jì)算候選數(shù)據(jù)扇區(qū)的適應(yīng)度分?jǐn)?shù)。
換句話說(shuō),每個(gè)候選數(shù)據(jù)扇區(qū)被測(cè)試以查看它是否適合已經(jīng)被確定為屬于待重組的JPEG圖像的數(shù)據(jù)扇區(qū),且這個(gè)測(cè)試涉及與JPEG縮略圖的比較,該JPEG縮略圖是不碎裂的并因此代表待重組的實(shí)際JPEG圖像的下采樣版本。將JPEG縮略圖用作為線索,可計(jì)算每個(gè)候選數(shù)據(jù)扇區(qū)的適應(yīng)度分?jǐn)?shù)。
從這些所計(jì)算的適應(yīng)度分?jǐn)?shù)中,具有在所計(jì)算的適應(yīng)度分?jǐn)?shù)當(dāng)中的最高適應(yīng)度分?jǐn)?shù)的候選數(shù)據(jù)扇區(qū)可接著有利地被選擇為用于確定屬于待重組的JPEG圖像的另外的數(shù)據(jù)扇區(qū)的最佳繼續(xù)點(diǎn)數(shù)據(jù)扇區(qū)。應(yīng)注意,特征“最高適應(yīng)度分?jǐn)?shù)”應(yīng)被理解為相應(yīng)于在候選數(shù)據(jù)扇區(qū)和已經(jīng)被確定為屬于待重組的JPEG圖像的數(shù)據(jù)扇區(qū)當(dāng)中的最佳匹配。
根據(jù)一些實(shí)施方式,確定屬于待重組的JPEG圖像的數(shù)據(jù)扇區(qū)和第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)的步驟包括下列操作中的至少一個(gè):
·確定數(shù)據(jù)扇區(qū)包括不緊接著前一數(shù)據(jù)扇區(qū)的重新開(kāi)始標(biāo)記值的重新開(kāi)始標(biāo)記值,以及
·確定數(shù)據(jù)扇區(qū)包括低熵?cái)?shù)據(jù)。
例如,如果數(shù)據(jù)扇區(qū)包括RST3并跟隨有沒(méi)有RST標(biāo)記的多個(gè)數(shù)據(jù)扇區(qū)并接著跟隨有包括RST1的數(shù)據(jù)扇區(qū),則緊接著在具有RST1標(biāo)記的數(shù)據(jù)扇區(qū)之前的數(shù)據(jù)扇區(qū)被確定為第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)。換句話說(shuō),如果RST標(biāo)記以錯(cuò)誤的順序出現(xiàn),則要重組的JPEG圖像被考慮為碎裂的。
用于發(fā)現(xiàn)碎片的另一技術(shù)是尋找低熵扇區(qū)。JPEG文件(在SOS標(biāo)記之后)的主要區(qū)域應(yīng)包含高熵區(qū)域。如果數(shù)據(jù)扇區(qū)具有低熵,則這可指示它不是待重組的JPEG圖像的部分,且緊接著在具有低熵?cái)?shù)據(jù)的數(shù)據(jù)扇區(qū)前面的數(shù)據(jù)扇區(qū)被確定為第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)。
也可能使用上面所述的DRI標(biāo)簽的值,以便確定是否已經(jīng)到達(dá)碎裂點(diǎn)。根據(jù)一些實(shí)施方式,確定屬于待重組的JPEG圖像的數(shù)據(jù)扇區(qū)和第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)的步驟可包括下列操作中的至少一個(gè):
·確定自RST標(biāo)記被找到以來(lái)經(jīng)過(guò)的MCU的數(shù)量大于DRI標(biāo)簽的值,以及
·確定在兩個(gè)RST標(biāo)記之間經(jīng)過(guò)的MCU的數(shù)量小于DRI標(biāo)簽的值。
例如,如果DRI標(biāo)簽規(guī)定包括RST標(biāo)記的數(shù)據(jù)扇區(qū)應(yīng)跟隨有兩個(gè)MCU,但確定(例如,在霍夫曼解碼的使用之后)多于兩個(gè)(例如,三個(gè))MCU跟在具有RST標(biāo)記的數(shù)據(jù)扇區(qū)后面,則第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)可被確定為相應(yīng)于第二MCU的數(shù)據(jù)扇區(qū)。
作為另一例子,如果DRI標(biāo)簽規(guī)定包括RST標(biāo)記的數(shù)據(jù)扇區(qū)應(yīng)跟隨有四個(gè)MCU,但確定在下一RST標(biāo)記被找到之前只有兩個(gè)(即少于四個(gè))MCU經(jīng)過(guò),則第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)可被確定為相應(yīng)于第二MCU的數(shù)據(jù)扇區(qū)。通常,通過(guò)計(jì)算在RST標(biāo)記之間(或至少在RST標(biāo)記之后)經(jīng)過(guò)的MCU的數(shù)量并通過(guò)將該數(shù)量與DRI標(biāo)簽的值進(jìn)行比較,可發(fā)現(xiàn)已經(jīng)達(dá)到碎裂點(diǎn)。
也可在確定候選數(shù)據(jù)扇區(qū)的繼續(xù)點(diǎn)數(shù)據(jù)扇區(qū)時(shí)使用DRI標(biāo)簽的值。如果例如通過(guò)確定兩個(gè)MCU缺少來(lái)找到了碎裂點(diǎn)數(shù)據(jù)扇區(qū),則可通過(guò)也包括相應(yīng)于兩個(gè)MCU的扇區(qū)來(lái)回溯繼續(xù)點(diǎn),這兩個(gè)MCU在包含相應(yīng)于繼 續(xù)點(diǎn)數(shù)據(jù)扇區(qū)的RST標(biāo)記的扇區(qū)之前。
根據(jù)一些實(shí)施方式,確定繼續(xù)點(diǎn)數(shù)據(jù)扇區(qū)的步驟可包括通過(guò)將相應(yīng)于在候選數(shù)據(jù)扇區(qū)之前的至少一定數(shù)量的MCU的額外數(shù)據(jù)扇區(qū)附加到屬于待重組的JPEG圖像的數(shù)據(jù)扇區(qū)來(lái)至少形成數(shù)據(jù)扇區(qū)的候選組,其中,MCU的數(shù)量相應(yīng)于在DRI標(biāo)簽的值和在兩個(gè)RST標(biāo)記之間經(jīng)過(guò)的MCU的所確定的數(shù)量之間的差異。額外的數(shù)量可小于或等于所述差異。
為了確定是否已經(jīng)達(dá)到碎裂點(diǎn),也可能檢查霍夫曼表格。通常,在JPEG編碼圖像中,通過(guò)使用由DHT(有限霍夫曼表格)標(biāo)記規(guī)定的一個(gè)或多個(gè)霍夫曼表格、通過(guò)解析所述DHT標(biāo)記以重新構(gòu)建霍夫曼樹(shù)或(如果可能)直接使用霍夫曼表格來(lái)對(duì)最小編碼單元(MCU)編碼。如果嘗試對(duì)MCU(即沒(méi)有RST標(biāo)記的數(shù)據(jù)扇區(qū))解碼且發(fā)現(xiàn)MCU的位模式不存在于所使用的霍夫曼樹(shù)(或表格)中,則這可意味著已經(jīng)達(dá)到碎裂點(diǎn)。
根據(jù)一些實(shí)施方式,確定屬于待重組的JPEG圖像的數(shù)據(jù)扇區(qū)和第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)的步驟可包括至少下列步驟:解析相應(yīng)于至少一個(gè)霍夫曼表格的至少一個(gè)DHT標(biāo)記以及確定被發(fā)現(xiàn)在沒(méi)有RST標(biāo)記的數(shù)據(jù)扇區(qū)內(nèi)的位模式不存在于所述至少一個(gè)霍夫曼表格內(nèi)。
根據(jù)一些實(shí)施方式,形成數(shù)據(jù)扇區(qū)的候選組的步驟包括:從與候選數(shù)據(jù)扇區(qū)連續(xù)的數(shù)據(jù)扇區(qū)中確定屬于同一JPEG圖像的數(shù)據(jù)扇區(qū)和第二碎裂點(diǎn)數(shù)據(jù)扇區(qū),其中,屬于同一JPEG圖像的數(shù)據(jù)扇區(qū)包括候選扇區(qū);以及通過(guò)將屬于同一JPEG圖像的數(shù)據(jù)扇區(qū)附加到屬于待重組的JPEG圖像的數(shù)據(jù)扇區(qū)來(lái)形成數(shù)據(jù)扇區(qū)的候選組。
因此,現(xiàn)在可使用用于確定第一碎片數(shù)據(jù)扇區(qū)的相同算法,以便找到多少扇區(qū)始于可以是同一JPEG圖像的部分的候選數(shù)據(jù)扇區(qū),并接著在最后計(jì)算涉及與JPEG縮略圖的比較的適應(yīng)度分?jǐn)?shù)之前將所有這些扇區(qū)附加到屬于待重組的JPEG圖像的數(shù)據(jù)扇區(qū)。這個(gè)實(shí)施方式可增加用于重組JPEG圖像的算法的速度。
根據(jù)一些實(shí)施方式,確定屬于同一JPEG圖像的數(shù)據(jù)扇區(qū)和第二碎裂點(diǎn)數(shù)據(jù)扇區(qū)的步驟包括下列操作中的至少一個(gè):
·確定數(shù)據(jù)扇區(qū)包括不緊接著前一數(shù)據(jù)扇區(qū)的重新開(kāi)始標(biāo)記值的重新開(kāi)始標(biāo)記值,以及
·確定數(shù)據(jù)扇區(qū)包括低熵?cái)?shù)據(jù)。
因此,用于確定第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)的相同算法可用于確定第二碎裂點(diǎn)數(shù)據(jù)扇區(qū)。用于確定第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)的使用DRI標(biāo)記或DHT標(biāo)記和相應(yīng)的霍夫曼表格的上述實(shí)施方式也可用于確定第二碎裂點(diǎn)數(shù)據(jù)扇區(qū)。
根據(jù)一些實(shí)施方式,計(jì)算適應(yīng)度分?jǐn)?shù)的步驟包括對(duì)數(shù)據(jù)扇區(qū)的候選組解碼以形成候選JPEG圖像,以及其中,適應(yīng)度函數(shù)包括將候選JPEG圖像與JPEG縮略圖進(jìn)行比較。這個(gè)實(shí)施方式促進(jìn)對(duì)來(lái)自算法的結(jié)果的正確度的手動(dòng)驗(yàn)證,并且還提供可能對(duì)下面的情況魯棒的適應(yīng)度函數(shù):被確定為屬于待重組的JPEG圖像的一些數(shù)據(jù)扇區(qū)事實(shí)上不屬于待重組的JPEG圖像的情況或算法缺少應(yīng)屬于待重組的JPEG圖像的一些數(shù)據(jù)扇區(qū)的情況。
根據(jù)一些實(shí)施方式,計(jì)算適應(yīng)度分?jǐn)?shù)的步驟包括重放縮候選JPEG圖像以匹配JPEG縮略圖的尺寸。這是有利的,因?yàn)樵谶m應(yīng)度函數(shù)的解答(即JPEG縮略圖)中沒(méi)有像素通過(guò)將JPEG圖像重放縮到候選JPEG圖像的尺寸來(lái)“構(gòu)成”。而是,候選JPEG圖像按比例縮小到JPEG縮略圖的尺寸。優(yōu)選地,使用雙線性或雙三次內(nèi)插來(lái)執(zhí)行這樣的按比例縮小操作。這也進(jìn)一步促進(jìn)在候選JPEG圖像中的例如由于在其中的先前缺少的數(shù)據(jù)扇區(qū)而引起的小誤差可以對(duì)適應(yīng)度分?jǐn)?shù)沒(méi)有大的影響。
根據(jù)一些實(shí)施方式,計(jì)算適應(yīng)度分?jǐn)?shù)的步驟包括將候選JPEG圖像和JPEG縮略圖轉(zhuǎn)換成灰度圖。
根據(jù)一些實(shí)施方式,適應(yīng)度函數(shù)可包括計(jì)算在候選JPEG圖像中的每個(gè)像素與在JPEG縮略圖中的相應(yīng)像素之間的差異,以及將該差異與閾值進(jìn)行比較,并對(duì)于滿足閾值的每個(gè)差異使計(jì)數(shù)器值遞增,其中,適應(yīng)度分?jǐn)?shù)相應(yīng)于計(jì)數(shù)器值。與完成顏色中的比較相比,通過(guò)進(jìn)行在灰度圖中的像素之間的比較,這樣的比較的速度可提高。適應(yīng)度分?jǐn)?shù)也可容易被理解并容易計(jì)算。通過(guò)允許在候選JPEG圖像和JPEG縮略圖中的相應(yīng)像素之間的一些差異,可忽略重放縮或插入誤差(例如,舍入誤差)。
根據(jù)一些實(shí)施方式,適應(yīng)度函數(shù)包括計(jì)算在候選JPEG圖像中的像素與在JPEG縮略圖中的相應(yīng)像素之間的差異,以及將所計(jì)算的差異與第一閾值進(jìn)行比較,并對(duì)于不滿足第一閾值的每個(gè)差異使計(jì)數(shù)器值遞增,其中,如果計(jì)數(shù)器值超過(guò)第二閾值,則計(jì)算和比較差異不被執(zhí)行,以及其中,如果計(jì)數(shù)器值超過(guò)閾值則適應(yīng)度分?jǐn)?shù)被設(shè)置為第一值,且如果計(jì)數(shù)器值不超過(guò)第二閾值則適應(yīng)度分?jǐn)?shù)被設(shè)置為高于第一值的第二值。與完成在顏色中的比較相比,通過(guò)執(zhí)行在灰度圖中的像素之間的比較,這樣的比較的速度可提高。通過(guò)允許在候選JPEG圖像和JPEG縮略圖中的相應(yīng)像素之間的一些差異,可忽略重放縮或插入誤差。而且,通過(guò)使候選JPEG圖像和JPEG縮略圖之間的相似的比較中止,如果太多(例如,多于在圖像中的像素的數(shù)量的1/16或1/10(或任何其它適當(dāng)?shù)姆謹(jǐn)?shù))導(dǎo)致高于第一閾值的差異),通過(guò)中止候選JPEG圖像和JPEG縮略圖之間的像素的比較,則適應(yīng)度函數(shù)的計(jì)算復(fù)雜度可降低。
根據(jù)這個(gè)實(shí)施方式,適應(yīng)度分?jǐn)?shù)可在上述計(jì)數(shù)器值從不超過(guò)第二閾值的情況下被設(shè)置為確實(shí)滿足第一閾值的差異的數(shù)量。
根據(jù)一些實(shí)施方式,本方法還包括將多個(gè)連續(xù)數(shù)據(jù)扇區(qū)中包括相應(yīng)的重新開(kāi)始標(biāo)記值的所述至少一些分類為多個(gè)列表的步驟,其中,每個(gè)列表相應(yīng)于重新開(kāi)始標(biāo)記值并包括多個(gè)數(shù)據(jù)扇區(qū),多個(gè)數(shù)據(jù)扇區(qū)的每個(gè)包括重新開(kāi)始標(biāo)記值。通過(guò)執(zhí)行這個(gè)步驟,選擇多個(gè)候選數(shù)據(jù)扇區(qū)的步驟可包括基于碎裂點(diǎn)數(shù)據(jù)扇區(qū)的重新開(kāi)始標(biāo)記值來(lái)選擇列表,其中,多個(gè)候選數(shù)據(jù)扇區(qū)包括在選定列表中的多個(gè)數(shù)據(jù)扇區(qū)。這個(gè)實(shí)施方式在一次掃描中將包括RST標(biāo)記的數(shù)據(jù)扇區(qū)過(guò)濾出并分類,這可提高為特定的碎裂點(diǎn)數(shù)據(jù)扇區(qū)找到適當(dāng)?shù)暮蜻x數(shù)據(jù)扇區(qū)的速度。
根據(jù)一些實(shí)施方式,當(dāng)在特定列表中的一個(gè)數(shù)據(jù)扇區(qū)已經(jīng)被用作繼續(xù)點(diǎn)數(shù)據(jù)扇區(qū)時(shí),可從相應(yīng)的列表移除這個(gè)扇區(qū),以便提高確定數(shù)據(jù)扇區(qū)的集合的另一繼續(xù)點(diǎn)數(shù)據(jù)扇區(qū)的速度。
根據(jù)一些實(shí)施方式,本方法還包括計(jì)算多個(gè)連續(xù)數(shù)據(jù)扇區(qū)的每個(gè)數(shù)據(jù)扇區(qū)的熵值的步驟,其中,多個(gè)候選扇區(qū)每個(gè)具有高于閾值熵值的熵值。如上所述,作為JPEG圖像的部分的數(shù)據(jù)扇區(qū)一般包括高熵?cái)?shù)據(jù)。而且, RST標(biāo)記是可在數(shù)據(jù)扇區(qū)的集合當(dāng)中純偶然地出現(xiàn)的兩字節(jié)十六進(jìn)制數(shù)字。本實(shí)施方式可有利地從候選數(shù)據(jù)扇區(qū)的列表移除這樣的其中RST標(biāo)記純偶然地出現(xiàn)的數(shù)據(jù)扇區(qū)。
根據(jù)一些實(shí)施方式,將多個(gè)連續(xù)數(shù)據(jù)扇區(qū)中包括相應(yīng)的重新開(kāi)始標(biāo)記值的所述至少一些分類成多個(gè)列表的步驟包括只將具有高于閾值熵值的熵值的數(shù)據(jù)扇區(qū)分類。這個(gè)實(shí)施方式因此進(jìn)一步降低使得其中RST標(biāo)記純偶然地出現(xiàn)的數(shù)據(jù)扇區(qū)作為候選數(shù)據(jù)扇區(qū)的風(fēng)險(xiǎn)。
根據(jù)一些實(shí)施方式,上面所述的方法可被遞歸地執(zhí)行,使得如果另一碎裂點(diǎn)數(shù)據(jù)扇區(qū)在第二碎裂點(diǎn)數(shù)據(jù)扇區(qū)之后被找到,則為了找到屬于待重組的JPEG圖像的更多數(shù)據(jù)扇區(qū)而重復(fù)該方法。換句話說(shuō),如果待重組的JPEG圖像存儲(chǔ)在多于兩個(gè)碎片中的扇區(qū)的集合當(dāng)中,則為了找到碎片3、4等而只再次執(zhí)行該方法。
在第二方面中,本發(fā)明提供包括具有指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的計(jì)算機(jī)程序產(chǎn)品,其中指令適合于當(dāng)被具有處理能力的設(shè)備執(zhí)行時(shí)實(shí)現(xiàn)根據(jù)第一方面的方法。
在第三方面中,本發(fā)明提供當(dāng)從包括多個(gè)連續(xù)數(shù)據(jù)扇區(qū)的數(shù)據(jù)扇區(qū)的集合重組碎片JPEG圖像時(shí)使用的設(shè)備,其中多個(gè)連續(xù)數(shù)據(jù)扇區(qū)中的至少一些包括相應(yīng)的重新開(kāi)始標(biāo)記值,該設(shè)備適合于:
·在所述多個(gè)連續(xù)數(shù)據(jù)扇區(qū)當(dāng)中找出包括JPEG文件簽名的數(shù)據(jù)扇區(qū),
·從包括JPEG文件簽名的數(shù)據(jù)扇區(qū)和至少一個(gè)連續(xù)數(shù)據(jù)扇區(qū)中提取相應(yīng)于待重組的JPEG圖像的JPEG縮略圖,
·從與包括JPEG文件簽名的數(shù)據(jù)扇區(qū)連續(xù)的數(shù)據(jù)扇區(qū)確定屬于待重組的JPEG圖像的數(shù)據(jù)扇區(qū)和第一碎裂點(diǎn)數(shù)據(jù)扇區(qū),其中,第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)相應(yīng)于重新開(kāi)始標(biāo)記值,
·基于相應(yīng)于第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)的重新開(kāi)始標(biāo)記值來(lái)在多個(gè)數(shù)據(jù)扇區(qū)中的所述至少一些當(dāng)中選擇包括相應(yīng)的重新開(kāi)始標(biāo)記值的多個(gè)候選數(shù)據(jù)扇區(qū),
·對(duì)每個(gè)候選數(shù)據(jù)扇區(qū)通過(guò)以下操作確定繼續(xù)點(diǎn)數(shù)據(jù)扇區(qū),
o通過(guò)將至少候選數(shù)據(jù)扇區(qū)附加到屬于待重組的JPEG圖像的數(shù)據(jù)扇區(qū)來(lái)形成數(shù)據(jù)扇區(qū)的候選組,以及
o通過(guò)將數(shù)據(jù)扇區(qū)的候選組和JPEG縮略圖用作為在適應(yīng)度函數(shù)中的參數(shù)來(lái)計(jì)算候選數(shù)據(jù)扇區(qū)的適應(yīng)度分?jǐn)?shù),
·選擇具有在所計(jì)算的適應(yīng)度分?jǐn)?shù)當(dāng)中的最高適應(yīng)度分?jǐn)?shù)的候選數(shù)據(jù)扇區(qū)作為用于確定屬于待重組的JPEG圖像的另外的數(shù)據(jù)扇區(qū)的最佳繼續(xù)點(diǎn)數(shù)據(jù)扇區(qū)。
第二和第三方面可通常具有與第一方面相同的特征和優(yōu)點(diǎn)。
通常,除非在本文另有明確規(guī)定,應(yīng)根據(jù)它們?cè)诩夹g(shù)領(lǐng)域中的普通含義解釋在權(quán)利要求中使用的所有術(shù)語(yǔ)。除非在本文另有明確規(guī)定,對(duì)“一/一/所述[元件、設(shè)備、部件、裝置、步驟等]”的所有引用應(yīng)開(kāi)放性地被解釋為指元件、設(shè)備、部件、裝置、步驟等的至少一個(gè)實(shí)例。
附圖簡(jiǎn)述
將參考附圖通過(guò)本發(fā)明的實(shí)施方式的下面的例證性和非限制性詳細(xì)描述更好地理解本發(fā)明的上述以及額外的目的、特征和優(yōu)點(diǎn),附圖中,相同的參考數(shù)字將用于相似的元件,其中:
圖1通過(guò)例子的方式示出包括待重組的JPEG圖像的數(shù)據(jù)扇區(qū)的集合,
圖2通過(guò)例子的方式示出包括碎片JPEG圖像的圖像數(shù)據(jù)的數(shù)據(jù)扇區(qū)的集合,
圖3通過(guò)例子的方式示出當(dāng)從數(shù)據(jù)扇區(qū)的集合重組碎片JPEG圖像時(shí)使用的方法。
實(shí)施方式的詳細(xì)描述
本發(fā)明提出當(dāng)從硬盤(pán)或閃存轉(zhuǎn)儲(chǔ)重組碎片JPEG圖像時(shí)使用的方法和設(shè)備,其中,硬盤(pán)或閃存轉(zhuǎn)儲(chǔ)包括數(shù)據(jù)扇區(qū)的集合。諸如NAND閃存的一 些閃存將數(shù)據(jù)扇區(qū)(例如,數(shù)據(jù)的512個(gè)字節(jié)或2048個(gè)字節(jié))組織成頁(yè),其中,每頁(yè)與例如被稱為空閑區(qū)域或空閑列的額外數(shù)據(jù)的16或64個(gè)字節(jié)相關(guān)。應(yīng)注意,這樣的空閑區(qū)域不被考慮為如在本發(fā)明中所述的數(shù)據(jù)扇區(qū)。根據(jù)一些實(shí)施方式,這些空閑列在待重組的JPEG圖像的任何搜索之前被過(guò)濾出。諸如eMMC閃存的其它類型的閃存不包括空閑列,且因此上述過(guò)濾操作對(duì)這些是不必要的。硬盤(pán)或閃存可以是移動(dòng)電話或計(jì)算機(jī)或類似的計(jì)算設(shè)備的存儲(chǔ)器。
現(xiàn)在將結(jié)合圖1-3來(lái)描述當(dāng)重組碎片JPEG圖像時(shí)使用的方法。應(yīng)注意,在圖1-2中的數(shù)據(jù)扇區(qū)的集合已被簡(jiǎn)化,以便更容易描述本發(fā)明。
通過(guò)將轉(zhuǎn)儲(chǔ)文件(硬盤(pán)、閃存轉(zhuǎn)儲(chǔ)等)加載到當(dāng)重組碎片JPEG圖像時(shí)使用的設(shè)備的存儲(chǔ)器內(nèi),開(kāi)始對(duì)于待重組的JPEG圖像的搜索。轉(zhuǎn)儲(chǔ)文件包括數(shù)據(jù)扇區(qū)的集合,其包括多個(gè)連續(xù)數(shù)據(jù)扇區(qū)100、200。根據(jù)一些實(shí)施方式,設(shè)備可配置成首先逐個(gè)通過(guò)多個(gè)連續(xù)數(shù)據(jù)扇區(qū)100、200并產(chǎn)生以例如相應(yīng)于JPEG文件簽名的十六進(jìn)制值開(kāi)始的每個(gè)扇區(qū)的列表。在圖1中,在第一扇區(qū)102中找到JPEG文件簽名或JPEG頭部。十六進(jìn)制值可以是0xFF 0xD8 0xFF。換句話說(shuō),當(dāng)重組碎片JPEG圖像時(shí)使用的方法可通過(guò)在多個(gè)連續(xù)數(shù)據(jù)扇區(qū)當(dāng)中找出(S302)包括JPEG文件簽名的數(shù)據(jù)扇區(qū)102開(kāi)始。
在本方法中的下一步驟是從包括JPEG文件簽名的數(shù)據(jù)扇區(qū)102和至少一個(gè)連續(xù)數(shù)據(jù)扇區(qū)104、106提取(S304)相應(yīng)于待重組的JPEG圖像的JPEG縮略圖。如上所述,縮略圖通常位于JPEG文件的前幾千字節(jié)中,這意味著它一般位于在包括JPEG文件簽名的數(shù)據(jù)扇區(qū)102后面的一個(gè)或多個(gè)數(shù)據(jù)扇區(qū)中。根據(jù)一些實(shí)施方式,JPEG縮略圖的數(shù)據(jù)的部分被包括在與JPEG文件簽名相同的數(shù)據(jù)扇區(qū)102中。
如果JPEG縮略圖可被提取,則對(duì)相應(yīng)于JPEG圖像的屬于JPEG圖像的數(shù)據(jù)的搜索可開(kāi)始。本方法可通過(guò)向前步進(jìn)來(lái)繼續(xù),直到包括掃描開(kāi)始(SoS)標(biāo)記的數(shù)據(jù)扇區(qū)108被找到為止。在這個(gè)數(shù)據(jù)扇區(qū)108之后,可找到JPEG圖像的圖像數(shù)據(jù)。這意味著從與包括JPEG文件簽名的數(shù)據(jù)扇區(qū)102連續(xù)的數(shù)據(jù)扇區(qū)104-108、200中,可確定屬于待重組的JPEG圖像 的數(shù)據(jù)扇區(qū)以及還有待重組的JPEG的任何現(xiàn)有的碎裂點(diǎn)。
例如當(dāng)空閑存儲(chǔ)器分成小塊時(shí),碎片可產(chǎn)生且散置于所分配的存儲(chǔ)器中。當(dāng)例如JPEG圖像被存儲(chǔ)在空閑存儲(chǔ)器中時(shí),JPEG圖像的圖像數(shù)據(jù)可分到空閑存儲(chǔ)器的幾個(gè)塊中。因?yàn)樵谌∽C情況下文件系統(tǒng)通常是損壞的且因此缺乏在存儲(chǔ)器的塊(其中可找到JPEG圖像的圖像數(shù)據(jù))之間的指針,雕復(fù)技術(shù)是需要的。然而,仍然需要解決找到JPEG圖像的所有碎片的問(wèn)題,而本發(fā)明可提供對(duì)這個(gè)問(wèn)題的解決方案。
所以當(dāng)確定屬于待重組的JPEG圖像的數(shù)據(jù)扇區(qū)時(shí),本方法可包括逐個(gè)通過(guò)與包括SoS標(biāo)記的數(shù)據(jù)扇區(qū)108連續(xù)的扇區(qū),直到第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)被找到(S306)為止。如果確定數(shù)據(jù)扇區(qū)包括低熵?cái)?shù)據(jù),則可例如找到這樣的碎裂點(diǎn)數(shù)據(jù)扇區(qū),因?yàn)镴PEG圖像的圖像數(shù)據(jù)一般具有高熵。在圖2中,確定被稱為210的數(shù)據(jù)扇區(qū)包括這樣的低熵?cái)?shù)據(jù)。接下來(lái)是用于確定數(shù)據(jù)扇區(qū)是否包括低或高熵?cái)?shù)據(jù)的示例代碼:
第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)208因此被確定(S306)為緊挨在包括低熵?cái)?shù)據(jù)的數(shù)據(jù)扇區(qū)210前面的數(shù)據(jù)扇區(qū)208。這又意味著在SoS標(biāo)記108和包括低熵?cái)?shù)據(jù)的數(shù)據(jù)扇區(qū)210之間的所有數(shù)據(jù)扇區(qū)202-208被確定為屬于待重組的JPEG圖像。
然而,不是待重組的JPEG圖像的所有圖像數(shù)據(jù)都被找到。這可例如從與JPEG縮略圖的比較或通過(guò)確定待重組的JPEG圖像的兩個(gè)最后的字節(jié)是否具有0xFF 0xD9的值來(lái)確定,根據(jù)JPEG標(biāo)準(zhǔn),該值規(guī)定JPEG編碼圖像的末尾。因此,可能需要找到繼續(xù)點(diǎn)數(shù)據(jù)扇區(qū),JPEG圖像的下一 碎片從該繼續(xù)點(diǎn)數(shù)據(jù)扇區(qū)開(kāi)始。這可通過(guò)利用在JPEG編碼圖像中所用的RST標(biāo)記值來(lái)完成。在圖2中所述的例子中,第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)208包括RST2標(biāo)記值,但如上所述,在第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)不包括RST標(biāo)記值的情況下,第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)被確定為相應(yīng)于包括RST標(biāo)記的第一前一數(shù)據(jù)扇區(qū)的重新開(kāi)始標(biāo)記值。所以基于相應(yīng)于第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)208的重新開(kāi)始標(biāo)記值RST2,在多個(gè)數(shù)據(jù)扇區(qū)中的所述至少一些當(dāng)中選擇(S308)包括相應(yīng)的重新開(kāi)始標(biāo)記值的多個(gè)候選數(shù)據(jù)扇區(qū)。候選扇區(qū)應(yīng)因此包括跟在RST2后面的RST標(biāo)記值,這意味著候選扇區(qū)應(yīng)包括RST3標(biāo)記值。在圖2中,這相應(yīng)于被稱為218和228的扇區(qū)。
應(yīng)注意,根據(jù)一些實(shí)施方式,本方法包括將包括相應(yīng)的重新開(kāi)始標(biāo)記值的數(shù)據(jù)扇區(qū)分類成多個(gè)列表,且可在JPEG圖像的任何重組被執(zhí)行之前有利地對(duì)閃存轉(zhuǎn)儲(chǔ)(硬盤(pán)驅(qū)動(dòng)器等)中的數(shù)據(jù)扇區(qū)的整個(gè)集合進(jìn)行本方法。這8個(gè)列表中的每個(gè)相應(yīng)于重新開(kāi)始標(biāo)記值。換句話說(shuō),通過(guò)逐個(gè)通過(guò)在數(shù)據(jù)扇區(qū)的集合中的所有數(shù)據(jù)扇區(qū)和對(duì)相應(yīng)的RST標(biāo)記值的搜索,8個(gè)列表可被創(chuàng)建并相應(yīng)于RST0-7。當(dāng)這樣的數(shù)據(jù)扇區(qū)被找到時(shí),這個(gè)數(shù)據(jù)扇區(qū)被添加到相應(yīng)的列表。
這些列表可接著用于選擇(S308)多個(gè)候選數(shù)據(jù)扇區(qū),即基于碎裂點(diǎn)數(shù)據(jù)扇區(qū)的重新開(kāi)始標(biāo)記值的列表被選擇,且在這種情況下,多個(gè)候選數(shù)據(jù)扇區(qū)可包括在選定列表中的多個(gè)數(shù)據(jù)扇區(qū)。在圖1-2中所示和上面所述的例子中,列表將包括兩個(gè)候選數(shù)據(jù)扇區(qū)218、228。
根據(jù)一些實(shí)施方式,只有包括高熵?cái)?shù)據(jù)的數(shù)據(jù)扇區(qū)可被選擇為候選扇區(qū)。如上所述,包括JPEG圖像數(shù)據(jù)的數(shù)據(jù)扇區(qū)一般具有高熵。因此,只選擇具有這樣的高熵?cái)?shù)據(jù)的候選數(shù)據(jù)扇區(qū)可提供用于重組JPEG圖像的更有效的方法。換句話說(shuō),在例如包括RST3標(biāo)記值的第二數(shù)據(jù)扇區(qū)228將包括低熵?cái)?shù)據(jù)的情況下,這個(gè)扇區(qū)將不被用作為候選數(shù)據(jù)扇區(qū)。有利地,只有包括高熵?cái)?shù)據(jù)(即高于閾值熵值)的數(shù)據(jù)扇區(qū)將被分類成多個(gè)列表,其然后用于確定候選扇區(qū)。根據(jù)一些實(shí)施方式,當(dāng)重組碎片JPEG圖像時(shí)使用的方法包括下列步驟:首先一個(gè)一個(gè)地逐個(gè)通過(guò)數(shù)據(jù)扇區(qū)的集合,計(jì)算每個(gè)扇區(qū)的熵,并將全部的高熵扇區(qū)置于特定的高熵列表中。然后基于這 個(gè)特定的高熵列表,可通過(guò)一個(gè)一個(gè)地逐個(gè)通過(guò)在特定的高熵列表中的數(shù)據(jù)扇區(qū)并將包括RST標(biāo)記值的每個(gè)數(shù)據(jù)扇區(qū)添加到相應(yīng)的列表來(lái)創(chuàng)建上面所述的8個(gè)RST列表。
在選擇(S308)候選數(shù)據(jù)扇區(qū)218、228之后,確定(S310)繼續(xù)點(diǎn)數(shù)據(jù)扇區(qū)。這對(duì)于每個(gè)候選數(shù)據(jù)扇區(qū)218、228通過(guò)將至少候選數(shù)據(jù)扇區(qū)218、228附加到屬于待重組的JPEG圖像的數(shù)據(jù)扇區(qū)202-208形成數(shù)據(jù)扇區(qū)的候選組來(lái)完成。這意味著在圖1-2中所述的例子中,形成數(shù)據(jù)扇區(qū)的兩個(gè)候選組。一組包括扇區(qū)202-208和至少第一候選扇區(qū)218,而一組包括扇區(qū)202-208和至少第二候選扇區(qū)228。
根據(jù)一些實(shí)施方式,不僅僅將候選扇區(qū)附加到屬于待重組的JPEG圖像的數(shù)據(jù)扇區(qū)。而是,對(duì)于每個(gè)候選數(shù)據(jù)扇區(qū),確定與候選扇區(qū)連續(xù)并屬于同一JPEG圖像的數(shù)據(jù)扇區(qū)。這通過(guò)逐個(gè)通過(guò)與候選扇區(qū)連續(xù)的數(shù)據(jù)扇區(qū)并尋找第二碎裂點(diǎn)數(shù)據(jù)扇區(qū)來(lái)完成。換句話說(shuō),將JPEG圖像的完整碎片附加到待重組的JPEG圖像并形成(S312)數(shù)據(jù)扇區(qū)的候選組。在很多情況下,所附加的完整碎片屬于不同于待重組的JPEG圖像的JPEG圖像,但在一些情況下,所附加的完整碎片也屬于待重組的JPEG圖像??梢杂门c第一碎裂點(diǎn)數(shù)據(jù)扇區(qū)相同的方式(即通過(guò)確定數(shù)據(jù)扇區(qū)包括不緊接著前一數(shù)據(jù)扇區(qū)的重新開(kāi)始標(biāo)記值的重新開(kāi)始標(biāo)記值或確定數(shù)據(jù)扇區(qū)包括低熵?cái)?shù)據(jù))來(lái)找到第二碎裂點(diǎn)數(shù)據(jù)扇區(qū)。在圖2的例子中,確定被稱為218-226的扇區(qū)屬于同一JPEG圖像,因?yàn)椴话≧ST標(biāo)記值的扇區(qū)220、222和226包含高熵?cái)?shù)據(jù),且扇區(qū)224包括正確的RST標(biāo)記值(即跟在RST3后面的RST4),RST3是前一數(shù)據(jù)扇區(qū)218的RST標(biāo)記值。然而,被稱為228的扇區(qū)包括錯(cuò)誤的且不緊接著前一數(shù)據(jù)扇區(qū)224的重新開(kāi)始標(biāo)記值的RST標(biāo)記值(RST3)。因此,第二碎裂點(diǎn)數(shù)據(jù)扇區(qū)被確定為被稱為226的數(shù)據(jù)扇區(qū)。這意味著數(shù)據(jù)扇區(qū)的第一候選組包括被稱為202-208和218-226的扇區(qū)。對(duì)于第二候選數(shù)據(jù)扇區(qū),被稱為232的數(shù)據(jù)扇區(qū)被確定為包括低熵?cái)?shù)據(jù),這意味著數(shù)據(jù)扇區(qū)的第二候選組包括被稱為202-208和228-230的扇區(qū)。
下一步驟是通過(guò)將數(shù)據(jù)扇區(qū)的候選組和JPEG縮略圖用作為在適應(yīng)度 函數(shù)中的參數(shù)來(lái)計(jì)算(S314)每個(gè)候選數(shù)據(jù)扇區(qū)的適應(yīng)度分?jǐn)?shù)。適應(yīng)度函數(shù)可以是比較JPEG縮略圖的數(shù)據(jù)與候選數(shù)據(jù)扇區(qū)并返回適應(yīng)度分?jǐn)?shù)的任何函數(shù),適應(yīng)度分?jǐn)?shù)可用于選擇(S318)多個(gè)候選數(shù)據(jù)扇區(qū)中的哪個(gè)被用作繼續(xù)點(diǎn)數(shù)據(jù)扇區(qū)。適應(yīng)度函數(shù)可例如將在JPEG編碼縮略圖中的頻率分量與在候選數(shù)據(jù)扇區(qū)中的JPEG編碼數(shù)據(jù)進(jìn)行比較。適應(yīng)度函數(shù)還可包括將數(shù)據(jù)扇區(qū)的候選組解碼以形成候選JPEG圖像,以及其中,適應(yīng)度函數(shù)包括將候選JPEG圖像的像素?cái)?shù)據(jù)與JPEG縮略圖的像素?cái)?shù)據(jù)進(jìn)行比較。這個(gè)比較可包括將JPEG縮略圖重放縮到候選JPEG圖像的尺寸,或它可包括重放縮候選JPEG圖像以匹配JPEG縮略圖的尺寸。
根據(jù)一些實(shí)施方式,適應(yīng)度函數(shù)包括將候選JPEG圖像和JPEG縮略圖轉(zhuǎn)換成灰度圖圖像。
現(xiàn)在以示例的方式示出兩個(gè)適應(yīng)度函數(shù),其中灰度圖圖像被比較以提供適應(yīng)度分?jǐn)?shù)。在這兩個(gè)例子中,候選JPEG圖像被重放縮以匹配JPEG縮略圖的尺寸。
第一適應(yīng)度函數(shù)包括計(jì)算在候選JPEG圖像中的每個(gè)像素與在JPEG縮略圖中的相應(yīng)像素之間的差異,以及將該差異與閾值進(jìn)行比較,并對(duì)于滿足閾值的每個(gè)差異使計(jì)數(shù)器值遞增,其中適應(yīng)度分?jǐn)?shù)相應(yīng)于計(jì)數(shù)器值。
在上面的例子中,閾值被設(shè)置為零,即計(jì)數(shù)器值僅在改變尺寸的候選JPEG圖像中的像素值等于在JPEG縮略圖中的相應(yīng)像素值時(shí)遞增,但根據(jù)實(shí)施方式,本方法的這個(gè)部分可改變?yōu)椋?/p>
if(fabs(thumbVec[z]-newVect[z])<difference_threshold)
similarity++;
其中“difference_threshold”根據(jù)在灰度圖圖像中可能的灰度值的數(shù)量而被設(shè)置為任何適當(dāng)?shù)闹怠Mǔ?,灰度圖圖像可包括256個(gè)灰度值,但使用16個(gè)值也是可能的。
這也適用于第二適應(yīng)度函數(shù)。
第二適應(yīng)度函數(shù)包括計(jì)算在候選JPEG圖像中的像素與在JPEG縮略圖中的相應(yīng)像素之間的差異,以及將所計(jì)算的差異與第一閾值進(jìn)行比較,并對(duì)于不滿足第一閾值的每個(gè)差異使計(jì)數(shù)器值遞增,其中,如果計(jì)數(shù)器值超過(guò)第二閾值,則不執(zhí)行計(jì)算和比較差異,以及其中,如果計(jì)數(shù)器值超過(guò)閾值,則適應(yīng)度分?jǐn)?shù)被設(shè)置為第一閾值,而如果計(jì)數(shù)器值不超過(guò)第二閾值,則適應(yīng)度分?jǐn)?shù)被設(shè)置為高于第一值的第二值。在上面所述的計(jì)數(shù)器值從不超過(guò)第二閾值的情況下,根據(jù)這個(gè)實(shí)施方式的適應(yīng)度分?jǐn)?shù)可被設(shè)置為確實(shí)滿足第一閾值的差異的數(shù)量。
在這個(gè)實(shí)施方式中,第二閾值被設(shè)置為在縮略圖圖像中的像素的數(shù)量的1/16,即(cy*cx)/16,其中,cy是在圖像的y方向上的縮略圖圖像的尺寸,而cx是在圖像的x方向上的縮略圖圖像的尺寸,但可使用其它閾值,例如1/5、1/10或1/20。
因此對(duì)數(shù)據(jù)扇區(qū)的第一候選組并對(duì)數(shù)據(jù)扇區(qū)的所有其它候選組計(jì)算適應(yīng)度分?jǐn)?shù),直到?jīng)]有數(shù)據(jù)扇區(qū)的另外的候選組存在為止(在圖3中的步驟S316中確定)。
根據(jù)上面所述的例子,適應(yīng)度函數(shù)和適應(yīng)度分?jǐn)?shù)被用于確定第一候選數(shù)據(jù)扇區(qū)218或第二候選數(shù)據(jù)扇區(qū)228是否開(kāi)始待重組的JPEG圖像的第二碎片。換句話說(shuō),具有在所計(jì)算的適應(yīng)度分?jǐn)?shù)當(dāng)中的最高適應(yīng)度分?jǐn)?shù)的候選數(shù)據(jù)扇區(qū)被選擇(S318)為用于確定屬于待重組的JPEG圖像的另外的數(shù)據(jù)扇區(qū)的繼續(xù)點(diǎn)數(shù)據(jù)扇區(qū)。選定的繼續(xù)點(diǎn)數(shù)據(jù)扇區(qū)因此開(kāi)始待重組的JPEG圖像的第二碎片。
如技術(shù)人員理解的,如果需要的話,即如果待重組的JPEG圖像包括多于兩個(gè)碎片,上面所述的方法可接著被用于找到待重組的JPEG圖像的另外的碎片。換句話說(shuō),如果確定(S320)待重組的圖像未被完全重組(例如,通過(guò)與JPEG縮略圖比較),則重復(fù)步驟S308-S318,直到屬于待重組的JPEG圖像的所有數(shù)據(jù)扇區(qū)被確定為止。
以示例的方式,現(xiàn)在將描述用于重組JPEG圖像的另一特定的實(shí)施方式。重組算法包括12個(gè)步驟:
1.將轉(zhuǎn)儲(chǔ)文件加載到存儲(chǔ)器內(nèi)
2.一次一個(gè)扇區(qū)地逐個(gè)通過(guò)文件,產(chǎn)生以十六進(jìn)制0xFF 0xD8 0xFF(JPEG文件簽名)開(kāi)始的每個(gè)扇區(qū)的列表。將這個(gè)列表稱為JPEGSTARTS。
3.一次一個(gè)扇區(qū)地逐個(gè)通過(guò)文件,計(jì)算每個(gè)扇區(qū)的熵。將高熵扇區(qū)置于被稱為HIGHENTROPYSECTORS的列表中。
4.創(chuàng)建用于記錄具有在轉(zhuǎn)儲(chǔ)中的不同重新開(kāi)始標(biāo)記的扇區(qū)的、被稱為RST0LIST、RST1LIST、RST2LIST、RST3LIST、RST4LIST、RST5LIST、RST6LIST和RST7LIST的8個(gè)列表。一次一個(gè)扇區(qū)地逐個(gè)通過(guò)文件,尋找8個(gè)不同的重新開(kāi)始標(biāo)記。當(dāng)找到一個(gè)重新開(kāi)始標(biāo)記時(shí),將它添加到適當(dāng)?shù)牧斜怼?/p>
5.對(duì)于在JPEGSTART中的每個(gè)條目,檢查是否可從這個(gè)扇區(qū)及其連續(xù)扇區(qū)提取縮略圖。對(duì)于每個(gè)成功的縮略圖提取,向前執(zhí)行步驟6,在此之后,算法完成。
6.對(duì)于待重組的當(dāng)前JPEG,向前移步到SOS標(biāo)記并逐個(gè)扇區(qū)地繼續(xù),直到遇到低熵扇區(qū)或檢測(cè)到重新開(kāi)始標(biāo)記失配為止。
7.此時(shí),算法需要選擇在轉(zhuǎn)儲(chǔ)中的最佳位置以繼續(xù)JPEG提取。如果最后一個(gè)正確的標(biāo)記是RST4,則我們需要選擇在RST5LIST中的扇區(qū)之一。算法需要最后正確雕復(fù)的重新開(kāi)始標(biāo)記+1(RST7環(huán)繞回RST0)。
8.當(dāng)適當(dāng)?shù)闹匦麻_(kāi)始標(biāo)記列表已被選擇時(shí),算法需要選擇列表中的哪個(gè)要素是碎片JPEG的最佳繼續(xù)。對(duì)于每個(gè)條目,逐個(gè)扇區(qū)繼續(xù),直到遇到低熵扇區(qū)或檢測(cè)到重新開(kāi)始標(biāo)記失配以得到碎片長(zhǎng)度為止。
9.使用來(lái)自待重組的JPEG的開(kāi)始部分的數(shù)據(jù)創(chuàng)建緩沖器。附加當(dāng)前正被調(diào)查的碎片的數(shù)據(jù)。
10.將在上面提到的緩沖器中的JPEG解碼。將它縮小到縮略圖圖像的尺寸。將此稱為CARVEDPIC。
11.使用適應(yīng)度函數(shù)比較縮略圖與CARVEDPIC,以得到適應(yīng)度分?jǐn)?shù)。
12.選擇具有最佳適應(yīng)度分?jǐn)?shù)的碎片作為文件的繼續(xù)。
在研究了上面的描述之后,本公開(kāi)的另外的實(shí)施方式將對(duì)本領(lǐng)域中的技術(shù)人員變得明顯。即使本描述和附圖公開(kāi)了實(shí)施方式和例子,本公開(kāi)也不限于這些特定的例子。可做出很多修改和變化而不偏離由附隨的權(quán)利要求限定的本公開(kāi)的范圍。出現(xiàn)在權(quán)利要求中的任何參考符號(hào)不應(yīng)被理解為限制其范圍。
在上文中公開(kāi)的系統(tǒng)和方法可被實(shí)現(xiàn)為軟件、固件、硬件或其組合。在硬件實(shí)現(xiàn)中,在上面的描述中提到的在功能單元或級(jí)之間的任務(wù)的劃分并不一定相應(yīng)于到物理單元的劃分;相反,一個(gè)物理部件可具有多個(gè)功能,且一個(gè)任務(wù)可由協(xié)作的幾個(gè)物理部件執(zhí)行。某些部件或所有部件可被實(shí)現(xiàn)為由數(shù)字信號(hào)處理器或微處理器執(zhí)行的軟件或被實(shí)現(xiàn)為硬件或?yàn)閷S眉呻娐?。這樣的軟件可分布在可包括計(jì)算機(jī)存儲(chǔ)介質(zhì)(或非臨時(shí)介質(zhì))和通信介質(zhì)(或臨時(shí)介質(zhì))的計(jì)算機(jī)可讀介質(zhì)上。如本領(lǐng)域中的技術(shù)人員公知的,術(shù)語(yǔ)“計(jì)算機(jī)存儲(chǔ)介質(zhì)”包括在用于存儲(chǔ)信息(例如,計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù))的任何方法或技術(shù)中實(shí)現(xiàn)的易失性和非易失性的、可移動(dòng)和不可移動(dòng)的介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于RAM、ROM、EEPROM、閃存或其它存儲(chǔ)器技術(shù)、CD-ROM、數(shù)字通用盤(pán)(DVD)或其它光盤(pán)存儲(chǔ)器、盒式磁帶、磁帶、磁盤(pán)存儲(chǔ)器或其它磁性存儲(chǔ)設(shè)備或可被用于存儲(chǔ)期望信息并可由計(jì)算機(jī)訪問(wèn)的任何其它介質(zhì)。此外,技術(shù)人員公知的是,通信介質(zhì)一般體現(xiàn)計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或在調(diào)制數(shù)據(jù)信號(hào)(例如,載波)或其它傳輸介質(zhì)中的其它數(shù)據(jù),并包括任何信息輸送介質(zhì)。