matlab:C语言逻辑实现Arnold变换图像置乱编程。
代码:
close all;
clear all;
clc;
data=imread('E:\matlabCX\图片\7.jpg');
[m,n,r]=size(data);
if r>1
data1=rgb2gray(data);
else
data1=data;
end
%data1=imresize(data1,[256 256]);
data1=data(1:m,1:m);
[m,n]=size(data1);
figure(1);
imshow(data1);
title('原图像');
data1=double(data1);
%置乱与复原的共同参数
n1=10;
a=3;
b=5;
N=m;
%置乱
imgn=zeros(m,n);
for i=1:n1
for y=1:m
for x=1:n
xx=mod((x-1)+b*(y-1),N)+1;
yy=mod(a*(x-1)+(a*b+1)*(y-1),N)+1;
imgn(yy,xx)=data1(y,x);
end
end
data1=imgn;
end
figure;
imshow(imgn,[])
%复原
img=imgn;
for i=1:n1
for y=1:m
for x=1:n
xx=mod((a*b+1)*(x-1)-b*(y-1),N)+1;
yy=mod(-a*(x-1)+(y-1),N)+1 ;
imgn(yy,xx)=data1(y,x);
end
end
data1=imgn;
end
figure
imshow(imgn,[])
结果: