混沌系统加密图像(通过行和列上进行循环移位实现)
2012-03-04 20:41
399 查看
function chaoticDemoForRowAndColumnChange %应用混沌序列对数字图像的行和列置乱 %针对每一行循环若干次次,由混沌序列控制每一行循环的位数 % 同样需要针对每一列循环若干次 %程序设计:李立宗 %2012年3月3日 % http://blog.csdn.net/superdont % lilizong【at】Gmail clear; clc; [filename pathname]=uigetfile('*.bmp;*.tiff;*.tif', '读入图像'); os=[pathname filename]; %os原始图像的路径 o=imread(os); % figure,imshow(o); %计算原始图像的大小 [m n]=size(o); % 建立两个数组一个控制行上的循环移位,另外一个控制列上的循环移位 %%%%%%%%%%%%11111111行循环移位代码1111111111111111%%%%%%%%%%%%%%%%%% % 首先建立控制行方向上循环移位的数组 keyRow=5; %列方向上循环的周期 rowChaotic=zeros(keyRow,m); %注意,行上的循环需要的次数是每行一次,因此需要m次 bitRowChaotic=zeros(keyRow,m); rowChaotic(1)=0.539; for i=2:keyRow*m rowChaotic(i)=1-2*rowChaotic(i-1)*rowChaotic(i-1); bitRowChaotic(i)=rem(round(rowChaotic(i)*100000),n); %bl内元素具体控制循环的位数,不会大于列数n,故次数选择n即可 end %首先,在行方向上加密图像 oRowSec=o; for rtimes=1:keyRow %控制整体要对所有行进行位循环的次数 for i=1:m %控制位循环的行号,具体对哪一行进行位循环 % i oRowSec(i,:)=circshift(oRowSec(i,:),[0 bitRowChaotic(rtimes,i)]); % circshift函数中第二个参数中,有两个参数,一个控制行,一个控制列 % 现在只要对列操作,故将其设置为[0 bl(i)]. end end %%%%%%%%%%%%11111111行循环移位代码1111111111111111%%%%%%%%%%%%%%%%%% % %%%%%%%%2222222测试代码,看看能不能通过单独的行测试2222222222%%%%%%%%%%%%%%%%%% % oResultForRow=oRowSec; % for rtimes=1:keyRow %控制整体要对所有行进行位循环的次数 % for i=1:m % oResultForRow(i,:)=circshift(oResultForRow(i,:),[0 n-bitRowChaotic(rtimes,i)]); % end % end % figure,imshow(o); % figure,imshow(oRowSec,[]); % figure,imshow(oResultForRow,[]); % %%%%%%%%2222222测试代码,看看能不能通过单独的行测试2222222222%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%3333333333333列上的循环移位代码33333333333%%%%%%%%%%%%%%%%%% % 其次,建立控制列方向上循环移位的数组 keyColumn=5; %列方向上循环的周期 columnChaotic=zeros(keyColumn,n); %注意,列上的移位需要的次数是每列一次,共有n列,因此需要n次 bitColumnChaotic=zeros(keyColumn,n); %用于存储量化后的数列 columnChaotic(1)=0.5399; for i=2:keyColumn*n columnChaotic(i)=1-2*columnChaotic(i-1)*columnChaotic(i-1); bitColumnChaotic(i)=rem(round(columnChaotic(i)*100000),m); %bl内元素具体控制循环的位数,不会大于行数m,故次数选择m即可 end %在列方向上加密图像 % oRowSec=o; oRowAndColumnSec=oRowSec; for rtimes=1:keyColumn %控制整体要对所有列进行位循环的次数 for i=1:n %控制位循环的列号,具体对哪一列进行位循环 % i oRowAndColumnSec(:,i)=circshift(oRowAndColumnSec(:,i),bitColumnChaotic(rtimes,i)); % circshift函数中第二个参数中,有两个参数,一个控制行,一个控制列 % 现在只要对列操作,故将其设置为[0 bl(i)]. end end %%%%%%%%%%%%%%%%%3333333333333列上的循环移位代码33333333333%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%444444列上的恢复代码,看看能不能通过单独的列测试4444444444%%%%%%%%%%% % oResultForColumn=oRowAndColumnSec; % for rtimes=1:keyColumn %控制整体要对所有行进行位循环的次数 % for i=1:n % oResultForColumn(:,i)=circshift(oResultForColumn(:,i),m-bitColumnChaotic(rtimes,i)); % end % end % figure,imshow(o); % figure,imshow(oRowAndColumnSec,[]); % figure,imshow(oResultForColumn,[]); %%%%%%%%%%%%%%%%444444列上的恢复代码,看看能不能通过单独的列测试4444444444%%%%%%%%%%% %开始解密图像 % 首先在列上解密 oResultForColumn=oRowAndColumnSec; for rtimes=1:keyColumn %控制整体要对所有行进行位循环的次数 for i=1:n oResultForColumn(:,i)=circshift(oResultForColumn(:,i),m-bitColumnChaotic(rtimes,i)); end end %其次,解密行加密的图像,在行上解密 oResultForRow=oResultForColumn; for rtimes=1:keyRow %控制整体要对所有行进行位循环的次数 for i=1:m oResultForRow(i,:)=circshift(oResultForRow(i,:),[0 n-bitRowChaotic(rtimes,i)]); end end figure, subplot(1,3,1),imshow(o),title('原始图像'); subplot(1,3,2),imshow(oRowAndColumnSec,[]),title('加密图像'); subplot(1,3,3),imshow(oResultForRow,[]),title('解密图像'); %因为放在一个窗口内图像比较小,不便于测试,如下代码用于测试。 %figure,imshow(o); %figure,imshow(oRowAndColumnSec,[]); %figure,imshow(oResultForRow,[]);
相关文章推荐
- 混沌系统对图像的每个像素位二值进行循环移位
- 通过编写rcS文件实现系统启动后进行一系列初始设置
- 【转载】通过UIPageControl+UIScrollView实现图片循环轮播(原理解释的很详细)
- ROS学习笔记(2):在ROS中使用OpenCV进行简单的图像处理---代码实现篇
- 通过JS、JQ,实现对json数据调取,并循环展示到页面
- Android通过手势实现图像拖拽功能
- 利用最大熵进行阈值分割从而实现灰度图像的二值化的原理概要及OpenCV代码
- 小米盒子增强版ROOT以及实现通过wifi进行adb
- 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
- 如何使用位运算实现循环移位?
- 通过游标简单实现循环 定时任务
- 通过JS、JQ,实现对json数据调取,并循环展示到页面
- SVM+HOG对图像进行多分类(OpenCV实现)
- 通过Spring实现对自定义注解属性进行资源注入
- OpenCV3.0 Examples学习笔记(13)-kmeans.cpp-kmeans函数实现对图像位置进行聚类
- 通过领域滤波(卷积)来实现图像滤镜效果
- qt-5.6.0 移植之实现板子与ubuntu主机通过网络进行文件传输
- Android 通过WebService进行网络编程,使用工具类轻松实现
- Java用Smack实现简单地通过OpenFire与其他人进行聊天
- javascript实现图像循环明暗变化的方法