matlab数字图像加密
- 格式:pdf
- 大小:353.67 KB
- 文档页数:5
用MATLAB实现基于混沌的图像置乱加密算法由于图像文件的加密有其自身的要求,传统的文字加密方法不适合图像文件加密。
为此,我们在混沌映射加密算法的基础上,提出了一种利用Logistic混沌序列对图像像素点置乱实现加密的算法,那么,我们今天借助MATLAB软件平台,看看基于混沌的图像置乱加密算法如何实现。
一、基于混沌的图像置乱加密算法本文提出的基于混沌的图像置乱加密算法示意图如图1所示。
加密算法如下:首先,数字图像B大小为M×N(M是图像B的行像素数,N是图像B的列像素数),将A的第j行连接到j-1行后面(j=2,3,A,M),形成长度为M×N的序列C。
其次,用Logistic混沌映射产生一个长度为的混沌序列{k1,k2,A,kM×N},并构造等差序列D:{1,2,3,A,M×N-1,M×N}。
再次,将所产生的混沌序列{k1,k2,A,kM×N}的M×N个值由小到大排序,形成有序序列{k1′,k2′,A’,kM×N’},确定序列{k1,k2,A,kM×N}中的每个ki在有序序列{k1′,k2′,A’,kM×N’}中的编号,形成置换地址集合{t1,t2,A,tM×N},其中ti为集合{1,2,A,M×N}中的一个;按置换地址集合{t1,t2,A,tM×N}对序列C进行置换,将其第i个像素置换至第ti列,i=1,2,A,M×N,得到C’。
将等差序列D做相同置换,得到D’。
最后,B’是一个M×N的矩阵,B’(i ,j)=C’((i-1)×M+j),其中i=1,2,A,M;j=i=1,2,A,N,则B’就是加密后的图像文件。
解密算法与加密算法相似,不同之处在于第3步中,以序列C’代替随机序列{k1,k2,A,kM×N},即可实现图像的解密。
数字图像加密算法的研究与实现摘要数字图像加密是进行数字图像信息保密的一种手段。
随着信息技术的飞速发展,数字图像在各个领域中有着极为广泛的运用,那么数字图像中所包含的信息安全性应受到重视。
数字图像本身具有数据量较大的特点,用传统的的加密方法往往无法达到加密的要求,许多学者对数字图像的信息安全性进行了多次研究并提出了许多强而有效的算法。
本文研究并实现了一种基于混沌序列置乱的数字图像加密算法,通过密钥产生混沌序列,将该混沌序列进行逻辑排序,并以此排列方法对数字图像进行加密。
该算法隐私性较强,在数字图像的加密和解密过程中均需要密钥的参与,因此不知道密钥的用户无法恢复数字图像,具有良好的保密性。
关键词:数字图像混沌加密数据隐藏AbstractDigital image encryption algorithm is a method about keeping the information of digital image secret.With the quick development of informational technology,the digital image has been utilized in many areas,so the security of message that digital images carry should be paid attention.Particularly ,digital images have the characteristic of a large amount of data,it can not meet demands about encryption that encrypting data in traditional way,which leads to a lot of scholars have spent much time and energy on researching the security about digital image information and illustrated many effective algorithm.This article discuss and illustrate a kind of digital image encryption algorithm based on chaotic array disruption,producing chaotic array according to the key,then logically arranging existed chaotic array,finally encrypt digital image with same logic.It shows better privacy.This process requires keys participating in both encryption and deciphering,so anyone does not know the key who can not rebuild the original image.Key words:digital image chaotic encryption hiding data目录摘要 (I)Abstract (II)绪论 (1)1数字图像加密的基础理论 (4)1.1密码学的介绍 (4)1.2 图像加密技术 (4)1.3数字图像的置乱 (5)1.4混沌加密简介 (5)1.5混沌加密安全性分析 (6)2开发工具简介 (8)3基于混沌的数字图像加密算法 (11)3.1数字图像混沌加密算法总体设计 (11)3.2 数字图像混沌加密算法 (11)3.3数字图像混沌解密算法 (13)4实验仿真与结果 (14)4.1编程实现相关函数及其方法 (14)4.2仿真结果 (14)4.2.1非彩色图像实验仿真 (14)4.2.2彩色图像实验仿真 (16)结论 (18)附录1混沌加密与混沌解密算法代码 (19)绪论计算机和网络的飞速发展为多媒体数字产品的使用、传播提供了极其便利的途径,然而由于数字产品具有极易被复制和修改的特性,使得数字作品的信息安全问题和版权保护成为迫切需要解决的难题。
图像加密中测试混沌系统性能的0-1测试0-1Test⽅法与MATLAB
实现代码
因为博主学习与实验的原因,需要对混沌系统的性能进⾏测试,⽆奈代码有问题,于是上⽹后找到了0-1测试的代码,经过调试成功运⾏。
⽤到的⽅法与0-1测试的原理在⽂献:The 0-1 Test for Chaos: A Review中写了,感兴趣可以⾃⾏了解。
z1test⽤法
以Logistic:X(n+1)=4u(1-Xn) 为例,⾸先给定X0=0.1 u=0.8,将Logistic迭代200次后将⽣成的混沌序列传⼊z1test这个函数,返回的值即为Logistic在Xo=0.8的情况下,u=0.8时0-1测试的数值。
那么我们只需要将u在想要取值的范围内取个遍,每个u都⽣成混沌序列带⼊z1test,记录返回点的位置即可得到u在给定范围内0-1Test的结果下⾯上代码,以X0=0,1 ,u的范围为[0,1],步长0.01
k0=0:0.001:1;%u的范围
N=200;%每个参数迭代次数
for j=1:length(k0)
k=k0(j);
AoG(1)=0.1;%初始值
for ii=1:N
AoG(ii+1)=4*k*AoG(ii)*(1-AoG(ii));
end
value_Log(j)=z1test(AoG);
end
plot(k0,value_Log,'b');
xlabel('µ');ylabel('K');
Cite As。
利用Matlab进行数据加密和信息安全的技术实现概述:信息安全在当今数字化时代变得尤为重要。
随着数据量的不断增长和传输方式的多样化,保护数据安全成为了一项紧迫的任务。
数据加密是信息安全的基础,有效地使用Matlab进行数据加密和信息安全技术的实现成为了许多研究者和工程师的不懈追求。
本文将深入探讨利用Matlab实现数据加密和信息安全的技术。
一、数据加密基础1.1 什么是数据加密数据加密是一种将明文转化为密文的过程,通过使用一定的算法和密钥来隐藏数据的真实含义以保证其保密性。
1.2 数据加密的目的数据加密的主要目的是确保数据的完整性、保密性和可靠性,以防止未经授权的访问和数据泄露。
1.3 传统加密算法常用的对称加密算法包括DES、AES等,而常用的非对称加密算法则有RSA、DSA等。
二、Matlab在数据加密中的应用2.1 数据加密函数Matlab提供了一系列用于数据加密的函数,例如randi、bitxor等。
使用这些函数,我们可以自由地实现各种加密算法。
2.2 对称加密算法的实现DES是一种常见的对称加密算法,它可以通过Matlab实现。
我们可以使用Matlab提供的位运算函数bitxor来实现DES算法中的异或操作,还可以利用bitshift函数进行左移和右移操作。
2.3 非对称加密算法的实现RSA是一种常见的非对称加密算法,可以通过Matlab进行实现。
Matlab提供了大整数运算的函数,可以方便地实现RSA算法中的大整数加法、大整数乘法等操作。
此外,利用Matlab的控制语句,我们可以实现RSA算法中的循环、选择等结构。
三、信息安全的其他技术3.1 数字签名技术数字签名技术是一种确保数据完整性和真实性的方法。
Matlab提供了哈希函数来实现数字签名的生成和验证。
3.2 数据压缩和加密的结合数据压缩可以大幅减小数据的体积,方便传输和存储。
Matlab提供了用于压缩的函数,例如zlib、gzip等。
图像隐藏MATLAB实验报告1. 引言图像隐藏是一种将秘密信息嵌入到数字图像中的技术。
通过这种技术,我们可以将信息隐藏在覆盖物看起来像是普通图像的数字图像中。
图像隐藏有许多应用领域,包括数字水印、版权保护和信息隐蔽通信等。
在这个实验中,我们将使用MATLAB实现图像隐藏的过程,并观察性能和影响因素。
2. 实验方法2.1 准备工作在开始实验之前,我们需要准备以下工作:- 安装MATLAB并确保其正确配置。
- 准备一些用作载体的数字图像。
在本实验中,我选择了一张常见的风景照片作为载体图像。
- 准备需要隐藏的秘密信息。
在本实验中,我选择了一段文字作为秘密信息。
2.2 图像隐藏过程图像隐藏的过程可以分为以下几个步骤:1. 加载载体图像和秘密信息。
2. 将载体图像转换为灰度图像。
这是因为在灰度图像中隐藏信息相对较简单且具有较好的效果。
3. 对灰度图像进行傅里叶变换。
这一步是为了将图像从空间域转换到频率域,以便于接下来的嵌入操作。
4. 将秘密信息嵌入到频率域图像中。
这一步需要选择适当的嵌入算法和参数,以在保证图像可视性的情况下实现信息的隐藏。
5. 对嵌入了秘密信息的频率域图像进行逆傅里叶变换,将图像转换回空间域。
6. 将隐藏了秘密信息的图像保存到文件中。
3. 实验结果经过以上步骤,我成功地实现了图像隐藏的过程,并观察到了以下结果。
首先,我将秘密信息隐藏到载体图像中,并将隐藏后的图像显示出来。
通过肉眼观察,我无法看出图像中隐藏了秘密信息,即图像的可视性并未受到明显的影响。
其次,我执行了一系列实验,通过改变隐藏算法和参数,以观察不同因素对隐藏效果的影响。
实验结果显示,隐藏算法和参数的选择对图像的可视性和隐藏效果都有显著的影响。
一些算法和参数可能会导致隐藏的秘密信息更难以被发现,而另一些则可能导致图像质量下降。
此外,我还测试了对隐藏信息进行提取的过程。
通过对隐藏了秘密信息的图像执行一系列解密操作,我成功地提取出了隐藏的秘密信息,并与预先准备好的原始秘密信息进行了比对。
使用MATLAB进行数据加密和解密数据加密和解密是当今信息安全领域中非常重要的问题。
加密算法的设计和实现是确保数据在传输和存储过程中不被未经授权的人访问的一种关键手段。
在本文中,我们将探讨如何使用MATLAB进行数据加密和解密,并介绍一些常用的加密算法和技术。
一、数据加密的基本原理数据加密是通过将原始数据转化为不易被理解的形式,从而防止未经授权的人获取敏感信息。
加密过程主要包括两部分:加密算法和密钥。
加密算法是对原始数据进行数学计算和转换的一种方法。
常见的加密算法有对称加密算法和非对称加密算法。
对称加密算法使用相同的密钥进行加密和解密,加密和解密过程非常高效。
其中,最常用的对称加密算法是AES(Advanced Encryption Standard)算法。
AES算法在MATLAB中有相应的函数可供使用。
非对称加密算法使用两个密钥:公钥和私钥。
公钥用于加密数据,私钥用于解密数据。
公钥可以公开,而私钥需要保密。
RSA算法是一种常见的非对称加密算法,也可以在MATLAB中使用相应的函数实现。
密钥是在加密和解密过程中起到关键作用的参数。
密钥的选择和管理直接影响到加密算法的安全性。
为了确保数据的安全性,密钥应该是足够长的随机数。
同时,密钥的保管也是一个重要的问题,只有授权的人能够访问密钥。
二、使用MATLAB进行数据加密在MATLAB中,我们可以利用现有的加密算法和函数来对数据进行加密。
接下来,我们将使用AES算法来进行示范。
首先,需要准备一个密钥。
在MATLAB中,我们可以通过randi函数生成一个随机的密钥。
例如:```MATLABkey = randi([0 255], 1, 16);```生成了一个16字节长的随机密钥。
然后,我们可以使用AES算法对数据进行加密。
在MATLAB中,通过函数aesencrypt可以实现AES加密。
例如,假设我们要加密一个文本文件:```MATLABplaintext = fileread('plaintext.txt');ciphertext = aesencrypt(plaintext, key);```上述代码将plaintext.txt文件中的内容进行AES加密,并将加密后的结果存储在变量ciphertext中。
MATLAB中的图像压缩和编码方法图像压缩和编码是数字图像处理的重要领域,在各种图像应用中起着至关重要的作用。
在本文中,我们将探讨MATLAB中的图像压缩和编码方法,包括无损压缩和有损压缩,并介绍其中的一些经典算法和技术。
一、图像压缩和编码概述图像压缩是指通过一定的算法和技术来减少图像数据的存储量或传输带宽,以达到节约存储空间和提高传输效率的目的。
而图像编码则是将原始图像数据转换为一系列二进制编码的过程,以便存储或传输。
图像压缩和编码通常可以分为无损压缩和有损压缩两种方法。
无损压缩是指压缩后的数据可以完全还原为原始图像数据,不会引入任何失真或变化。
常见的无损压缩算法有Run-Length Encoding (RLE)、Lempel-Ziv-Welch (LZW)、Huffman编码等。
这些算法通常针对图像中的冗余数据进行编码,如重复的像素值或相似的图像区域。
有损压缩则是在保证一定程度的视觉质量下,通过舍弃或近似原始图像数据来减小存储或传输的数据量。
常见的有损压缩算法有JPEG、JPEG2000、GIF等。
这些算法通过离散余弦变换(DCT)、小波变换或颜色量化等方法,将图像数据转换为频域或颜色空间的系数,并通过量化、编码和压缩等步骤来减小数据量。
二、无损压缩方法1. Run-Length Encoding (RLE)RLE是一种简单高效的无损压缩算法,通过计算连续重复像素值的数量来减小数据量。
在MATLAB中,可以使用`rle`函数实现RLE编码和解码。
例如,对于一幅图像,可以将连续的像素值(如白色)编码为重复的个数,然后在解码时根据重复的个数恢复原始像素值。
2. Lempel-Ziv-Welch (LZW)LZW是一种字典压缩算法,通过将图像中连续的像素序列映射为一个短代码来减小数据量。
在MATLAB中,可以使用`lzwencode`和`lzwdecode`函数实现LZW 编码和解码。
例如,对于一段连续的像素序列,可以将其映射为一个短代码,然后在解码时根据代码恢复原始像素序列。
%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))。
AES加密算法在图像加密上的应用及MATLAB实现作者:高瑞杨立波来源:《科技创新导报》 2014年第14期高瑞杨立波(长春理工大学电子信息工程学院吉林长春 130022)摘要:当今社会,数字图像加密技术的发展备受关注,该文提出了一种结合Logistic混沌映射理论的AES图像加密算法,使得数字图像在传输过程中得到有效的保护。
关键词:图像加密 AES Logistic 混沌映射 MATLAB中图分类号:TP309 文献标识码:A 文章编号:1674-098X(2014)05(b)-0048-02随着互联网的发展,数字图像通信成为了信息传输的重要途径。
与此同时,数字图像通信的安全引起了人们的广泛重视。
将AES算法和混沌序列相结合来实现数字图像加密的方法,既保证了加密的安全性,也缩短了加密的时间。
1 AES介绍AES是Advanced Encryption Standard(高级加密标准)的简称,是美国联邦政府采用的一种区块加密标准。
AES具有可变的分组长度和密钥长度,而且分组长度和密钥长度是不相关的。
分组长度有三种情况:128位、192位和256位。
AES加密过程包含4个步骤:(1)轮密匙加变换(2)字节替换(3)行移位(4)列混合。
2 Logistic映射Logistic映射有两种定义形式:第一种形式如式(1)所示。
已有研究证明当时,映射为混沌。
此时的迭代的序列是具有对初值敏感、非周期、扩散的特性。
第二种形式如式(2)所示:其中,为分岔参数,从开始,混沌系统进入分岔倍周期,当参数逐渐增大到时,系统呈现混沌特性,上述过程就是倍周期通向混沌。
由于Logistic映射产生的混沌序列对初值的敏感性等特点,这些特性被广泛应用于很多混沌图像加密的算法中。
3 基于AES的图像加密算法在利用AES算法对图像进行加密的过程中,第一步即将灰度图像进行轮密匙加变换,就是将轮密匙与原图像矩阵中相对应的字节作异或运算,以得到初步密文。
在Matlab中进行图像压缩与图像解密的方法与技巧Matlab是一种强大的工具,被广泛用于图像处理和计算机视觉领域。
在本文中,我们将讨论如何利用Matlab进行图像压缩与图像解密,并探讨一些相应的方法和技巧。
首先,让我们来了解一下图像压缩的基本概念和原理。
图像压缩是通过减少图像占用的存储空间或传输带宽来减小图像文件的大小。
压缩分为有损压缩和无损压缩两种类型。
有损压缩会丢失一些图像信息,以达到压缩的目的,而无损压缩则尽量保留所有图像信息。
在Matlab中,我们可以使用多种方法进行图像压缩。
常见的方法之一是使用离散余弦变换(Discrete Cosine Transform,DCT)。
DCT将图像分解为一系列互不相关的频率成分,然后根据其重要性对这些成分进行量化和编码。
通过调整量化步长可以控制压缩比率和图像质量。
除了DCT,还有其他一些常用的压缩方法,如小波变换(Wavelet Transform),它可以提供更好的局部逼近能力,适用于不同尺度和方向的图像特征。
Matlab中有许多内置函数可以实现小波变换,例如waverec和wavedec函数。
另一个常用的图像压缩方法是基于向量量化(Vector Quantization,VQ)的编码。
VQ将图像划分为不重叠的块,并使用聚类算法将每个块映射到具有较少位数的代表向量。
然后,通过编码代表向量和其在图像中的位置来表示整个图像。
这种方法对于有损压缩非常有效,但在无损压缩方面效果较差。
一旦我们对图像进行了压缩,接下来我们需要了解如何进行图像解密。
在Matlab中,解密可以通过逆向操作来实现。
对于DCT压缩,我们可以通过应用逆离散余弦变换(Inverse Discrete Cosine Transform,IDCT)来恢复原始图像。
同样,对于小波变换压缩,我们可以使用逆小波变换(Inverse Wavelet Transform)来还原图像。
需要注意的是,如果进行了有损压缩,解密后的图像与原始图像之间很可能有一些质量损失。
MATLAB数字图像加密
一、实验名称
MATLAB数字图像加密
二、实验目的
熟悉MATLAB编译环境;
掌握基本的矩阵操作;
了解初级的加密算法。
三、实验环境
WindowsXP操作系统,MATLABR2010a编译环境
四、实验原理
将数字图像划分成块,对RGB矩阵进行转置、水平翻转、垂直翻转等变换,形成新的矩阵,实现对图像的加密。
五、实验过程
1.获取数字图像存入矩阵;
2.获取矩阵大小存入变量;
3.将矩阵划分成等大的4*4子矩阵;
4.分别对存储图像RGB信息的矩阵进行转置、水平翻转、垂直翻转等变换;
5.再次细化矩阵,将矩阵划分成等大的16*16子矩阵;
6.分别对存储图像RGB信息的矩阵进行转置、水平翻转、垂直翻转等变换;
7.加密完成,存储加密后的图像;
8.逆推过程,完成解密,存储解密后的图像。
六、源程序
a=imread('C:\Documents and Settings\Owner\×ÀÃæ\jm\jmtp.jpg'); subplot(2,2,1);
imshow(a);
[l,m,n]=size(a);
x=l/4;
y=m/4;
for i=0:3
for j=0:3
a((j*x+1):((j+1)*x),(i*y+1):((i+1)*y),1)=a((j*x+1):((j+1)*x),(i*y+1):
((i+1)*y),1)';
a((j*x+1):((j+1)*x),(i*y+1):((i+1)*y),2)=flipud(a((j*x+1):((j+1)*x),( i*y+1):((i+1)*y),2));
a((j*x+1):((j+1)*x),(i*y+1):((i+1)*y),3)=fliplr(a((j*x+1):((j+1)*x),( i*y+1):((i+1)*y),3));
end
end
subplot(2,2,3);
imshow(a);
x=l/16;
y=m/16;
a(:,:,1)=flipud(a(:,:,1));
a(:,:,2)=fliplr(a(:,:,2));
a(:,:,3)=a(:,:,3)';
for i=0:15
for j=0:15
a((j*x+1):((j+1)*x),(i*y+1):((i+1)*y),1)=a((j*x+1):((j+1)*x),(i*y+1): ((i+1)*y),1)';
a((j*x+1):((j+1)*x),(i*y+1):((i+1)*y),2)=flipud(a((j*x+1):((j+1)*x),( i*y+1):((i+1)*y),2));
a((j*x+1):((j+1)*x),(i*y+1):((i+1)*y),3)=fliplr(a((j*x+1):((j+1)*x),( i*y+1):((i+1)*y),3));
end
end
subplot(2,2,2);
imshow(a);
imwrite(a,'jiamihou.jpg');
for i=0:15
for j=0:15
a((j*x+1):((j+1)*x),(i*y+1):((i+1)*y),1)=a((j*x+1):((j+1)*x),(i*y+1): ((i+1)*y),1)';
a((j*x+1):((j+1)*x),(i*y+1):((i+1)*y),2)=flipud(a((j*x+1):((j+1)*x),( i*y+1):((i+1)*y),2));
a((j*x+1):((j+1)*x),(i*y+1):((i+1)*y),3)=fliplr(a((j*x+1):((j+1)*x),( i*y+1):((i+1)*y),3));
end
end
a(:,:,1)=flipud(a(:,:,1));
a(:,:,2)=fliplr(a(:,:,2));
a(:,:,3)=a(:,:,3)';
x=l/4;
y=m/4;
for i=0:3
for j=0:3
a((j*x+1):((j+1)*x),(i*y+1):((i+1)*y),1)=a((j*x+1):((j+1)*x),(i*y+1): ((i+1)*y),1)';
a((j*x+1):((j+1)*x),(i*y+1):((i+1)*y),2)=flipud(a((j*x+1):((j+1)*x),( i*y+1):((i+1)*y),2));
a((j*x+1):((j+1)*x),(i*y+1):((i+1)*y),3)=fliplr(a((j*x+1):((j+1)*x),( i*y+1):((i+1)*y),3));
end
end
subplot(2,2,4);
imshow(a);
imwrite(a,'jiemihou.jpg');
七、实验结果
原图片
加密后的图片解密后的图片
八、实验分析
优点:该加密算法原理简单,编程易实现,加密效果较好。
缺点:解密过程简便,易破解。