MATLAB 如何创建n维Arnold变换矩阵 在matlab中怎样把一个n维矩阵转换成一个有n*n个元素的...

matlab\u4e2d\u600e\u6837\u5c06n\u7ef4\u5411\u91cf\u66fe\u6210n*n\u7ef4\u77e9\u9635

repmat

clear;clc
A=reshape(1:9,3,3)
[m,n]=size(A);t=0;
B=zeros(1,m+n);
for p=2:(m+n)
for q=max(1,p-n):min(m,p-1)
t=t+1;B(t)=A(q,p-q);
end
end
B

理论基础没找到,但可以用程序来进行计算,可以设i,j从一个点出发,不断使用以上变换,再次回到这个起点时,经历的变换次数就是周期。Matlab程序:x=1;y=1;T=1;m=90;%T为要计算的周期t=x;x=x+y;y=t+2*y;whilex~=1&y~=1;T=T+1;ifxmx=mod(x,m);endifymy=mod(y,m);endt=x;x=x+y;y=t+2*y;end图像的置乱算法(来源于网落共享资源):clcclearall;iTimes=10;%置乱次数%读入水印图像file_name='d:\\mark.bmp';message=double(imread(file_name));%水印图像矩阵的行数与列数Mm=size(message,1);Nm=size(message,2);%对水印图像进行arnold置乱ifMm~=Nmerror('水印矩阵必须为方阵');endifMm~=256error('必须为90*90大小,或者修改置乱次数');endtempImg=message;%图像矩阵赋给tempImgforn=1:iTimes%置乱次数foru=1:Mmforv=1:Nmtemp=tempImg(u,v);ax=mod((u-1)+(v-1),Mm)+1;%新像素行位置ay=mod((u-1)+2*(v-1),Nm)+1;%新像素列位置outImg(ax,ay)=temp;endendtempImg=outImg;end%显示水印,嵌入水印图像与原始图像figure(1)subplot(1,3,1);imshow(message,[]);title('原始水印');subplot(1,3,2)imshow(outImg,[]);title('置乱水印');%arnold反置乱message_arnold=tempImg;iTimes1=192-iTimes%置乱后水印图像矩阵的行数与列数Mo=size(outImg,1);No=size(outImg,2);forn=1:iTimes1%次数foru=1:Moforv=1:Notemp1=tempImg(u,v);bx=mod((u-1)+(v-1),Mo)+1;by=mod((u-1)+2*(v-1),No)+1;outImg1(bx,by)=temp1;endendtempImg=outImg1;endmessage=outImg1;%显示反置乱后水印%figure(3)%subplot(1,3,1);%imshow(message_arnold,[]);%title('提取的置乱水印');subplot(1,3,3);imshow(message,[]);title('反置乱(恢复)水印');%subplot(1,3,3);%imshow(orig_watermark,[])%title('原始水印');希望以上程序能给大家对Arnold算法有一定的理解。

扩展阅读:matlab app designer ... matlab页面如何回到初始 ... 如何创建符号变量matlab ... matlab如何创建子系统 ... 基于matlab的人脸识别系统 ... matlab如何创建三维数组 ... matlab代码生成器 ... matlab如何创建列表 ... matlab如何创建一个文件 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网