基于Arnold置乱的数字水印图像加密算法的设计,基于Matlab语言编程,完成Arnold置乱算法,并用Matlab GUI工
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Arnold置乱的数字水印图像加密算法的设计,基于Matlab语言编程,完成Arnold置乱算法,并用Matlab GUI工相关的知识,希望对你有一定的参考价值。
参考技术A clcclear all;
iTimes=10; %置乱次数
% 读入水印图像
file_name='3232水印.bmp';
message=double(imread(file_name));
%水印图像矩阵的行数与列数
Mm=size(message,1);
Nm=size(message,2);
%对水印图像进行arnold置乱
if Mm~=Nm
error('水印矩阵必须为方阵');
end
if Mm~=90
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=60-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('原始水印')
gui 自己学学吧 matlab中文论坛 gui板块
图像加密基于matlab仿射变换数字图象置乱含Matlab源码 1171期
一、简介
基于matlab仿射变换数字图象置乱
二、源代码
function chengxu()
A=imread('lena.png');
figure,imshow(A);
title('原图像(256*256)');
for K=1:16 %置乱16次
figure,imshow(B);
title(['置乱',num2str(K),'次后的图像'])
A=B;
end
end
function B=zhiluan(A)
%此函数将图像A置乱,输出置乱后的图像B
for x=1:N
for y=1:N
if x<y %计算(x,y)点映射到B图像的坐标(x1,y1)
x1=x-y+N+1;
y1=-x+N+1;
else
x1=x-y+1;
y1=-x+N+1;
end
end
end
三、运行结果
四、备注
版本:2014a
以上是关于基于Arnold置乱的数字水印图像加密算法的设计,基于Matlab语言编程,完成Arnold置乱算法,并用Matlab GUI工的主要内容,如果未能解决你的问题,请参考以下文章
图像加密基于matlab GUI Arnold置乱图像加密解密含Matlab源码 1239期