自从上次写了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; end figure; 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; end figure imshow(imgn,[])
原文地址:https://www.cnblogs.com/tiandsp/p/3954550.html