(绝对可运行)加密图像中的可逆数据隐藏算法matlab代码(基于张新鹏教授的算法)
可逆信息隐藏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算法的过程,并成功地提取出隐藏的信息。
(绝对可运行)加密图像中的可逆数据隐藏算法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))。
基于matlab的隐写术代码

基于matlab的隐写术代码隐写术是一种将信息隐藏在其他媒介中的技术,它可以用于保护敏感信息的安全传输。
在本文中,我们将介绍如何使用MATLAB编写一个简单的隐写术代码。
首先,我们需要了解隐写术的基本原理。
隐写术的核心思想是将要隐藏的信息嵌入到一个载体中,使得外观上看不出任何痕迹。
在本例中,我们将使用一张图片作为载体,并将一段文本信息隐藏在其中。
首先,我们需要加载图片和文本信息。
在MATLAB中,可以使用imread函数加载图片,使用fopen和fread函数加载文本信息。
加载完成后,我们可以使用imshow函数显示图片,以确保载体和信息都已正确加载。
接下来,我们需要将文本信息转换为二进制形式。
在MATLAB中,可以使用dec2bin函数将十进制数转换为二进制数。
我们将每个字符的ASCII码转换为8位的二进制数,并将所有字符的二进制数连接起来,形成一个长的二进制字符串。
然后,我们需要将二进制信息嵌入到图片中。
在MATLAB中,可以使用imwrite函数将图片保存为新的文件。
我们可以通过修改图片的像素值来嵌入信息。
具体来说,我们可以将二进制信息的每一位嵌入到图片的RGB通道的最低有效位中。
这样,即使修改了像素值,人眼也很难察觉到变化。
最后,我们需要提取隐藏在图片中的信息。
在MATLAB中,可以使用imread函数加载修改后的图片。
然后,我们可以通过读取每个像素的RGB通道的最低有效位,提取出隐藏的二进制信息。
最后,我们可以使用bin2dec函数将二进制数转换为十进制数,并使用char函数将十进制数转换为字符。
通过以上步骤,我们就可以实现一个简单的基于MATLAB的隐写术代码。
当然,这只是一个简单的示例,实际应用中还需要考虑更多的因素,如加密算法、嵌入容量等。
但是,通过这个例子,我们可以了解到隐写术的基本原理和MATLAB的应用。
总结起来,基于MATLAB的隐写术代码可以通过加载图片和文本信息、将文本信息转换为二进制形式、将二进制信息嵌入到图片中、提取隐藏的信息等步骤实现。
按需发送的加密图像中的可逆信息隐藏

按需发送的加密图像中的可逆信息隐藏
韩喜玉, 钱振兴, 张新鹏, 姜 飞
上海大学 通信与信息工程学院,上海 200444 摘 要: 提出了一种新的加密图像中的可逆信息隐藏算法. 发送方对图像进行下采样并计算 残差,得到子图像和残差两部分数据,再使用加密密钥对两部分数据分别进行加密后发送给 服务器端. 服务器端对残差部分的加密数据进行算术编码,产生冗余空间并使用嵌入密钥隐 藏额外数据. 接收端根据持有密钥的情况,从服务器端获取不同的数据版本. 与以往方法相 比,所提出的按需传输数据的新机制可有效减少服务器传送的数据量,且在图像可无损恢复 的前提下大大提高了数据嵌入率. 关键词:可逆数据隐藏;加密;信息隐藏;算术编码 中图分类号:TN911.73 文章编号:0255-8297(2015)01-0050-09
dD ). 图 2 得到最终的残差 D =(dB , dC , dD , dC 、 将 dB 、 dC 、 dD 分 别 转 化 成 一 维 行 向 量 dB 、 是最常见图像 Lena、Airplane 等 D 的统计. 横坐标表示 D 的值,为了方便,统计−50 和+50 之 间 的 残 差 值;纵坐 标表 示 每 个 残 值 对 应 的 数 目. 从 图 2 中 可 以 看 出,对 于 较 平 滑 的 图 像(Lena、Airplane),其残差分布较集中,且残差值为“ 0”和“−1”的较多. 正是由于这种数 据的冗余性, 信息隐藏者可以对其压缩, 用来嵌入数据. 获得残差后对图像进行重组,首先根据文献 [12] 的流密码对 IA 进行加密,则 IA 的每一 个像素 IA (i, j ) 分解为 IA (i, j, 0), IA (i, j, 1), · · ·, IA (i, j, 7) IA (i, j, k ) = IA (i, j )/2k mod 2
基于密文医学图像的可逆信息隐藏算法

7
(2)
使用加密密钥 K EN 生成规模为 N1 ´ N 2 的随机数矩 阵R, 对所有像素按位异或加密。其中 R i j k 表示 R 中 第 i 行 j 列的随机数 R i j 转换成 8 位二进制后的第 k 位 比特。 Ep i j k 为 P i j k 加密后的值。当所有像素都经过 加密后, 得到加密后的图像 I EN 。图像拥有者将密文图 像 I EN 发送给信道拥有者, 即信息嵌入者。
原始医学图像加密密钥图像加密加密图像医学图像拥有方信息隐藏信息嵌入密钥含嵌入信息的加密图像原始医学图像信息图像恢复与提取信息提取密钥含嵌入信息的解密图像图像解密解密密钥接收方信息嵌入方算法框架图137computerengineeringapplications计算机工程与应用20165212222信息嵌入信息嵌入方接收到密文图像en后利用嵌入密钥em和斜线分组方式嵌入信息具体步骤如下
按位异或操作对医学图像进行加密, 然后信息嵌入方在 密文图像中进行信息嵌入。接收方接收到含有嵌入信 息的密文图像后, 首先利用解密密钥解密图像得到含有 嵌入信息的图像, 然后根据应用需求进行信息提取和图 像恢复操作。算法框架图如图 1 所示。
138
2016, 52 (12)
Computer Engineering and Applications 计算机工程与应用
[16]
原始医 学图像
图像加密
含嵌入信 息的加密 图像
(医学图像拥有方) 原始医 学图像 信息 提取密钥
(信息嵌入信息 的解密图像
图像解密 解密密钥
表, 算法首先将密文图像分为互不重叠的块, 随后将每 块随机分为两组, 通过翻转其中一组像素的 3LSBs 来嵌 入 1 比特数据, 接收端通过计算块的梯度值来提取信息 和恢复图像。针对该算法计算梯度值时忽略边缘像素 的问题, Hong[17]采用 side-match 技术做了改进, 而 Liao[18] 通过区分顶点像素、 非顶点边缘像素和非边缘像素进一 步降低了信息提取和图像恢复的错误率。 虽然文献 [17-18]已有较好的实验效果, 但是随机分 组方式使得像素 P i j 和其相邻像素可能同时被翻转, 因 此受影响的梯度值会使信息提取错误率提高。其次, 密 文图像中每块嵌入 1 比特信息, 使得嵌入容量较小。本 文一方面采用斜线分组方式使得翻转像素 P i j 时相邻 像素不会被翻转, 从而 P i j 的梯度值不会受到已翻转像 素的影响。另一方面, 由于每块可嵌入信息的像素被斜 线划分为四组而非两组, 因此本文算法每块可以嵌入 2 比特信息。最后, 由于医学图像具有十分光滑的平面和 主要信息集中的特征, 当块大小为 8×8, 像素值全为 255 的图像块中嵌入信息 1 后, 文献 [17-18] 提取嵌入信息过 程中, 得到的正确恢复块和错误恢复块的梯度值都为 0, 因此无法准确提取出嵌入信息 1。本文在嵌入信息时只 翻转图像块 1/8 像素的 3LSBs, 对含嵌入信息的解密图 像块 (原始图像为十分光滑的图像块) 提取信息时, 只有 正确恢复块的梯度值为 0, 错误恢复块的梯度值都大于 0。因此, 本文能从十分光滑的图像块中准确提取出嵌 入信息。实验数据显示, 本文算法能无损地恢复原始医 学图像, 准确地提取嵌入信息。在分块大小相同时, 本 文算法的嵌入容量是 Hong
基于MATLAB的图像信息隐藏算法研究与实现

Research and Realization of Image Information Hiding Algorithm Based on MATLAB 作者: 陈小娥[1]
作者机构: [1]福建船政交通职业学院信息工程系,福建福州350007
出版物刊名: 绍兴文理学院学报
页码: 86-92页
年卷期: 2018年 第9期
主题词: 信息隐藏;版权保护;嵌入与提取;MATLAB
摘要:网络技术和多媒体技术迅猛发展,为了更好地保障图像信息传输的安全性和可靠性,解决数字图像的版权保护问题,图像信息隐藏技术已成为图像处理领域的研究热点之一。
采用MATLAB开发环境,提出了一种图像信息隐藏算法,实现了图像信息隐藏的两大基本功能,即信息的嵌入和信息的提取。
同时,模拟常见的攻击方法,验证了添加隐藏信息后的图像的抗攻击能力。
实验表明,该算法具有较强的鲁棒性,添加隐藏信息后的图像能有效地应对多种常见攻击,且隐藏的信息具有良好的不可见性。
按需发送的加密图像中的可逆信息隐藏

按需发送的加密图像中的可逆信息隐藏
韩喜玉;钱振兴;张新鹏;姜飞
【期刊名称】《应用科学学报》
【年(卷),期】2015(033)001
【摘要】提出了一种新的加密图像中的可逆信息隐藏算法.发送方对图像进行下采样并计算残差,得到子图像和残差两部分数据,再使用加密密钥对两部分数据分别进行加密后发送给服务器端.服务器端对残差部分的加密数据进行算术编码,产生冗余空间并使用嵌入密钥隐藏额外数据.接收端根据持有密钥的情况,从服务器端获取不同的数据版本.与以往方法相比,所提出的按需传输数据的新机制可有效减少服务器传送的数据量,且在图像可无损恢复的前提下大大提高了数据嵌入率.
【总页数】9页(P50-58)
【作者】韩喜玉;钱振兴;张新鹏;姜飞
【作者单位】上海大学通信与信息工程学院,上海200444;上海大学通信与信息工程学院,上海200444;上海大学通信与信息工程学院,上海200444;上海大学通信与信息工程学院,上海200444
【正文语种】中文
【中图分类】TN911.73
【相关文献】
1.基于秘密共享的同态加密图像可逆信息隐藏算法 [J], 周能;张敏情;刘蒙蒙
2.基于改进PVO自适应嵌入的加密域图像可逆信息隐藏方法 [J], 侯思祖;马红月;
项洪印
3.基于加密图像的可逆信息隐藏算法综述 [J], 庞明源;范贵进;孙容海
4.基于位平面循环异或的加密图像可逆信息隐藏 [J], 王慧;栗风永;朱恒杰
5.基于弹载遥测图像加密域的可逆信息隐藏算法 [J], 张伟;宋畅;洪文鹏;毕盛;卫俊杰
因版权原因,仅展示原文概要,查看原文内容请购买。
基于无损压缩的加密图像可逆信息隐藏

基于无损压缩的加密图像可逆信息隐藏郑淑丽;曹敏;胡东辉;李丹丹【摘要】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 Domainclc;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))。