[发明专利]一种基于自适应预测编码的加密图像可逆信息隐藏方法在审
申请号: | 202211410817.7 | 申请日: | 2022-11-11 |
公开(公告)号: | CN115766963A | 公开(公告)日: | 2023-03-07 |
发明(设计)人: | 石慧;颜克勋;耿佳宁 | 申请(专利权)人: | 辽宁师范大学 |
主分类号: | H04N1/32 | 分类号: | H04N1/32;H04N1/44;G06T3/40;G06F21/60 |
代理公司: | 大连非凡专利事务所 21220 | 代理人: | 闪红霞 |
地址: | 116000 辽宁*** | 国省代码: | 辽宁;21 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 自适应 预测 编码 加密 图像 可逆 信息 隐藏 方法 | ||
1.一种基于自适应预测编码的加密图像可逆信息隐藏方法,依次按照如下步骤进行:
步骤1.将图像按照纹理度划分为平滑块和纹理块;
步骤2.对平滑块根据不同的预测误差进行像素差值压缩或像素位平面压缩;
步骤3.对纹理块进行优化自适应权重预测的块级压缩;
步骤4.分别对平滑快和纹理块进行信息嵌入,再将嵌入后的块还原形成载密块,最后将所有载密块组合形成载密图像;
步骤5.使用拥有的密钥进行图像恢复或/和信息提取。
2.根据权利要求1所述的自适应预测编码的加密图像可逆信息隐藏方法,其特征在于:
所述步骤1具体如下:
步骤1.1将图像img_origin分为4*4的块;
步骤1.2计算图像img_origin子块纹理度:
步骤1.2.1依据公式(1)计算子块能量值:
其中g代表的是灰度共生矩阵,d,θ是两个灰度之间的距离和方向,k表示子块的大小;
步骤1.2.2依据公式(2)计算子块的熵;
步骤1.2.3依据公式(3)计算子块对比度;
步骤1.2.4通过均方误差给所有子块的能量、熵和对比度三个特征值分配不同权重,并计算最终特征值J、H、D;
步骤1.2.5对三个最终特征参数分配权值w1,w2,w3,计算纹理复杂度f,其中w1,w2,w3由全局优化算法确定;
f=w1×J+w2×H+w3×D (4)
步骤1.3用矩阵map_block存储每个块的分类信息,纹理块为1,平滑块为0;
所述步骤2具体如下:
步骤2.1确定坐标为{(1,2),(2,4),(3,1),(4,3)}的像素为参考像素{p1,p2,p3,p4};
步骤2.2通过每个预处理像素点与参考像素的欧几里得距离计算权重{w1,w2,w3,w4};
步骤2.3根据公式(5),计算每个像素值对应的预测值pr;
步骤2.4将每一个参考像素与周围相邻的三个预处理像素组成一个单元;
步骤2.5在一个单元内,如公式(6-7)将预处理像素值p和对应位置的预测像素值pr相减,得到的差值的绝对值dif_a,设置标志位mark_s,如果三个dif_a都小于8,那么mark_s为1,否则为0;
dif_a(i,j)=|p(i,j)-pr(i,j)| (6)
步骤2.6如果mark_s为1,则进行像素差值压缩法,如果mark_s为0,则进行像素位平面压缩法;
所述像素差值压缩法按照如下步骤进行:
步骤2.6.1.1根据单元内三个预处理像素的差值绝对值dif_a按照公式(8)计算对应的正负属性dif_t;
步骤2.6.1.2通过哈夫曼编码,经过优化,根据所有mark_s为1的单元的差值数量统计,按频次从高到低的顺序,依次用01-00011来代替,形成哈夫曼压缩替换表;
步骤2.6.1.3创建一个24bit的空序列;
步骤2.6.1.4序列的第一位表示平滑块中的压缩类型,像素差值压缩法填充为1;
步骤2.6.1.5查找预处理像素差值dif_a与哈夫曼压缩替换表所对应的标签,将标签依次填充到序列第一位之后;
步骤2.6.1.6序列的剩余部分为压缩后的可嵌入空间;
步骤2.6.1.7预处理像素的正负属性dif_t当作辅助信息img_water_c进行存储;
所述像素位平面压缩法按照如下步骤进行:
步骤2.6.2.1将单元内四个像素ph用8位二进制表示,如公式(9):
步骤2.6.2.2将四个像素从最高有效位MSB到最低有效位LSB进行对比,寻找相同的位数,用sim_num表示不同位数的数量;
步骤2.6.2.3创建一个24bit的空序列;
步骤2.6.2.4序列的第一位表示平滑块中的压缩类型,像素位平面压缩法填充为0;
步骤2.6.2.5将sim_num用3位二进制数表示,填充到序列的第二位到第四位;
步骤2.6.2.6将三个预处理像素的不相同位,如公式(10),依次填充到序列的第四位之后;
dif_ph={ph,t|t=sim_num,…,8} (10)
步骤2.6.2.7序列的剩余部分为压缩后的可嵌入空间;
步骤2.6.2.8将溢出的数据当作辅助信息img_water_w进行存储;
步骤2.6.3在以坐标(1,2)为参考像素的单元中,24bit序列第一位存放的是块类型标记,平滑块标记为0,纹理块标记为1;
步骤2.7将24bit的序列三等分,转化为十进制后,分配给单元中的三个预处理像素;
步骤2.8最终将四个单元拼合后,组成可嵌入块;
所述步骤3具体如下:
步骤3.1画一条从上到下和一条从左到右的线;
步骤3.2通过两条线将块划分为n个区域,计算每个区域中的均方差,再求和得到msen;
步骤3.3将所有块的msen求和得到mse_all;
步骤3.4重复步骤3.1-3.3,通过划定不同的两条线,可以得到多个不同的mse_all;
步骤3.5从众多mse_all中选取最小值,并将对应的两条线line1,line2的坐标当作辅助信息img_water_l存储;
步骤3.6用line1,line2将纹理块划分为多个区域;
步骤3.7确定坐标为{(1,2),(2,4),(3,1),(4,3)}的像素为参考像素{p1,p2,p3,p4};
步骤3.8通过像素点与参考像素的欧几里得距离,计算权重{w1,w2,w3,w4};
步骤3.9在同一个区域中,如果有多个参考像素,就增加对应参考像素的权重值,如果没有参考像素,就对权重不做改变,最后更新权重为{w1′,w2′,w3′,w4′};
步骤3.10根据公式(11),计算每个像素值对应的预测值pr′;
步骤3.11将预处理像素值和预测像素值做差,存储到矩阵block中,参考像素值不变,存储到对应位置,如公式(12);
步骤3.12把矩阵block用8个位平面block_b表示,如公式(13)所示;
步骤3.13在最高有效位MSB的位平面中,从左至右,从上到下,填充索引信息;
步骤3.13.1位置(1,1)表示块类型标记,纹理块标记为1;
步骤3.13.2位置(1,2),(1,4),(2,2)表示嵌入层数,通过判断block_b的每一个为平面,除参考像素位置和索引信息位置外,是否都为0,用sim_layer表示都为0的位平面个数,即可嵌入层数;
步骤3.13.3创建一个块可嵌层数替换表;
步骤3.13.4根据块可嵌层数替换表,寻找sim_layer对应的标记,并填充至位置(1,2),(1,4),(2,2);
步骤3.13.5在可嵌入层数中,剩余空间为可嵌入空间;
步骤3.14通过公式(14),将像素值做差后的正负属性dif_t′当作辅助信息img_water_c存储起来;
步骤3.15当可嵌入层数为0时,将原位置(1,1),(1,2),(1,4),(2,2)的数当作辅助信息img_water_w存储起来;
步骤3.16将8个位平面转化为用十进制表示的可嵌入块;
步骤3.17图像块间置乱;
3.17.1令Z1=para_1,a=para_2,利用ICMIC映射如公式(15)生成随机序列Z,para_1和para_2作为密钥kb保存;
步骤3.17.2取随机序列前128*128位,对其排序,得到位置索引序列Zf;
步骤3.17.3将所有可嵌入块转换为一维序列Zb,按照位置索引序列进行位置置乱,形成置乱后的序列Za,如公式(16)所示;
Za(Zf(i))=Zb(i) i=1,2,…,128×128 (16)
步骤3.18将所有可嵌入块一维序列转换为可嵌入图像;
所述步骤4具体如下:
步骤4.1用18位二进制数img_water_c_len表示辅助信息img_water_c的长度,用15位二进制数img_water_w_len表示辅助信息img_water_w的长度;
步骤4.2将可嵌入图像划分为4*4的块;
步骤4.3识别块中左上角的像素最高有效位,如果为1,此块为纹理块,反之为平滑块;
步骤4.4平滑块嵌入
步骤4.4.1确定坐标为{(1,2),(2,4),(3,1),(4,3)}的参考像素{p1,p2,p3,p4};
步骤4.4.2将每一个参考像素与周围相邻的三个预处理像素组成一个单元;
步骤4.4.3将单元中的三个预处理像素转化为二进制拼接起来,形成24bit的序列;
步骤4.4.4识别序列的第一位数,如果是1,表明此单元是差值压缩;
步骤4.4.4.1通过哈夫曼压缩替换表,识别序列从第二位开始的三个对应标记,计算三位标记的总位数num_mark;
步骤4.4.4.2通过公式(17)计算,序列的剩余空间长度re_d_len为待嵌入空间;
re_d_len=24-1-num_mark (17)
步骤4.4.5序列的第一位数,如果是0,表明此单元是位平面压缩;
步骤4.4.5.1通过序列的第二至四位,转化为十进制mark_p;
步骤4.4.5.2通过公式(18)计算,序列的剩余空间长度re_p_len,如果re_p_len小于0,那么表示不可嵌入,反之为待嵌入空间;
re_p_len=24-1-3-(8-mark_p)*3 (18)
步骤4.5纹理块嵌入
步骤4.5.1确定坐标为{(1,2),(2,4),(3,1),(4,3)}的参考像素{p1,p2,p3,p4};
步骤4.5.2纹理块block用8个位平面block_b表示,如公式(13)所示;
步骤4.5.3判断最高有效位平面的位置(1,2),(1,4),(2,2),将他们组合起来形成十进制数mark_sim;
步骤4.5.4通过mark_sim判断可嵌入的层数,在可嵌入层数中,除去索引信息和参考像素以外的空间,作为待嵌入空间;
步骤4.6将辅助信息的长度嵌入到待嵌入空间中,之后再将辅助信息嵌入;
步骤4.7辅助信息嵌入完成后,将图像块还原,形成可嵌入秘密信息块;
步骤4.8图像隐藏者按照步骤4.1-步骤4.5,得到待嵌入空间;
步骤4.9获取18位和15位的辅助信息长度;
步骤4.10将秘密信息使用流密码加密;
步骤4.10.1令Z0=para_3,a=para_4,利用ICMIC映射如公式(15)生成随机序列,para_3和para_4作为密钥ke保存;
步骤4.10.2生成的随机序列为小数,通过公式(19)将随机序列转换为二进制表示;
步骤4.10.3再将二进制随机序列与秘密信息进行按位异或,最后形成加密后的秘密信息;
步骤4.11计算秘密信息的长度,将其添加到秘密信息的头部;
步骤4.12嵌入秘密信息,计算此时待嵌入空间索引位置是否超过了辅助信息长度,如果超过,则进行嵌入,否则跳过;
步骤4.13将嵌入后的块还原,形成载密块;
步骤4.14将所有载密块组合,形成载密图像;
所述步骤5具体如下:
步骤5.1图像接收者拥有密钥ke
步骤5.1.1平滑块提取信息
步骤5.1.1.1确定坐标为{(1,2),(2,4),(3,1),(4,3)}的参考像素{p1,p2,p3,p4};
步骤5.1.1.2将每一个参考像素与周围相邻的三个预处理像素组成一个单元;
步骤5.1.1.3将单元中的三个预处理像素转化为二进制拼接起来,形成24bit的序列;
步骤5.1.1.4识别序列的第一位数,如果是1,表明此单元是差值压缩;
步骤5.1.1.4.1通过哈夫曼压缩替换表,识别序列从第二位开始的三个对应标记,计算三位标记的总位数num_mark;
步骤5.1.1.4.2通过公式(17)计算,提取长度为re_d_len的序列剩余空间信息;
步骤5.1.1.5序列的第一位数,如果是0,表明此单元是位平面压缩;
步骤5.1.1.5.1通过序列的第二至四位,转化为十进制mark_p;
步骤5.1.1.5.2通过公式(18)计算,取长度为re_p_len的序列剩余空间信息,如果re_p_len小于0,则跳过,反之提取嵌入信息;
步骤5.1.2纹理块提取信息
步骤5.1.2.1确定坐标为{(1,2),(2,4),(3,1),(4,3)}的参考像素{p1,p2,p3,p4};
步骤5.1.2.2纹理块block用8个位平面block_b表示,如公式(13)所示;
步骤5.1.2.3判断最高有效位平面的位置(1,2),(1,4),(2,2),将他们组合起来形成十进制数mark_sim;
步骤5.1.2.4通过mark_sim判断嵌入信息的层数,在嵌入信息层数中,除去索引信息和参考像素以外的空间,都是嵌入的信息,将其提取出来;
步骤5.1.3辅助信息提取
步骤5.1.3.1提取前12位的交叉线坐标信息;
步骤5.1.3.2提取13-30位的正负属性长度img_water_c_len,并从31位开始提取正负属性辅助信息;
步骤5.1.3.3提取(32+img_water_c_len)-(46+img_water_c_len)位的溢出信息长度img_water_w_len,紧接着提取溢出信息;
步骤5.1.4提取信息中除去辅助信息,取秘密信息长度,再提取秘密信息;
步骤5.1.5将秘密信息使用流密码解密;
步骤5.1.5.1将密钥ke带入到公式(15)中,利用ICMIC映射生成随机序列。
步骤5.1.5.2通过公式(19)将随机序列转换为二进制表示;
步骤5.1.5.3再将二进制随机序列与秘密信息进行按位异或,最后形成解密后的秘密信息;
步骤5.2图像接收者拥有密钥kb
步骤5.2.1根据步骤5.1.3,提取辅助信息;
步骤5.2.2平滑块还原
步骤5.2.2.1确定坐标为{(1,2),(2,4),(3,1),(4,3)}的参考像素{p1,p2,p3,p4};
步骤5.2.2.2将每一个参考像素与周围相邻的三个预处理像素组成一个单元;
步骤5.2.2.3将单元中的三个预处理像素转化为二进制拼接起来,形成24bit的序列;
步骤5.2.2.4识别序列的第一位数,如果是1,表明此单元是差值压缩;
步骤5.2.2.4.1通过哈夫曼压缩替换表,识别序列从第二位开始的三个对应标记{mark_t1,mark_t2,mark_t3},并提取三个标记对应的差值difn;
步骤5.2.2.4.2通过像素点与参考像素的欧几里得距离,计算权重{w1,w2,w3,w4};
步骤5.2.2.4.3根据公式(5),计算每个像素值对应的预测值pr;
步骤5.2.2.4.4从img_water_c中提取正负属性e,如公式(20)所示;
步骤5.2.2.4.5在一个单元内,将e与差值difn相乘,再与预测像素值pr相加,最后得到原始像素值p′n,如公式(21)所示。
p′n=e×difn+pr n=1,2,3 (21)
步骤5.2.2.5识别序列的第一位数,如果是0,表明此单元是位平面压缩;
步骤5.2.2.5.1通过序列的第二至四位,转化为十进制mark_p;
步骤5.2.2.5.2如果mark_p等于0,则从第五位开始,每次取长度为8二进制数,分别赋值到{num_p1,num_p2},剩余序列赋值到num_p3;
步骤5.2.2.5.3如果是以坐标(1,2)为参考像素的单元,便从辅助信息img_water_w中提取5位,反之从辅助信息img_water_w中提取4位补充到num_p3后;
步骤5.2.2.5.4如果mark_p等于1,则从第五位开始,每次取长度为7二进制数,分别赋值到{num_p1,num_p2},剩余序列赋值到num_p3;
步骤5.2.2.5.5如果是以坐标(1,2)为参考像素的单元,便从辅助信息img_water_w中提取1位,反之从辅助信息img_water_w中提取2位补充到num_p3后;
步骤5.2.2.5.6将参考像素第一位分别赋值到num_pn的头部;
步骤5.2.2.5.7如果mark_p大于1,则从第五位开始,每次取长度为(8-mark_p)二进制数,分别赋值到{num_p1,num_p2},剩余序列赋值到num_p3;
步骤5.2.2.5.8将参考像素前mark_p位分别赋值到num_pn的头部;
步骤5.2.2.5.9将num_pn转换成十进制,形成原始像素值p′n;
步骤5.2.3纹理块还原
步骤5.2.3.1确定坐标为{(1,2),(2,4),(3,1),(4,3)}的参考像素{p1,p2,p3,p4};
步骤5.2.3.2将辅助信息中两条线坐标提取出,形成line1,line2;
步骤5.2.3.3将纹理块用line1,line2划分为多个区域;
步骤5.2.3.4通过像素点与参考像素的欧几里得距离,计算权重{w1,w2,w3,w4};
步骤5.2.3.5在同一个区域中,如果有多个参考像素,就增加对应参考像素的权重值。如果没有参考像素,就对权重不做改变,最后更新权重为{w1′,w2′,w3′,w4′};
步骤5.2.3.6根据通过公式(11),计算每个像素值对应的预测值pr′;
步骤5.2.3.7纹理块block用8个位平面block_b表示;
步骤5.2.3.8取第一个位平面位置为(1,2),(1,4),(2,2)的数,将他们组合起来与表2进行对比,得出相应的嵌入层数mark_sim;
步骤5.2.3.9将前mark_sim个位平面中,除去参考像素以外的空间,都填充0;
步骤5.2.3.10如果mark_sim为0,提取辅助信息img_water_w前4位,替换掉block_b中第一位平面位置(1,1),(1,2),(1,4),(2,2)的值;
步骤5.2.3.11再将8位平面转换成十进制矩阵block′;
步骤5.2.3.12从辅助信息img_water_c中提取正负属性e,如公式(20);
步骤5.2.3.13通过公式(22),得到原始块block_s;
步骤5.2.4将所有块转换成一维序列;
步骤5.2.5将密钥kb带入到公式(18)中,利用ICMIC映射生成随机序列Z;
步骤5.2.6取随机序列前128*128位,对其排序,得到位置索引序列Zf;
步骤5.2.7将所有还原块转换为一维序列Za,按照位置索引序列进行逆置乱,形成还原后的序列Zb,如公式(23)所示;
Zb(Zf(i))=Za(i) i=1,2,…,128×128 (23)
步骤5.2.8将所有还原块一维序列转换为还原图像;
步骤5.3图像接收者拥有密钥kb和ke
步骤5.3.1按照步骤5.1和步骤5.2,提取秘密信息及还原图像。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于辽宁师范大学,未经辽宁师范大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202211410817.7/1.html,转载请声明来源钻瓜专利网。