首页 > 代码库 > matlab练习程序(Arnold图像置乱)
matlab练习程序(Arnold图像置乱)
自从上次写了Hilbert图像置乱之后,就对图像置乱研究了一下,发现这里面也是有很多置乱算法的。
Arnold也算一种比较主要的置乱算法,算法由以下变换公式产生:
这里a和b是参数,n是迭代次数,N是图像的高或宽。
有了正变换公式,我们还需要反变换公式,正好我最近在学Mathematica,反变换公式就是用这个软件求的。
公式如下:
两个变换矩阵正好是求逆的关系吧,手算也出来了,不过顺便熟悉一下Mathematica,何乐不为呢。
处理结果如下:
原图:
置乱后:
恢复后:
matlab代码如下:
clear all;close all;clc;img=imread(‘lena.jpg‘);imshow(img,[])[h w]=size(img);%置乱与复原的共同参数n=10;a=3;b=5;N=h;%置乱imgn=zeros(h,w);for i=1:n for y=1:h for x=1:w xx=mod((x-1)+b*(y-1),N)+1; yy=mod(a*(x-1)+(a*b+1)*(y-1),N)+1; imgn(yy,xx)=img(y,x); end end img=imgn;endfigure;imshow(imgn,[])%复原img=imgn;for i=1:n for y=1:h for x=1:w xx=mod((a*b+1)*(x-1)-b*(y-1),N)+1; yy=mod(-a*(x-1)+(y-1),N)+1 ; imgn(yy,xx)=img(y,x); end end img=imgn;endfigureimshow(imgn,[])
恢复后图像和原图是一样的。
matlab练习程序(Arnold图像置乱)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。