破损图片识别与修复技术分析

减小字体 增大字体 作者:吴文良  来源:www.zhonghualunwen.com  发布时间:2009-08-16 14:41:56

关键词:受损图片;JPEG;识别修复

摘要:受损图片文件的识别与修复技术在内容安全领域有非常重要的意义。该文在分析一般图片格式如JPEG文件结构的基础上,探讨一些实现识别受损图片和修复的方案,并介绍相关领域技术发展水平。

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库中支持的编码既是模块的也是可扩展的。在核心代码和编码驱动之间有定义良好的接口;而且,对于新图像格式的支持能在不修改库的情况下很容易添加。为了这样,新格式的编码驱动要提供。而且,应用程序仅仅需要包含它要使用的图像格式的编码驱动,能避免将内存花在从来都不使用的编码驱动上。

[1] [2]  下一页

Tags:

作者:吴文良
  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论