MATLAB 图像加密处理(二)
在加密过程中,需要产生加密密钥,对于密钥,采用混沌序列的方式生成。
一、对于二值图像
二值图像中所有的像素点,只有两个值,即0、1,或者是其他取值0、255,生成公式采用下面的公式:
当混沌序列的数值大于零时,取值唯一,当混沌序列的值小于等于零时,取值为零,当然,等于号的位置任意。其实,该函数可以随意定义,当x的取值由大于零的值分界,其中黑色点较多,反之,则是白色点的值较多。
生成二值混沌图像的代码如下:
%% 生成二值混沌图像
n=512;
m=512;
x=zeros(m,n);
x(1)=0.98;
for i=2:n*m
x(i)=1-2*x(i-1)*x(i-1);
end
for i=1:n*m
if x(i)<=0
x(i)=0;
else x(i)>0
x(i)=1;
end
end
imshow(x);
生成图片如下:
二、对于灰度图像
灰度图像中的所有的像素值在0~255之间,生成灰度图像的重点是将[-1,1]之间的混沌序列映射到[0,225]之间,采用的办法为取余法。
%GOI=mod(OI*1000000000,256)%mod(a,b)函数返回a/b的余数
其中OI为混沌序列,GOI为灰度序列。
生成灰度图像的代码如下所示:
%% 生成灰度混沌系统
%将混沌系统中的数值乘以一个很大的数,并对256取余
%GOI=mod(OI*1000000000,256)%mod(a,b)函数返回a/b的余数
n=512;
m=512;
x=zeros(m,n);
x(1)=0.98;
for i=2:n*m
x(i)=1-2*x(i-1)*x(i-1);
end
for i=1:n*m
x(i)=mod(round(x(i)*999998391829),256);
end
imshow(x,[]);
三、对于彩色图像
在MATLAB中,彩色图像以三维的矩阵的形式存在,分为R、G、B三层。生产方法,将三个灰度矩阵链接起来就可以了。
矩阵链接方法:
%cat(n,a,b)函数
%当n=1时,表示按列将ab链接到一起
%当n=2时,按行链接到一起
%当n=3是,按更高维将ab链接到一起
生成彩色图像代码如下:
%% 生成彩色混沌系统
%生成r空间
r=zeros(512,512);
r(1)=0.98;
for i=2:512*512
r(i)=1-2*r(i-1)*r(i-1);
end
for i=1:512*512
r(i)=mod(round(r(i)*98888888888),256);
end
%生成g空间
g=zeros(512,512);
g(1)=0.98001;
for i=2:512*512
g(i)=1-2*g(i-1)*g(i-1);
end
for i=1:512*512
g(i)=mod(round(g(i)*98888888888),256);
end
%生成b空间
b=zeros(512,512);
b(1)=0.9700001839;
for i=2:512*512
b(i)=1-2*b(i-1)*b(i-1);
end
for i=1:512*512
b(i)=mod(round(b(i)*98888888888),256);
end
hu=zeros(512,512,3);
hu=cat(3,r,g,b);
imshow(uint8(hu));%将hu转化为八位无符号,或者归一化
生成图像如下: