基于通道编码的数字图像恢复算法

2019-06-07 15:08谷玉莹
软件导刊 2019年1期

谷玉莹

摘 要:信息损失不可避免。为达到图像的篡改容忍度与恢复质量之间的平衡,基于纠错编码方法,对原始图像采用SPIHT编码进行整体压缩,再用RS纠错编码对SPIHT源码流进行保护,将编码后的RS码流作为水印嵌入宿主图像。实验结果表明,该算法的图像质量和篡改容忍度均有所提高。基于纠错编码的图像恢复技术能够保证在篡改容忍度以内恢复所有的压缩码流,大大降低接收端解压的计算复杂度,提高图像恢复效率。

关键词:易碎水印;图像篡改保护;SPIHT编码;RS编码

DOI:10. 11907/rjdk. 181766

中图分类号:TP317.4文献标识码:A文章编号:1672-7800(2019)001-0197-04

Abstract: In order to achieve a balance between tolerance of tampering and restoration quality of image against endless information loss, this paper uses the method of error correction coding to compress the original image by SPIHT and protect the SPIHT out-stream by RS technology, and the RS stream is embedded into host image as watermark. Experimental results show that the quality of the restored image and the tolerance of tampering are improved. The image restoration technology based on error correction coding can guarantee the recovery of all compressed code streams within the tamper tolerance, and it can greatly reduce the computational complexity of the receiver decompression and improve the efficiency of image recovery.

Key Words: fragile watermarking; image tampering protection; SPIHT coding; RS coding

0 引言

数字图像的完整性[1-2]需要运用复杂技术防止对图像的恶意修改,常见方法是水印的自嵌入与自恢复。自恢复方法中水印通常分为两类:校验位和参考位[3-5]。校验位用于定位篡改区域,参考位则用于恢复原始信息。为了内容恢复,通常某个块的参考位总是嵌入到另一个块中,然而这些方法 [6-7]的内容恢复可能失败,因为原始块和包含其参考位的块可能被误判为篡改块。为解决该问题,Zhang等[8-10]将一个块的参考数据分散到整个图像,有效解决了误检率的问题,但导致不必要的水印浪费。为此,TY Lee等[11]提出一种双重水印方案解决该问题。本文算法参考源编码图像中,这些数据来源于整个图像,然后分散在整个图像中,以克服篡改和浪费问题。

本文算法先将原始图像进行SPIHT压缩,输出码流用于恢复原始信息,然后用RS编码进行保护,RS码流用于决定篡改容忍度TTR[12-14]。为保证信息安全,在嵌入前还要用密钥K将RS码流进行置乱[15]。实验证明,在相同TTR下,图像的恢复质量高于之前算法。另外,本文算法除优化恢复质量和TTR的权衡外,还保证嵌入水印后的图像质量不会太差,这是自嵌入恢复算法的优点所在。

1 SPIHT压缩编码算法

SPIHT算法[16]通过重要像素点链表(LSP)、不重要像素点链表(LIP)、不重要像素集合链表(LIS)等3张链表,把所有像素点按空间方向树的结构组织起来进行编码。重要像素点指小波系数的绝对值大于等于给定的门限T的像素点,贾志科等[17]对初始量化门限T0作了优化。链表中每个元素包含4个相邻像素。在LIS链表中,元素为D(i,j)(称为A型LIS链表)或L(i,j)(称为B型LIS链表),表示一棵空间方向树,(i,j)为其根节点坐标。

SPIHT算法步骤:①初始化:把链表LSP置空,把H中的所有节点坐标(i,j)放入到链表LIP中并把H中所有后代的节点坐标(i,j)放入LIS中,标记为A型集合;②分类过程一:对LIP中的每一个节点坐标(i,j),输出Sn(i,j),输出该节点C(i,j)的符号并将其移到LSP末尾;③分类过程二:对LIS中的每一个(i,j)来说,如果该集合属于A类型,则输出Sn(D(i,j)),如果Sn(D(i,j))=1,则有两种情况:对O(i,j)中的每一个(k,1),输出Sn(k,1),如果Sn(k,1)=1,则输出该节点C(k,1)的符号并将其放到LSP末尾,否则将其放到LIP末尾。删除这个集合,如果L(i,j)存在,则将(i,j)放到LIS的末尾并将该集合标记为B类型。如果该集合属于B类型则输出Sn(L(i,j)),如果Sn(L(i,j))=1则删除该集合,然后将其所有的(k,1)∈O(i,j))放到LIS末尾,并将这些集合均标记为A类型;④精确过程:对LSP链表中的每一个(i,j)(除在本次扫描中产生的(i,j)外),输出|c(i,j)|的第n位比特值;⑤终止结束:如果n=0則终止,否则取n-1,并转到第②步继续执行。

2 RS通道纠错编码算法