(绝对可运行)加密图像中的可逆数据隐藏算法matlab代码(基于张新鹏教授的算法)
基于多目标优化的加密图像可逆信息隐藏

基于多目标优化的加密图像可逆信息隐藏
张翔宇;杨阳;冯国徽;秦川
【期刊名称】《计算机应用》
【年(卷),期】2022(42)6
【摘要】针对加密前预留空间(RRBE)嵌入算法需要进行一系列的预处理工作,以及加密后腾出空间(VRAE)嵌入算法嵌入空间较小的缺点,为了在提高嵌入率的同时缩
减算法流程和减少工作量,提出一种基于多目标优化的加密图像可逆信息隐藏算法。
该算法将RRBE与VRAE中两个具有代表性的算法在同一载体中结合使用,并以信
息嵌入量、直接解密图像失真、提取错误率、计算复杂度等性能评价指标作为优化子目标,再利用功效系数法建立模型求解出两种算法应用比例的相对最优解。
实验
结果表明,所提算法不仅能够降低单独使用RRBE算法的计算复杂度,还能使图像处
理用户够根据实际应用场景中不同的需求灵活地分配优化目标,同时也能获得较好
的图像质量和令人满意的信息嵌入量。
【总页数】8页(P1716-1723)
【作者】张翔宇;杨阳;冯国徽;秦川
【作者单位】上海理工大学光电信息与计算机工程学院;东南数字经济发展研究院【正文语种】中文
【中图分类】TP391
【相关文献】
1.基于改进PVO自适应嵌入的加密域图像可逆信息隐藏方法
2.基于加密图像的可逆信息隐藏算法综述
3.基于位平面循环异或的加密图像可逆信息隐藏
4.基于弹载遥测图像加密域的可逆信息隐藏算法
5.基于Paillier加密的大容量双图像可逆信息隐藏
因版权原因,仅展示原文概要,查看原文内容请购买。
按需发送的加密图像中的可逆信息隐藏

第 33 卷 第 1 期
2015年1月
应
用 科 学
学 报
Vol. 33 No. 1
Jan. 2015
JOURNAL OF APPLIED SCIENCES — Electronics and Information Engineering
DOI: 10.3969/j.issn.0255-8297.2015.01.006
按需发送的加密图像中的可逆信息隐藏
韩喜玉, 钱振兴, 张新鹏, 姜 飞
S
ci =
t=1
sgn(t)
(8)
1, |Dt − Di | = 0 3 M N. 1 t 4 式中, sgn(t) = 0, 其他 ci 2 1 替换 ci 个i, 得到 V . 令 F = {D1 , D2 , · · · , DS }, 其中 , · · ·, Di , Di 对 D 进行修改, 将 Di D1 , D2 , · · · , DS 与 1, 2, · · · , S 之间存在一一对应关系. 最后重组的信息为 U =(IA ,V ). IA 的 1 长度是公开的, 为 m × n(m = 2 Mj = 1 如果没有密钥 (Kenc , F ), 原始图像的 2 N ). 可以看出, 内容就不会被泄露.
Reversible Data Hiding in Encrypted Images Transmitted on Demand
HAN Xi-yu, QIAN Zhen-xing, ZHANG Xin-peng, JIANG Fei
可逆信息隐藏hs算法matlab

可逆信息隐藏是指在保证原始载体数据不受损的情况下,将需要隐藏的信息嵌入到载体数据中,并且可以在需要时将隐藏的信息提取出来。
可逆信息隐藏的应用场景非常广泛,可以用于数字水印、版权保护、隐私保护等领域。
其中,HS算法是一种经典的可逆信息隐藏算法,而MATLAB是一种功能强大的科学计算软件,结合两者可以实现对图像信息的可逆隐藏和提取。
1. 可逆信息隐藏原理可逆信息隐藏是利用载体图像的一些隐含特性来隐藏需要传输的信息,在不损害载体图像质量的前提下,能够完整、准确地提取出隐藏的信息。
可逆信息隐藏主要包括隐写与加密两个主要过程。
隐写是指将需要隐藏的信息写入到载体图像中,而加密则是对隐藏的信息进行加密处理,增强信息的安全性。
2. HS算法原理HS算法是一种经典的可逆信息隐藏算法,其核心思想是利用图像的直方图来隐藏信息。
具体来说,HS算法首先对载体图像进行预处理,然后通过对直方图的调整来实现信息的隐藏。
在提取信息时,再根据调整后的直方图来还原隐藏的信息。
HS算法的优点是对图像没有任何损害,并且隐藏的信息可以完整提取出来。
3. MATLAB在可逆信息隐藏中的应用MATLAB作为一个功能强大的科学计算软件,提供了丰富的图像处理和加密算法库,非常适合用于可逆信息隐藏的实现。
利用MATLAB,可以方便地对图像进行处理、隐藏信息,并且提供了丰富的工具函数,能够直观地展示信息隐藏的效果。
4. 可逆信息隐藏HS算法在MATLAB中的实现通过MATLAB可以很方便地实现可逆信息隐藏HS算法。
需要对载体图像进行预处理,以便后续信息的隐藏。
利用HS算法将需要隐藏的信息写入到载体图像中,并对隐藏的信息进行加密处理。
在需要提取信息时,通过对载体图像的处理和对修改后的载体图像进行比对,可以成功地提取出隐藏的信息。
5. 代码示例以下是一个简单的MATLAB代码示例,演示了如何使用HS算法实现可逆信息隐藏:```matlab读取载体图像carrier_image = imread('carrier.png');进行预处理processed_image = preprocess(carrier_image);隐藏信息hidden_image = HS_algorithm(processed_image,'hidden_message');提取隐藏的信息extracted_message = extract_hidden_message(hidden_image);显示提取的信息disp(extracted_message);```通过以上代码示例,可以清晰地看到MATLAB如何便捷地实现了可逆信息隐藏HS算法的过程,并成功地提取出隐藏的信息。
自适应高容量医学图像可逆数据隐藏算法

自适应高容量医学图像可逆数据隐藏算法黄斌;史亮;邓小鸿;陈志刚【摘要】A new reversible data hiding algorithm for medical images was proposed. The hidden information was embedded into Region Of Interest ( ROI) and non-interest respectively. In ROI, an adaptive integer transform scheme was employed to enhance the embedding capacity and control distortions. And in Region of Non-Interest (RONI), the classical Least Significant Bit ( LSB) method was used to keep the marked image' s quality. The experimental results show that, compared with previous works, the performance of the proposed method has been significantly improved in terms of capacity and image quality. The proposed method' s embedding capacity is between L2 bpp and 1. 7 bpp, while the Peak Signal-to-Noise Ratio (PSNR) can maintain the 43 dB or so. Moreover, the proposed method with high run efficiency can be applied into the practical hospital information system.%提出了一种新的医学图像无损数据隐藏算法,根据医学图像特点,将隐秘信息分别嵌入在感兴趣区域和非感兴趣区域中.在非感兴趣区域中,采用自适应整数变换方法增大嵌入容量并控制失真;在感兴趣区域,采用最低有效位替换方法控制水印图像质量.实验结果表明,算法的嵌入容量在1.2 bpp到1.7 bpp之间,而峰值信噪比保持在43 dB左右.与现有相关算法相比,嵌入容量具有明显优势并保持较高的图像质量.另外,本方法计算复杂度低,能方便应用于实际的医学信息系统中.【期刊名称】《计算机应用》【年(卷),期】2012(032)010【总页数】4页(P2779-2782)【关键词】可逆数据隐藏;医学图像;整数变换;最低有效位;感兴趣区域【作者】黄斌;史亮;邓小鸿;陈志刚【作者单位】莆田学院电子信息工程学系,福建莆田351100;厦门大学软件学院,福建厦门361005;中南大学信息科学与工程学院,长沙410083;中南大学信息科学与工程学院,长沙410083【正文语种】中文【中图分类】TP391.410 引言无损数据隐藏当隐秘数据被提取后,原始载体能被无损恢复[1-5]。
(绝对可运行)加密图像中的可逆数据隐藏算法matlab代码(基于张新鹏教授的算法)

%This is the program of Reversible Data Hiding in Encrypted Domain clc;clear;%===============Read image===========================original_p=rgb2gray(imread('LENA.tif'));[m,n]=size(original_p);%==============Image encryption====================== random_bits=rand(m,n*8)<=0.5;%伪随机序列for i=1:mfor j=1:ns=0;for k=0:7b(k+1)=mod(fix(double(origi nal_p(i,j))/(2Ak)),2);eb(k+1)=xor(b(k+1),random_bits(i,8*j+k-7)); s=s+eb(k+1)*(2A k);endencrypted_image(i,j)=s;endendfigure(1);subplot(1,2,1);imshow(original_p);hold on;title('Original image','fontsize',16);subplot(1,2,2);encrypted_image=uint8(encrypted_image);imshow(encrypted_image);title('Encrypted image','fontsize',16);%================Data embedding======================size=8; %分块大小N=6;%置乱周期number1=3;number2=N-number1;lim_row=fix(m/size); %图像的分块数lim_col=fix(n/size); %图像的分块数bitts=3;watermessage=rand(lim_row,lim_col)<0.5; %水印信息pseudo_randomly for i=1:lim_rowfor j=1:lim_col block_image{i,j}=encrypted_image((size*i-size+1):size*i,(size*j-size+1):size*j); % 分块for k=1:sizefor t=1:sizeindex=arnold(k,t,size,number1);%arnold is permutateion function;arno_block_image{i,j}(index(1)+1,index(2)+1)=block_image{i,j}(k,t); end end%数据嵌入sum0=zeros(size/2,size); if watermessage(i,j)==0 for k=0:7bbb{k+1}=mod(fix(double(arno_block_image{i,j}(1:size/ 2,:))/(2你)),2);if k<bitts bbb{k+1}=~bbb{k+1};endsum0=sum0+bbb{k+1}*(2A k);enddata_image{i,j}=[sum0;double(arno_block_image{i,j}(size/ 2+1:size,:))];endsum1=zeros(size/2,size);if watermessage(i,j)==1for k=0:7 bbb{k+1}=mod(fix(double(arno_block_image{i,j}(size/ 2+1:size,:))/(2Ak)),2);if k<bittsbbb{k+1}=~bbb{k+1};endsum1=sum1+bbb{k+1}*(2Ak);enddata_image{i,j}=[double(arno_block_image{i,j}(1:size/ 2,:));sum1];endfor k=1:sizefor t=1:size index=arnold(k,t,size,number2);%arnold is permutateion function;re_data_image{i,j}(index(1)+1,index(2)+1)=data_image{i,j}(k,t);endend%合成嵌入数据后的图像data_en_image((size*i-size+1):size*i,(size*j-size+1):size*j)=re_data_image{i,j};endend%=====Encrypt image which contains data====for i=1:lim_row*sizefor j=1:lim_col*sizes=0;for k=0:7b(k+1)=mod(fix(data_en_image(i,j)/(2Ak)),2);eb(k+1)=xor(b(k+1),random_bits(i,8*j+k-7));s=s+eb(k+1)*(2A k);endde_data_image(i,j)=s;endendfigure(2);hold on;subplot(1,2,1);imshow(original_p);title('Original image','fontsize',16);subplot(1,2,2);imshow(uint8(de_data_image));title('Decrypted image contains data','fontsize',16);%直接解密图像的峰值信噪比sumsss=0;for i=1:lim_row*sizefor j=1:lim_col*size sumsss=(de_data_image(i,j)-double(original_p(i,j)))A2+sumsss;endendmse=sumsss/((lim_row*size)*(lim_row*size));psnr=10*log10(255A2 /mse);%======Extract data and recover image=======for i=1:lim_rowfor j=1:lim_col block_de_image{i,j}=de_data_image((size*i-size+1):size*i,(size*j-size+1):size*j);%分块for k=1:sizefor t=1:size index=arnold(k,t,size,number1);%arnold is permutateion function;ar_block_de_image{i,j}(index(1)+1,index(2)+1)=block_de_image{i,j}(k,t);endendsum0=zeros(size/2,size);sum1=zeros(size/2,size);for k=0:7bbbO{k+1}=mod(fix(ar_block_de_image{i,j}(1:size/ 2,:)/(2你)),2);bbb1{k+1}=mod(fix(ar_block_de_image{i,j}(size/ 2+1:size,:)/(2A k)),2);if k<bittsbbb0{k+1}=~bbb0{k+1};bbb1{k+1}=~bbb1{k+1};endsum0=sum0+bbb0{k+1}*(2Ak);sum1=sum1+bbb1{k+1}*(2Ak);endar_H0_image{i,j}=[sum0;ar_block_de_image{i,j}(size/ 2+1:size,:)];ar_H1_image{i,j}=[ar_block_de_image{i,j}(1:size/ 2,:);sum1];for k=1:sizefor t=1:size index=arnold(k,t,size,number2);%arnold is permutateion function;H0_image{i,j}(index(1)+1,index(2)+1)=ar_H0_image{i,j}(k,t);H1_image{i,j}(index(1)+1,index(2)+1)=ar_H1_image{i,j}(k,t);endendf0=0;f1=0;for u=2:size-1for v=2:size-1f0=f0+abs(H0_image{i,j}(u,v)-(H0_image{i,j}(u-1,v)+H0_image{i,j}(u,v-1)+H0_image{i,j}(u+1,v)+H0_image{i,j}(u,v+1))/4);f1=f1+abs(H1_image{i,j}(u,v)-(H1_image{i,j}(u-1,v)+H1_image{i,j}(u,v-1)+H1_image{i,j}(u+1,v)+H1_image{i,j}(u,v+1))/4);endendif (f0-f1)<0extract_bits(i,j)=0; recover_image(size*i-size+1:size*i,size*j-size+1:size*j)=H0_image{i,j};elseextract_bits(i,j)=1; recover_image(size*i-size+1:size*i,size*j-size+1:size*j)=H1_image{i,j};endendendfigure(3);subplot(1,2,1);imshow(original_p);hold on;title('Original image','fontsize',16); subplot(1,2,2);recover_image=uint8(recover_image); imshow(recover_image);hold on; title('Recovered image','fontsize',16);%==============analysis============ diff=original_p(1:lim_row*size,1:lim_col*size)-recover_image;counts=0;for i=1:lim_rowfor j=1:lim_col block_diff{i,j}=diff((size*i-size+1):size*i,(size*j-size+1):size*j); %分块if extract_bits(i,j)~=watermessage(i,j) block_diff{i,j}=ones(size,size)*255;counts=counts+1;else block_diff{i,j}=original_p((size*i-size+1):size*i,(size*j-size+1):size*j);end diff_image((size*i-size+1):size*i,(size*j-size+1):size*j)=block_diff{i,j};endend figure(4); imshow(diff_image); hold on;%title('Blocks of incorrect','fontsize',16); %错误率与分块大小的关系rate=counts/((lim_row)*(lim_col))。
基于多项式秘密共享的图像密文域可逆信息隐藏

基于多项式秘密共享的图像密文域可逆信息隐藏张敏情;王泽曦;柯彦;孔咏骏;狄富强【期刊名称】《电子与信息学报》【年(卷),期】2022(44)12【摘要】针对密文域可逆信息隐藏在多用户场景下算法嵌入率低、载体图像容灾性能较弱等问题,该文提出一种基于多项式秘密共享的图像密文域可逆信息隐藏方案。
通过将图像分割成多幅影子图像并存储在不同的用户端,可以增强图像的容灾性,为了实现额外信息在图像重构前后提取的可分离性,该方案包括两种嵌入算法:算法1在图像分割的过程中,将额外信息嵌入多项式的冗余系数中得到含有额外信息的影子图像,该算法支持在图像重构之后提取额外信息;算法2针对图像分割后的任一影子图像,利用秘密共享的加法同态特性实施嵌入,该算法支持直接从影子图像中提取额外信息。
实验在不同门限方案和影子图像压缩率的条件下进行测试,当压缩率为50%时,(3,4)门限方案的嵌入率达4.18 bpp(bit per pixel),(3,5)门限方案的嵌入率达3.78 bpp。
结果表明,两种嵌入算法分别支持从影子图像与重构图像中提取额外信息,实现了方案的可分离性;与现有方案相比,所提算法嵌入率较高、计算复杂度较低,具有较强的实用性。
【总页数】11页(P4337-4347)【作者】张敏情;王泽曦;柯彦;孔咏骏;狄富强【作者单位】武警工程大学密码工程学院;中国人民武装警察部队密码与信息安全保密重点实验室【正文语种】中文【中图分类】TN918.4;TP309.7【相关文献】1.基于二叉树标记与码分复用的密文域图像可逆信息隐藏2.基于秘密共享的可分离密文域可逆信息隐藏算法3.基于直方图修改的图像密文域可逆信息隐藏4.基于细粒度嵌入空间预留的密文域图像可逆信息隐藏方法5.基于图像秘密共享的密文域可逆信息隐藏算法因版权原因,仅展示原文概要,查看原文内容请购买。
基于图像插值技术的可逆数据隐藏算法

基于图像插值技术的可逆数据隐藏算法童新安;李艳晓;袁可红【摘要】针对现有基于插值技术可逆数据隐藏算法具有较高的隐藏容量,但隐秘图像质量不是很高问题的问题,提出一种新的大容量图像可逆数据隐藏算法.首先对输入图像进行插值处理生成载体图像,然后对载体图像进行重叠分块,并计算分块中每一个非基准像素能隐藏的数据量,最后采用自适应的方法隐藏秘密数据.在Kodak图像集上的实验结果表明,本文算法能完整地提取隐藏的秘密数据且不会出现像素溢出现象;与相似的算法相比,该算法的秘密数据隐藏容量平均提升了约98%,隐秘图像质量平均提升了约6%.【期刊名称】《科学技术与工程》【年(卷),期】2019(019)008【总页数】7页(P157-163)【关键词】数据隐藏;可逆数据隐藏;图像插值技术;大容量【作者】童新安;李艳晓;袁可红【作者单位】洛阳理工学院数学与物理教学部,洛阳471023;洛阳理工学院数学与物理教学部,洛阳471023;洛阳理工学院数学与物理教学部,洛阳471023【正文语种】中文【中图分类】TP309信息隐藏技术按提取隐藏的信号后原始载体信号是否能完整地还原,可将其分为不可逆信息隐藏和可逆信息隐藏两大类。
对于传统的版权保护技术[1,2],虽隐藏的水印信号具有较强的鲁棒性,但载体信号在提取隐藏的水印信号后基本不能还原,这对失真较敏感的领域是不可行的。
可逆信息隐藏技术作为信息隐藏技术的一个分支,它在提取隐藏的秘密数据后能完整地还原原始载体信号,被广泛应用在对失真较敏感的领域。
目前,可逆数据隐藏算法按原理来分可将其分为基于差值扩展的可逆数据隐藏算法[3,4]、基于直方图平移[5—8]的可逆数据隐藏算法和基于插值的可逆数据隐藏算法[9—15]三类。
2003年,Tian[3]提出基于差值扩展的可逆数据隐藏算法。
该算法主要思想是利用载体图像中像素对的差值来隐藏数据,隐藏容量较高,但为实现盲提取隐藏的数据,该算法需对隐藏过程中产生的辅助数据进行压缩,再将其隐藏到载体信号中,使该算法真实隐藏容量降低了。
基于无损压缩的加密图像可逆信息隐藏

基于无损压缩的加密图像可逆信息隐藏郑淑丽;曹敏;胡东辉;李丹丹【摘要】Aiming at the defects of existing algorithms in the embedding capacity and the operation of receiver ,an algorithm of reversible data hiding in encrypted images based on lossless compression isproposed .Firstly ,the substitution encryption technology is used to encrypt the original image .Sec-ondly ,the data hider randomly divides the encrypted image into several equal and non-overlapping blocks ,then the ones are compressed with a lossless manner to create a sparse space to embed secret data .Finally ,the receiver can obtain secret data and original image by using the data-hiding key and decryption key .The experimental results show that compared with the previous methods ,the pro-posed method achieves excellent efficiency in peak signal-to-noise ratio(PSNR) and embedding rate .%针对现有方法存在的隐藏容量低、操作不灵活的缺陷 ,文章提出了一种基于无损压缩的加密图像可逆信息隐藏算法 . 图像拥有者对原始图像进行替换加密 ;秘密信息隐藏者将加密图像随机划分为若干个大小相等且互不重叠的块 ,并且在每个加密块中采用无损压缩技术获得空余空间来隐藏秘密信息 ;接收者采用提取密钥进行秘密信息提取后 ,再结合解密密钥能够正确恢复出原始图像 . 实验仿真结果表明 ,与现有方法相比 ,所提出的算法在峰值信噪比和信息隐藏率上都具有很好的效能 .【期刊名称】《合肥工业大学学报(自然科学版)》【年(卷),期】2016(039)001【总页数】6页(P50-55)【关键词】加密图像;可逆信息隐藏;替换加密;无损压缩;峰值信噪比;隐藏率【作者】郑淑丽;曹敏;胡东辉;李丹丹【作者单位】合肥工业大学计算机与信息学院 ,安徽合肥 230009;合肥工业大学计算机与信息学院 ,安徽合肥 230009;合肥工业大学计算机与信息学院 ,安徽合肥 230009;合肥工业大学计算机与信息学院 ,安徽合肥 230009【正文语种】中文【中图分类】TP309.7近年来,随着多媒体技术的快速发展以及在公共网络中安全传输的需求不断增加,加密技术[1]和可逆信息隐藏技术[2-4]成为保证信息安全的2个重要技术,学者们大都采用其中一种技术来保证信息传输的安全,然而在军事、商业、医疗[5]和司法证据等领域却需要将这2种技术相结合才能解决实际问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%This is the program of Reversible Data Hiding in Encrypted Domain clc;clear;%===============Read image=========================== original_p=rgb2gray(imread('LENA.tif'));[m,n]=size(original_p);%==============Image encryption====================== random_bits=rand(m,n*8)<=0.5; %伪随机序列for i=1:mfor j=1:ns=0;for k=0:7b(k+1)=mod(fix(double(original_p(i,j))/(2^k)),2);eb(k+1)=xor(b(k+1),random_bits(i,8*j+k-7));s=s+eb(k+1)*(2^k);endencrypted_image(i,j)=s;endendfigure(1);subplot(1,2,1);imshow(original_p);hold on;title('Original image','fontsize',16);subplot(1,2,2);encrypted_image=uint8(encrypted_image);imshow(encrypted_image);title('Encrypted image','fontsize',16);%================Data embedding====================== size=8; %分块大小N=6;%置乱周期number1=3;number2=N-number1;lim_row=fix(m/size); %图像的分块数lim_col=fix(n/size); %图像的分块数bitts=3;watermessage=rand(lim_row,lim_col)<0.5; %水印信息%======pseudo_randomly=======for i=1:lim_rowfor j=1:lim_colblock_image{i,j}=encrypted_image((size*i-size+1):size*i,(size*j-size+1):size*j); %分块for k=1:sizefor t=1:sizeindex=arnold(k,t,size,number1);%arnold is permutateion function;arno_block_image{i,j}(index(1)+1,index(2)+1)=block_image{i,j}(k,t);endend%数据嵌入sum0=zeros(size/2,size);if watermessage(i,j)==0for k=0:7bbb{k+1}=mod(fix(double(arno_block_image{i,j}(1:size/2,:))/(2^k)),2);if k<bittsbbb{k+1}=~bbb{k+1};endsum0=sum0+bbb{k+1}*(2^k);enddata_image{i,j}=[sum0;double(arno_block_image{i,j}(size/2+1:size,:))];endsum1=zeros(size/2,size);if watermessage(i,j)==1for k=0:7bbb{k+1}=mod(fix(double(arno_block_image{i,j}(size/2+1:size,:))/(2^k)),2);if k<bittsbbb{k+1}=~bbb{k+1};endsum1=sum1+bbb{k+1}*(2^k);enddata_image{i,j}=[double(arno_block_image{i,j}(1:size/2,:));sum1];endfor k=1:sizefor t=1:sizeindex=arnold(k,t,size,number2);%arnold is permutateion function;re_data_image{i,j}(index(1)+1,index(2)+1)=data_image{i,j}(k,t);endend%合成嵌入数据后的图像data_en_image((size*i-size+1):size*i,(size*j-size+1):size*j)=re_data_image{i,j};endend%=====Encrypt image which contains data====for i=1:lim_row*sizefor j=1:lim_col*sizes=0;for k=0:7b(k+1)=mod(fix(data_en_image(i,j)/(2^k)),2);eb(k+1)=xor(b(k+1),random_bits(i,8*j+k-7));s=s+eb(k+1)*(2^k);endde_data_image(i,j)=s;endendfigure(2);hold on;subplot(1,2,1);imshow(original_p);title('Original image','fontsize',16);subplot(1,2,2);imshow(uint8(de_data_image));title('Decrypted image contains data','fontsize',16);%直接解密图像的峰值信噪比sumsss=0;for i=1:lim_row*sizefor j=1:lim_col*sizesumsss=(de_data_image(i,j)-double(original_p(i,j)))^2+sumsss;endendmse=sumsss/((lim_row*size)*(lim_row*size));psnr=10*log10(255^2/mse);%======Extract data and recover image=======for i=1:lim_rowfor j=1:lim_colblock_de_image{i,j}=de_data_image((size*i-size+1):size*i,(size*j-size+1):size*j); %分块for k=1:sizefor t=1:sizeindex=arnold(k,t,size,number1);%arnold is permutateion function;ar_block_de_image{i,j}(index(1)+1,index(2)+1)=block_de_image{i,j}(k,t);endendsum0=zeros(size/2,size);sum1=zeros(size/2,size);for k=0:7bbb0{k+1}=mod(fix(ar_block_de_image{i,j}(1:size/2,:)/(2^k)),2);bbb1{k+1}=mod(fix(ar_block_de_image{i,j}(size/2+1:size,:)/(2^k)),2);if k<bittsbbb0{k+1}=~bbb0{k+1};bbb1{k+1}=~bbb1{k+1};endsum0=sum0+bbb0{k+1}*(2^k);sum1=sum1+bbb1{k+1}*(2^k);endar_H0_image{i,j}=[sum0;ar_block_de_image{i,j}(size/2+1:size,:)];ar_H1_image{i,j}=[ar_block_de_image{i,j}(1:size/2,:);sum1];for k=1:sizefor t=1:sizeindex=arnold(k,t,size,number2);%arnold is permutateion function;H0_image{i,j}(index(1)+1,index(2)+1)=ar_H0_image{i,j}(k,t);H1_image{i,j}(index(1)+1,index(2)+1)=ar_H1_image{i,j}(k,t);endendf0=0;f1=0;for u=2:size-1for v=2:size-1f0=f0+abs(H0_image{i,j}(u,v)-(H0_image{i,j}(u-1,v)+H0_image{i,j}(u,v-1)+H0_image{i,j}(u+1,v)+H0_image{i,j}(u,v+1))/4);f1=f1+abs(H1_image{i,j}(u,v)-(H1_image{i,j}(u-1,v)+H1_image{i,j}(u,v-1)+H1_image{i,j}(u+1,v)+H1_image{i,j}(u,v+1))/4);endendif (f0-f1)<0extract_bits(i,j)=0;recover_image(size*i-size+1:size*i,size*j-size+1:size*j)=H0_image{i,j};elseextract_bits(i,j)=1;recover_image(size*i-size+1:size*i,size*j-size+1:size*j)=H1_image{i,j};endendendfigure(3);subplot(1,2,1);imshow(original_p);hold on;title('Original image','fontsize',16);subplot(1,2,2);recover_image=uint8(recover_image);imshow(recover_image);hold on;title('Recovered image','fontsize',16);%==============analysis============diff=original_p(1:lim_row*size,1:lim_col*size)-recover_image;counts=0;for i=1:lim_rowfor j=1:lim_colblock_diff{i,j}=diff((size*i-size+1):size*i,(size*j-size+1):size*j); %分块if extract_bits(i,j)~=watermessage(i,j)block_diff{i,j}=ones(size,size)*255;counts=counts+1;elseblock_diff{i,j}=original_p((size*i-size+1):size*i,(size*j-size+1):size*j);enddiff_image((size*i-size+1):size*i,(size*j-size+1):size*j)=block_diff{i,j};endendfigure(4);imshow(diff_image);hold on;%title('Blocks of incorrect','fontsize',16);%错误率与分块大小的关系rate=counts/((lim_row)*(lim_col))。