预览加载中,请您耐心等待几秒...
1/2
2/2

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

%基于混沌和位运算的图像加密算法 clear clc a=imread('rice.png');%读取图片 a=double(a);%把矩阵元素变成double型的 [m1,n1]=size(a);%读取矩阵a的大小 b=zeros(m1,n1*8);%定义一个行m1列n1*8的矩阵 fori=1:1:m1%对矩阵a的元素进行十进制到二进制转换 forj=1:1:n1 fort=0:1:7 ifmod(floor(a(i,j)/2^t),2)==1 b(i,j*8-t)=1; else b(i,j*8-t)=0; end end end end q=4;%混沌序列参数 b1=b;%定义一个矩阵b1 x1(1)=0.3333;%混沌序列初始值 forn=1:n1*8+100%产生混沌序列 x1(n+1)=q*x1(n)*(1-x1(n)); end n=101:1:n1*8+100;%从混沌序列的101项开始取值 y1(n-100)=x1(n); [z1,l1]=sort(y1,2);%取混沌序列顺序赋给l1 fori=1:1:n1*8%取矩阵b的l1(i)列赋给矩阵b1的i列,得到打乱序列后的矩阵b1 b1(:,i)=b(:,l1(i)); end x2(1)=0.4444;%打乱矩阵的行 form=1:m1+100 x2(m+1)=q*x2(m)*(1-x2(m)); end m=101:1:m1+100; y2(m-100)=x2(m); [z2,l2]=sort(y2,2); fori=1:1:m1 b(i,:)=b1(l2(i),:); end fori=1:1:m1%将矩阵的元素变为十进制 forj=1:1:n1 a(i,j)=b(i,j*8); fort=1:1:7 a(i,j)=a(i,j)+2^t*b(i,j*8-t); end end end a=uint8(a);%将矩阵元素由二进制变为十进制 figure,imshow(a);%显示加密后的矩阵a %解密程序是加密程序的逆 a=double(a); fori=1:1:m1 forj=1:1:n1 fort=0:1:7 ifmod(floor(a(i,j)/2^t),2)==1 b(i,j*8-t)=1; else b(i,j*8-t)=0; end end end end fori=1:1:m1 b1(l2(i),:)=b(i,:); end fori=1:1:n1*8 b(:,l1(i))=b1(:,i); end fori=1:1:m1 forj=1:1:n1 a(i,j)=b(i,j*8); fort=1:1:7 a(i,j)=a(i,j)+2^t*b(i,j*8-t); end end end a=uint8(a); figure,imshow(a);%解密图像a