龙文国土局漳滨村新农村建设网站,学做面食最好的网站,html在网站开发中的应用,做seo要先做网站么这件事情的起因是这样的#xff0c;我需要研究一下各种图像置乱的算法。然后在知乎上找到了一篇关于Arnold变化的文章#xff0c;但是呢#xff0c;这个人实际上是卖资料#xff0c;代做大作业的。详细的代码根部不给你#xff0c;则给我气坏了#xff0c;必须要手动实现…这件事情的起因是这样的我需要研究一下各种图像置乱的算法。然后在知乎上找到了一篇关于Arnold变化的文章但是呢这个人实际上是卖资料代做大作业的。详细的代码根部不给你则给我气坏了必须要手动实现一下打击他卖资料的嚣张气焰。 文章目录 代码编写周期分析 简书上的一个作者写的还是相当不错的这是网址链接。
Arnold 变换是俄国数学家 Vladimir I. Arnold提出的一种变换一幅 N × N N ×N N×N 的数字图像的二维Arnold 变换定义为: [ x ′ y ′ ] [ a b c d ] n [ x y ] m o d N \left[\begin{array}{l} x^{\prime} \\ y^{\prime} \end{array}\right]\left[\begin{array}{ll} a b \\ c d \end{array}\right]^{n}\left[\begin{array}{l} x \\ y \end{array}\right] \bmod N [x′y′][acbd]n[xy]modN
注意 x x x y y y 是原图像的像素坐标 x ′ x x′ y ′ y y′ 是变换后的像素坐标。保证 ∣ a d − b c ∣ 1 |ad-bc|1 ∣ad−bc∣1如置换矩阵系数设为 a b 1 ab1 ab1 c 2 c2 c2 d 3 d3 d3置换次数 n 20 n20 n20则他们被当作密钥 key用于解密。Arnold 变换的图像类型只能是 N × N N\times N N×N 的图片。
我从网络上面下载了一朵花的图片如下 代码编写
close all;
%图像加密置乱
aimread(flower.png); %取预处理图像
aa(1:226,1:226,1:3); %截取成正方形
Ra(:,:,1); %取图像的R层像素
Ga(:,:,2); %取图像的G层像素
Ba(:,:,3); %取图像的B层像素
figure;
subplot(2,2,1);imshow(a);title(original);
subplot(2,2,2);imshow(R);title(R);
subplot(2,2,3);imshow(G);title(G);
subplot(2,2,4);imshow(B);title(B);%三个不同密钥
keyR10;keyG20;keyB30;aRarnold(R,keyR,1);aGarnold(G,keyG,1);aBarnold(B,keyB,1);%对各层用不同的密钥加密
figure;
subplot(2,2,1);imshow(aR);title(aR);%加密后的图像
subplot(2,2,2);imshow(aG);title(aG);
subplot(2,2,3);imshow(aB);title(aB);
aacat(3,aR,aG,aB); %各层加密后在合成彩色图像
subplot(2,2,4); imshow(aa); title( Permuted);%RGB图像加密后的结果
imwrite(aa,a_flower.bmp);%图像解密
Rarnold(aR,keyR,0);Garnold(aG,keyG,0);Barnold(aB,keyB,0);%对各层用不同的密钥加密
Ruint8(R);Guint8(G);Buint8(B);
figure;
subplot(2,2,1);imshow(R);title(R);
subplot(2,2,2);imshow(G);title(G);
subplot(2,2,3);imshow(B);title(B);
flowercat(3,R,G,B); %各层加密后在合成彩色图像
subplot(2,2,4); imshow(flower); title(恢复的图案);%RGB图像解密后的结果arnold.m 是一个单独的函数文件
function imgarnold(img,key,pon)
%img是原始图片
%Key是输入的密钥
%a,b是置乱矩阵里面的值
%pon表示正变换或者反变换
[h, w]size(img);
a2;b3;
img_new zeros(h,w); %[h, w]size(img)
Nh;if(pon)%正变换for i1:key %n为置乱轮数for y1:hfor x1:wxxmod((x-1)b*(y-1),N)1; %a,b可提前指定yymod(a*(x-1)(a*b1)*(y-1),N)1;img_new(yy,xx)img(y,x);endendimgimg_new;end
else%反变换for i1:keyfor y1:hfor x1:wxxmod((a*b1)*(x-1)-b*(y-1),N)1;yymod(-a*(x-1)(y-1),N)1 ;img_new(yy,xx)img(y,x);endendimgimg_new;end
end周期分析 我现在知道为什么了因为广义的 Arnold 算法根本没有周期性。 理论上下面的代码是可以计算周期的但是我跑到了 1 0 7 10^7 107 的数量级依然没有闭环。等以后如果弄明白了再来讲吧。
%计算Arnold变换的周期T可以利用一下MATLAB程序来实现。x 1; y 1;N 4; %N × N为128 ×128的图像
T 1;
t x; x x y; y 2*t3*y;
while x~ 1 || y~ 1T T 1;if x Nx mod ( x,N) ;endif y Ny mod ( y,N) ;endt x; x x y; y 2*t3*y;
endT %所得的T值即为Arnold变换的周期