图像处理之Logistic混沌序列加密

前言:本文原发表在新浪博客,现新浪博客将其搬家至CSDN,原新浪博客停止更新。

①申请搬家后,迟迟未能收到申请搬家的码

②再熟悉一下算法

③联系键盘打字

基于以上三点,遂将博文重新敲一遍。

Logistic混沌置乱,先不说有多复杂,其实很简单。

Logistic函数是源于一个人口统计的动力学系统,其系统方程形式如下:

X(k+1) = u * X(k) * [1 – X(k)],(k=0,1,…,n)

先不用管这个方程是怎么得出来的,觉得不舒服的话自己百度去。可以看出这个方程是非线性的,迭代的形式。要使用的话,,我们需要知道两个东西:

①初值:X(0)

②参数:u

为什么这个方程可以称作混沌呢?它什么时候是一个混沌系统呢?这个也是有条件的:

< 1

u <=4

当满足上述两个条件时,Logistic函数工作于混沌状态。这两个条件是怎么来的请百度,我们这里只说算法和实现。什么是混沌状态:顾名思义就是一种无序的、不可预测的、混乱的、摸不到头、摸不到尾的状态。混沌状态时会出现什么现象,我们以下面的参数为例:

①X(0) = 0.1

②u = 4

ni=1,2,…,n)的取值是在(0,1)之间的——这是一个很好地特性,就像图像灰度值是在(0,255)之间一样。那么我们把这个一维序列归一化到(0,255)之间得到序列B。

再来看加密过程。对于一幅M*N大小的图像(暂且称为Picture),我们需要产生一个同样大小的矩阵来对其进行加密。如此说来,只需要迭代M*N次得到序列A,再转成序列B,此时序列B是一维的,将其转化成M*N的二维矩阵(暂且称为Fuck)。因此,用Fuck与Picutre进行异或,便可得到一幅新的图像,称作Rod,如此便完成了一次图像加密,加密后的图像为Rod。

这样我们手中的秘钥是:u,X(0)

此种加密方式称作序列加密,可以看出这种加密方式改变了下像素的灰度(直方图变了),没有改变位置。解密同样道理:Picture = Rod⊕Fuck。

代码如下:

%利用Logistic混沌映射,对灰度图像进行序列加密function v=lock_logistic_gray(picture,x0,u)[M,N]=size(picture);x=x0;%迭代500次,达到充分混沌状态for i=1:500x=u*x*(1-x);end%产生一维混沌加密序列A=zeros(1,M*N);A(1)=x;for i=1:M*N-1A(i+1)=u*A(i)*(1-A(i));end%归一化序列B=uint8(255*A);%转化为二维混沌加密序列Fuck=reshape(B,M,N);Rod=bitxor(picture,Fuck);%异或操作加密v=Rod;figure;imshow([picture,v]);%完

效果图:

加密前 加密后

加密前直方图

加密后直方图

以后我会去到很多很繁华或苍凉,

图像处理之Logistic混沌序列加密

相关文章:

你感兴趣的文章:

标签云: