前言:本文原发表在新浪博客http://blog.sina.com.cn/s/blog_b27f71160101h5gi.html,现新浪博客将其搬家至CSDN,原新浪博客停止更新。
①申请搬家后,迟迟未能收到申请搬家的码
②再熟悉一下算法
③联系键盘打字
基于以上三点,遂将博文重新敲一遍。
Logistic混沌置乱加密:
这里再根据Logistic混沌进行另一种置乱:位置置乱。
什么是位置置乱,顾名思义就是把图像中某一像素点的位置,移动到另一目的点。我们知道这个目的点当然是越随机越好。这个过程,所有像素的灰度值都没有改变,只是进行了位置的置乱,所以其直方图不会发生改变。下面我们就来进行位置置乱。
如上面讲的一样:图像处理之Logistic混沌序列加密假如一幅M*N大小的图片,我们Logistic迭代了M*N次,得到M*N个(0,1)之间的浮点数序列(记做序列A),将序列A中的每个元素乘以M*N,也就是说将A扩展到了(0,M*N)的浮点数了,然后我们对其取整数得到(0,M*N)之间的整数序列B,好的,貌似很多工作都做完了,下面就可以进行加密了。
我们要用这个序列来产生随机坐标(也就是目的点),因此将B中每一个元素B(i)(i=1,2,…,M*N),随机坐标表示为F(x,y)(x:行 y:列):
列坐标:y=B(i)/N;
行坐标:x=B(i)%N;
这样,我们就得到了M*N个随机坐标点,真相大白了。待加密图像中的第一个点的灰度值搬移到第一个随机坐标中的,一次类推,当所有灰度都经过移动之后,置乱结束,便完成了一次置乱加密。
如果你仔细读这篇文章并想了,你会觉得存在一个问题:按道理说这(0,M*N)个值肯定是没有重复的,但是由于计算机精度和类型转化,所以肯定存在重复的值,也就是随机坐标点存在重复的!!!这肯定是不行的,那么怎么避免呢?我们一般这样来处理:在迭代过程中,每迭代一次,产生一个随机坐标点,判断这个坐标点有没有被占用,若没有则打一个占用标志,若已被占用,则放弃该点继续迭代,直到找到没有没占用的坐标点,如此下去,直到找到M*N个不重复的坐标点。
当然还需要注意处理好坐标边界问题。
这里就不贴代码了,大家自己写一下。
加密前 加密后