Arnold变换

 Arnold变换是一种常用的图像置乱技术,Arnold变换的定义如下:
    对任意N*N矩阵(所有元素都相同的矩阵除外),设i,j为矩阵元素原始下标,经过Arnold变换后新下标为i',j',且满足下式:
    i'=(i+j)mod N
    j'=(i+2j)mod N
    i,j:0,1,.........N-1
    Arnold变换具有周期性,即经过若干次变换后,矩阵回到最初状态,且周期T与N的大小有关。理论基础没找到,但可以用程序来进行计算,可以设i,j从一个点出发,不断使用以上变换,再次回到这个起点时,经历的变换次数就是周期。

Matlab程序:

x=1;y=1;
T=1;m=90;    %T为要计算的周期
t=x;x=x+y;y=t+2*y;
while x~=1&y~=1;
    T=T+1;
    if x>m
        x=mod(x,m);
    end
    if y>m
        y=mod(y,m);
    end
    t=x;x=x+y;y=t+2*y;
end

图像的置乱算法(来源于网落共享资源):

clc
clear all;
iTimes=10;     %置乱次数

% 读入水印图像
file_name='d://mark.bmp';
message=double(imread(file_name));

%水印图像矩阵的行数与列数
Mm=size(message,1);              
Nm=size(message,2);      

%对水印图像进行arnold置乱
if Mm~=Nm
  error('水印矩阵必须为方阵');
end
if Mm~=256
  error('必须为90*90大小,或者修改置乱次数');
end

tempImg=message; %图像矩阵赋给tempImg
for n=1:iTimes   %置乱次数
  for u=1:Mm
    for v=1:Nm
      temp=tempImg(u,v);
      ax=mod((u-1)+(v-1),Mm)+1;   %新像素行位置
      ay=mod((u-1)+2*(v-1),Nm)+1;   %新像素列位置
      outImg(ax,ay)=temp;
    end
  end
tempImg=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);     
for n=1:iTimes1 % 次数
  for u=1:Mo
    for v=1:No
      temp1=tempImg(u,v);
      bx=mod((u-1)+(v-1),Mo)+1;
      by=mod((u-1)+2*(v-1),No)+1;
      outImg1(bx,by)=temp1;
    end
  end
tempImg=outImg1;
end
message=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算法有一定的理解。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值