混沌系统加密图像(通过行和列上进行循环移位实现)

网友投稿 253 2022-11-04


混沌系统加密图像(通过行和列上进行循环移位实现)

function chaoticDemoForRowAndColumnChange%应用混沌序列对数字图像的行和列置乱%针对每一行循环若干次次,由混沌序列控制每一行循环的位数% 同样需要针对每一列循环若干次%程序设计:李立宗%2012年3月3日% lilizong【at】Gmailclear;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)]. endend%%%%%%%%%%%%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)]. endend%%%%%%%%%%%%%%%%%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)); endend%其次,解密行加密的图像,在行上解密oResultForRow=oResultForColumn;for rtimes=1:keyRow %控制整体要对所有行进行位循环的次数 for i=1:m oResultForRow(i,:)=circshift(oResultForRow(i,:),[0 n-bitRowChaotic(rtimes,i)]); endendfigure,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,[]);


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何使用Playwright对Java API实现自动视觉测试
下一篇:网站的伸缩性架构
相关文章

 发表评论

暂时没有评论,来抢沙发吧~