摘要:受損圖片文件的識別與修復技術在內容安全領域有非常重要的意義。該文在分析一般圖片格式如JPEG文件結構的基礎上,探討一些實現識別受損圖片和修復的方案,并介紹相關領域技術發展水平。
關鍵詞:受損圖片;JPEG;識別修復
中圖分類號:TP3 文獻標識碼:A 文章編號:1009-3044(2009)15-3997-02
Anaylse of Detection Repair of Damaged Image
WU Wen-liang
(Dongguan Senior Technical School, Dongguan 523112, China)
Abstract:Anaylse of Detection Repair of Damaged Image is of momentous significance in the field of content security. Based on general JPEG file structure analysis, this article give some proposals on how to detect or repair Damaged images, also a introduction of the development of this area is present.
Key words:damaged picutre; JPEG; detection repair
1 引言
一些受損的存儲設備,如相機的存儲卡損壞造成圖片丟失,在利用一些常見的數據恢復工具如FinalData對存儲卡進行圖片恢復之后,恢復后的圖片很多存在內容被破壞造成不能正常瀏覽情況。
受損圖片的識別和修復是數據安全服務領域中的一項重要內容。JPEG是最常見的壓縮圖片文件格式之一,有十分廣泛的應用。隨著計算機,網絡的日益普及使用,JPEG文件已成為圖片傳輸,存儲的主流格式。然后由于網絡傳輸,磁盤損壞,病毒破壞等等原因,使得JPEG圖片文件受到破壞,造成用戶重要資料的丟失,因此關于JPEG文件破損識別與修復的研究具有重大應用意義。
針對圖片的破損識別和修復是文檔修復的一個重要分支。文檔修復是一個常見的問題。它是指對某種應用文檔受損不能打開或打開后亂碼的修復。通常所說的狹義數據恢復一般是相對操作系統的,是指文件邏輯存儲上不可見的恢復;而文檔修復是指對于特定的應用程序,由于數據邏輯上的原因,無法合理,正確地解釋文檔數據的實際意義,一般表現為“文檔損壞無法打開”或打開后為亂碼,但從操作系統的角度看,文檔讀寫沒有任何問題(操作系統只將文檔視為一個整體,可以正常存儲和管理,它并不關心文檔中數據的具體含義)。
針對損壞圖片,通過糾錯,重新計算CRC校驗,改正不正確的格式等手段,解決這些問題的過程,稱為圖片修復。
2 JPEG圖像數據格式分析
JPEG是Joint Photographic Experts Group(聯合圖像專家組)的縮寫,文件后輟名為\".jpg\"或\".jpeg\",是最常用的圖像文件格式,由一個軟件開發聯合會組織制定,是一種有損壓縮格式,能夠將圖像壓縮在很小的儲存空間,圖像中重復或不重要的資料會被丟失,因此容易造成圖像數據的損傷。尤其是使用過高的壓縮比例,將使最終解壓縮后 恢復的圖像質量明顯降低,如果追求高品質圖像,不宜采用過高壓縮比例。但是JPEG壓縮技術十分先進,它用有損壓縮方式去除冗余的圖像數據,在獲得極高的壓縮率的同時能展現十分豐富生動的圖像,換句話說,就是可以用最少的磁盤空間得到較好的圖像品質。而且JPEG是一種很靈活的格式,具有調節圖像質量的功能,允許用不同的壓縮比例對文件進行壓縮,支持多種壓縮級別,壓縮比率通常在10:1到40:1之間, 壓縮比越大,品質就越低;相反地,壓縮比越小,品質就越好。比如可以把1.37Mb的BMP位圖文件壓縮至20.3KB。當然也可以在圖像質量和文件尺寸之間找到平衡點。JPEG格式壓縮的主要是高頻信息,對色彩的信息保留較好,適合應用于互聯網,可減少圖像的傳輸時間,可以支持24bit真彩色,也普遍應用于需要連續色調的圖像。
JPEG 標準定義了三種不同的編碼系統: 1) 一種有損基本編碼系統, 這個系統是以DCT 為基礎的并且足夠應付大多數壓縮方面的應用;2) 一種擴展的編碼系統, 這種系統面向的是更大規模的壓縮, 更高的精確性或逐漸遞增的重構應用系統;3)一種面向可逆壓縮的無損獨立編碼系統。
2.1 JPEG文件的二進制格式
JPEG文件的格式是分為一個一個的段來存儲的(但并不是全部都是段),段的多少和長度并不是一定的。只要包含了足夠的信息,該JPEG文件就能夠被打開,呈現給人們。JPEG文件的每個段都一定包含兩部分一個是段的標識,它由兩個字節構成:第一個字節是十六進制0xFF,第二個字節對于不同的段,這個值是不同的。緊接著的兩個字節存放的是這個段的長度(除了前面的兩個字節0xFF和0xXX,X表示不確定。他們是不算到段的長度中的)。注意:這個長度的表示方法是按照高位在前,低位在后的,與Intel的表示方法不同。比方說一個段的長度是0x12AB,那么它會按照0x12,0xAB的順序存儲。但是如果按照Intel的方式:高位在后,低位在前的方式會存儲成0xAB,0x12,而這樣的存儲方法對于JPEG是不對的。這樣的話如果一個程序不認識JPEG文件某個段,它就可以讀取后兩個字節,得到這個段的長度,并跳過忽略它。
3 JPEG圖片的破損識別
對于JPEG圖像的破損識別特別是面對海量圖片數據實現快速甄選,區分正常與非正常圖片有很大的應用價值。對JPEG格式圖片的破損識別可采用兩種方法:1) 圖片二進制格式的完整性驗證;2) 采用JPEG的編碼庫對圖片進行能否正常解碼測試;
本文主要討論采用第二種方法即采用JPEG的編碼庫通過過能否正常解碼測試來破損與否識別。JPEG編碼庫除了Jpeg60(是JPEG的官方實現),這里特別介紹Jasper,Jasper是JPEG2000的一個非官方實現,由一個國外的一個大學教師實現,還算是個好用的LIB,可以免費下載,里面有VC的工程文件。Jasper能夠處理的圖像格式包括JPEG-2000 JP2, JPEG,PNM,BMP,Sun Rasterfile和PGX格式圖片。
3.1 Jasper庫的介紹
Jasper庫提供表現圖像、色彩(色彩空間定義)和其他相關的入口類。這些類都有很好的接口,通過這些接口程序可以和類對象交互。可以使用這個庫來操作圖像、導入/導出各種格式的圖像并執行基本的色彩管理操作。
理論上,Jasper庫由兩個不同的類型代碼組成:
1) 核心代碼
2) 編碼驅動
核心代碼提供在庫上的基本框架,而編碼驅動僅僅提供編碼和解碼各種格式圖像數據的方式。所有的應用程序接口都通過核心代碼;編碼驅動僅僅被核心代碼直接調用,其他應用程序從來不需要。
Jasper庫中支持的編碼既是模塊的也是可擴展的。在核心代碼和編碼驅動之間有定義良好的接口;而且,對于新圖像格式的支持能在不修改庫的情況下很容易添加。為了這樣,新格式的編碼驅動要提供。而且,應用程序僅僅需要包含它要使用的圖像格式的編碼驅動,能避免將內存花在從來都不使用的編碼驅動上。
4 JPEG圖片的破損修復
4.1 幾款圖片修復工具介紹
4.1.1 PixRecovery
圖片恢復軟件支持JPEG, GIF, TIFF或BMP格式圖片(JPEG, GIF89a, GIF87a, BMP and TIFF)。
恢復后圖片保存為bitmap(.bmp)圖像。
特點:
1) 采用加強算法最大可能恢復受損數據;
2) 恢復圖片大小符合原始尺寸;
3) 多格式支持;
4) 使用簡單,安裝快捷;
不足:
不支持漸進編碼方式的JPEG圖片。
4.1.2 JPEG Recovery Pro
特點:
1) JPEG Recovery是一款方便修復損壞JPEG格式圖片或相片的軟件,特別針對采用一些數據恢復工具從介質上恢復后的圖片;
2) 當原始圖片被數據恢復工具恢復后成為兩張圖片,JPEG Recovery能支持綜合利用兩幅受損圖片來修復原始圖片。
3) JPEG Recovery還能支持從破損圖片中抽取出圖片縮率圖,對某些JPEG損壞造成不能修復的,抽取的縮略圖提供一個原始圖片的簡單的查看。
5 結束語
破損圖片的識別基本上按照上述策略,可以達到一個不錯的識別率。相比較破損圖片修復,盡管現在的圖片恢復工具有不少,但目前的修復工具功能都不夠強大,效果不太明顯。破損的圖片,其中出現了數據改變,像被刪除的文件已經全部或部分被覆蓋了,由于某些結構的位或字節被改變,得不到正確的解釋信息,造成應用程序無法正確解釋其內容。同時JPEG壓縮格式造成圖片內部沒有可利用的冗余信息,所以圖片修復的成功率還是相對較低,有很大的局限性,最好的預防措施還是對重要數據文件進行備份。
相信隨著技術水平的進步,以及更多的人投入到這個研究領域,圖片的修復技術會取得較快的發展,從而達到更高的技術水平。
參考文獻:
[1] 邢賽鵬,平西建.JPEG圖像數據格式簡明分析[J].微計算機信息,2007(6).
[2] 戴士劍,涂彥暉.數據恢復技術[M].2版.北京:電子工業出版社,2005.
[3] Michael D.Adams.JasPer Software Reference Manual(Version 1.900.0).
[4] PixRecovery induction Officerecovery Inc.
[5] PixRecovery induction hketech Inc.