再接再厲,發個Arnold置亂變換的matlab代碼2008-05-05 21:30以下是代碼,自已看吧。。希望對于初學者有所幫助
function Arnold(Image,Frequency,crypt)
%圖像數值矩陣Arnold轉換函數
matlab怎么畫函數圖像?%輸入參數
% Image: 待加密(待解密)圖像文件名(注意寫格式后綴),只能為二維
% Frequency: 圖像需要變換迭的次數
% crypt 0~加密;1~解密
matlab函數大全?%輸出參數
% M: 轉換后圖像數據矩陣
% 輸出由M對應的圖像文件
if nargin<3
matlab的norm函數,disp('請按程序的輸入參數格式輸入參數!!!');
return;
end
if crypt~=0 & crypt~=1
norminv函數matlab,disp('encrypt 必須為0或1!');
end
%將Q賦值給M,計算Q的大小
Q=imread(Image);
matlab partialcorr,M = Q ;
Size_Q = size(Q);
%如果不是二維或三維數組,則不處理,返回
if (length(Size_Q) <= 2)
matlab中rectangle函數、if Size_Q(1) ~= Size_Q(2)
disp('不是方陣,不能Arnold轉換');
return
end
matlab中normrnd函數,else
disp('不是二維數組,不進行Arnold變換');
return
end
matlab中disp函數用法。%------------------------------------------
%Arnold轉換
n = 0;
K = Size_Q(1);
M1_t = Q;
M2_t = Q;
if crypt==1 %解密
Frequency=ArnoldPeriod( Size_Q(1) )-Frequency;
end
for s = 1:Frequency
n = n + 1;
if mod(n,2) == 0
for i = 1:K
for j = 1:K
c = M2_t(i,j);
M1_t(mod(i+j-2,K)+1,mod(i+2*j-3,K)+1) = c;
end
end
else
for i = 1:K
for j = 1:K
c = M1_t(i,j);
M2_t(mod(i+j-2,K)+1,mod(i+2*j-3,K)+1) = c;
end
end
end
end
if mod(Frequency,2) == 0
M = M1_t;
else
M = M2_t;
end
%------------------------------------------
%imwrite( double(M)/255,strcat( 'Arnold_',num2str(Frequency),'_',Image ),'bmp' );
imshow(M);
function Period=ArnoldPeriod(N)
% 求周期
if ( N<2 )
Period=0;
return;
end
n=1;
x=1;
y=1;
while n~=0
xn=x+y;
yn=x+2*y;
if ( mod(xn,N)==1 && mod(yn,N)==1 )
Period=n;
return;
end
x=mod(xn,N);
y=mod(yn,N);
n=n+1;
end
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态