1.一种编码分组的可逆信息隐藏方法,其特征是包括如下步骤:
步骤一:对隐藏信息进行编码分组,将二进制隐藏信息转换成十进制编码,对十进制编码两两分组;
具体是将二进制隐藏信息比特流中2bit作为一个单位转换为1位十进制的数字,若二进制隐藏信息的个数为奇数,则最后一位单独转成十进制数字;设转换后的隐藏信息十进制数字编码为C={c1,c2,c3,…,cm},则有0≤ci≤3,将C两两进行分组,若m为奇数,则在C中增加一个编码cm+1,且使cm+1=cm,cm+1与cm构成一编码组;为了准确提取隐藏信息,设置标记信息flag,判断是否增加编码,若增加编码cm+1,flag=1,否则flag=0,将flag作为密钥发送给接收方,接收方可根据flag的取值确定嵌入是否增加额外的编码,准确提取隐藏信息;设(ck-1,c2k)为待隐藏编码组,由于0≤ci≤3,则(c2k-1,c2k)有16种组合,分别为(0,0)、(0,1)、(0,2)、(0,3)、(1,0)、(1,1)、(1,2)、(1,3)、(2,0)、(2,1)、(2,2)、(2,3)、(3,0)、(3,1)、(3,2)、(3,3);
步骤二:对两两分组的十进制编码进行可逆信息隐藏;
设隐藏载体信息一维序列为S,设定一待隐藏值K,在载体序列中求出所有值为K的元素并记录元素下标信息,设值为K的元素序列为L={l1,l2,l3,…,ln},将隐藏信息编码组(c2k-1,c2k)隐藏在L中,由于隐藏时可能需要对L中元素加1或减1,设置一变量sig,当K≥0时,sig=1,否则sig=-1,li+sig为修改后的值;设隐藏后的元素为l′i,根据(c2k-1,c2k)取值情况确定隐藏方法;
具体如下:
(1)(0,0)的隐藏
从L中取li,li+1,li+2连续3个元素作为载体信息,隐藏方法如下:
l′i+j=li+j(0≤j≤2)
(0,0)对应含密信息组为(K,K,K),下一组编码从li+3开始隐藏;
(2)(1,1)、(2,2)和(3,3)的隐藏
从L中取li,li+1,li+2,li+3连续4个值为K的元素作为载体,隐藏方法如下:
隐藏后编码组与信息组的对应关系为:
(1,1)对应含密信息组为(K+sig,K,K,K);
(2,2)对应含密信息组为(K,K+sig,K,K),
(3,3)对应含密信息组为(K,K,K+sig,K),下一组编码从li+4开始隐藏;
(3)其他编码组的隐藏
设m=max(c2k-1,c2k),从L中取li,li+j,…,li+m+1连续m+2个元素作为载体信息,其中li+m+1为标志位,通过l′i+m+1确定c2k-1和c2k的大小关系,令 隐藏方法如下:
隐藏后编码组与信息组的对应关系为:
(0,1)对应含密信息组为(K+sig,K+sig,K+sig);
(1,0)对应含密信息组为(K+sig,K+sig,K);
(0,2)对应含密信息组为(K+sig,K,K+sig,K+sig);
(2,0)对应含密信息组为(K+sig,K,K+sig,K);
(1,2)对应含密信息组为(K,K+sig,K+sig,K+sig);
(2,1)对应含密信息组为(K,K+sig,K+sig,K);
(0,3)对应含密信息组为(K+sig,K,K,K+sig,K+sig);
(3,0)对应含密信息组为(K+sig,K,K,K+sig,K);
(1,3)对应含密信息组为(K,K+sig,K,K+sig,K+sig);
(3,1)对应含密信息组为(K,K+sig,K,K+sig,K);
(2,3)对应含密信息组为(K,K,K+sig,K+sig,K+sig);
(3,2)对应含密信息组为(K,K,K+sig,K+sig,K);
下一组编码从li+m+2开始隐藏;
从上可得到编码组与隐藏载体的一一对应关系,按需要载体数从小到大进行排序,当载体数相同时按修改载体信息量从小到大排序,排序后的对应关系如下:
(0,0)f(K,K,K)(在3个载体数据隐藏4位信息并且不修改原始载体信息);
(1,0)f(K+sig,K+sig,K)(在3个载体数据隐藏4位信息修改2个原始载体信息);
(0,1)f(K+sig,K+sig,K+sig)(在3个载体数据隐藏4位信息修改3个原始载体信息);
(在4个载体数据隐藏4位信息修改1个原始载体信息);
(在4个载体数据隐藏4位信息修改2个原始载体信息);
(在4个载体数据隐藏4位信息修改3个原始载体信息);
(在5个载体数据隐藏4位信息修改2个原始载体信息);
(在5个载体数据隐藏4位信息修改3个原始载体信息);
隐藏相同位数的信息,若需要的载体信息数量越少,则隐藏容量越大;当载体数量相同时,载体修改量越小,则对载体图像改变越小;为了得到较大的隐藏容量和较好的隐藏效果,统计隐藏信息编码组的频数并按编码组频数进行排序,设频数降序排列16个编码组为m1,m2,…,m16,将频数降序排列16个编码组作为密钥发送给接受方;将编码组进行变换,使频数大编码组隐藏所需的载体信息少,提高隐藏容量和质量;
编码组变换及对应载体隐藏后的关系如下:
通过上述方法将编码组隐藏在L中,若L剩余元素个数小于5时,则剩余元素不隐藏信息;编码组隐藏在值为K的元素中得到含有编码组信息序列L′,L′中元素的值为K或K+sig,为实现可逆隐藏需对S中值不为K的元素进行修改,使含有隐藏信息的元素与不含有隐藏信息的元素不重叠,根据L′中的元素值对S中隐藏信息的位进行修改,设S中没有隐藏信息位修改后的值为s′i,修改方法如下:
通过以上处理可实现可逆信息隐藏;
步骤三:提取隐藏信息恢复载体信息
设载密序列为S′,由隐藏方法可知,值为K或K+sig的元素中含有秘密信息,在S′中求出所有值为K或K+sig的元素,在这些元素中根据隐藏算法提取隐藏信息;设元素序列为L′={l′1,l′2,…,l′n}, 在L′中从l′1开始,取连续的3个元素l′i,l′i+1,l′i+2,根据下面4种情况提取编码组;
(1)若e=0,可知在l′i,l′i+1,l′i+2中没有元素被修改,则提取编码组如下:
下一组编码提取从l′i+3开始提取;
(2)若e=1,则在l′i,l′i+1,l′i+2中修改了1个元素,需根据di+3的取值情况提取编码组:
①di+3=0,说明隐藏时在l′i,l′i+1,l′i+2,l′i+3中修改了1个元素,则c2k-1=c2k≠0,若di+j=1(0≤j≤2),则提取编码组如下:
下一组编码提取从l′i+4开始;
②若di+3=1,说明隐藏时在l′i,l′i+1,l′i+2,l′i+3中修改了2个元素,在这4个元素中,必存在a,b(0≤a,b≤3)使得l′i+a=1,l′i+b=1,然后根据元素大小标记位l′i+4取值提取编码组;
当di+4=0,则c2k-1>c2k,提取编码组如下:
当di+4=1,则c2k-1<c2k,提取编码组为:
下一组编码提取从l′i+5开始;
(3)若e=2,说明隐藏时在l′i,l′i+1,l′i+2中修改了2个元素,可由下述两种情况提取编码组:
①若 l′i+2为编码组两个元素大小标记位,由于di+2=0,可知c2k-1>c2k,提取编码组如下:
下一组编码提取从l′i+3开始;
②若 或 则需根据元素大小标记位l′i+3取值提取编码组,隐藏时修改了2个元素,必存在a,b(0≤a,b≤2)使得l′i+a=1,l′i+b=1。当di+3=0,说明c2k-1>c2k,提取编码组如下:
当di+3=1,说明c2k-1<c2k,提取编码组如下:
下一组编码提取从l′i+4开始;
(4)若e=3,可知 l′i+2为编码组两个元素大小标记位,由于di+2=1,可知c2k-1<c2k,提取编码组如下:
下一组编码提取从l′i+3开始;若L′剩余元素少于5个,则结束提取;
根据编码组变换关系恢复原始隐藏编码如下:
最后将提取的编码组转化成二进制隐藏信息,对S'中元素进行修改恢复载体信息,修改方法如下:
通过修改可恢复载体信息。