📄 main.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%% 初始化 密钥是n1,n2,x1(0),x2(0) **********************
clc
close all
clear all
t=cputime;
n1=1; %设置密钥*******************************************************
n2=1; %设置密钥*********************************************
x1(1)=0.2; %设置密钥;产生a值序列*********************888
x3(1)=0.25; %设置密钥产生b值序列
B=16; %设置对原图像分块的记数
u=4;
%××××××××××××××××××××产生a,b值×88888888888888888888888888888888888
%%%%% n1整个图像置乱迭代次数,n2各个分块迭代次数
for i=2:(101+B^2)%B^2原图被分的块数,多产生的混沌序列已备其混沌特性不好从第101个数开始取用
x1(i)=u*x1(i-1)*(1-x1(i-1));
x3(i)=u*x1(i-1)*(1-x1(i-1));
end
for i=1:B^2+1
x2(i)=fix(x1(100+i)*10000)-fix(x1(100+i)*10)*1000;
x4(i)=fix(x1(100+i)*10000)-fix(x1(100+i)*10)*1000;
x22(i)=mod(x2(i),256)+1;%a值序列
x44(i)=mod(x2(i),256)+1;%b值序列
end
%************************************对整个图像做ARNOLD映射*************************************
originimage=imread('lena.bmp'); %%%%%%%%一定是方阵,读入加密图像*******************
origin=rgb2gray(originimage);
M=length(origin);
subplot(1,3,1),imshow(origin),title('加密前的图像');
lastimage1=cat(x22(1),x44(1),origin,n1);% 对整个图像做ARNOLD映射后的密图为lastimage1
subplot(1,3,2),imshow( lastimage1),title('整体加密后的图像');
imwrite( lastimage1,'linac.bmp','bmp');
%*********************************对各个分块加密置乱****************************
k1=1;
k2=0;
for Q=1:B^2
k2=k2+1;
if k2==B+1
k1=k1+1;
k2=1;
end
partimage=qukuai(lastimage1,k1,k2,B); %对图像取分块函数
partlast=cat(x22(Q+1),x44(Q+1),partimage,n2);%对分块做映射
%将置乱后的分块放在加密图像的指定位置上
for i=1:M/B
for j=1:M/B
lastimage2(B*(i-1)+k1,B*(j-1)+k2)=partlast(i,j);% lastimage2最终加密后的图像
end
end
end
subplot(1,3,3),imshow(lastimage2),title('最终加密后的图像');
imwrite( lastimage2,'linacc.bmp','bmp');
e=cputime-t
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -