PDA

查看完整版本 : [求助]我做的一个Arnold置乱程序有以下错误,请哪位指教一下!谢谢!


jixiaoning
2008-09-13, 09:15
%Arnold变换改进
function Y=ArnoldTranslation(M,X)
clc;
clear all;
%Arnold变换改进
clock
X='E:\论文\我的论文集\test\lennagray.bmp';
% ste_cover=imread(X);
% ste_cover=double(ste_cover);
% [M,N]=size(X);
M=256;
for i=1:M
m(:,i)=(i-1)*ones(M,1);
end %构造每列相同,按列递增的矩阵
m1=cat(3,m',m);%转置后,每行相同,按行递增
n=imread(X);
m1(:,:,3)=n;
m1=double(m1);
for j=1:M
for i=1:M
m2(:,i,j)=[1 1;1 2]*[m1(i,j,1);m1(i,j,2)];
%Arnold变换定义:[x';y']=N*[x;y] (还未取模)
end
end
%m2维数:2*M*M
m3=mod(m2,M);%取模
%变维
for j=1:2
for i=1:M
m4(:,i,j)=m3(j,:,i);
end
end
%m3维数:M*M*2
M4(:,:,3)=m1(:,:,3); %与图层关联
%第一层坐标调整(列移动),第二,三随之变换
m5=zeros(M,M,3);
for j=1:M
m5(j:M,j,:)=m4(1:M+1-j,j,:);
m5(1:j-1,j,:)=m4(M+2-j:M,j,:);
end
%第二层坐标调整,第三层随之变化
m6=zeros(M,M,3);
for j=1:M
m6(j,j:M,2:3)=m5(j,1:M+1-j,2:3);
m6(j,1:j-1,2:3)=m5(j,M+2-j:M,2:3);
end
%保存,显示
m7=uint8(m6(:,:,3));
imwrite(m7,'E:\论文\我的论文集\test\arnold1.bmp');
subplot(2,1,1);
imshow(n,[]);
title('原始图像');
subplot(2,1,2);
imshow(m7,[]);
title('Arnold变换');
clock



ans =

1.0e+003 *

2.0020 0.0090 0.0130 0.0080 0.0370 0.0054

??? Subscripted assignment dimension mismatch.

Error in ==> C:\MATLAB6p5\work\ArnoldTranslation.m
On line 38 ==> m5(j:M,j,:)=m4(1:M+1-j,j,:);

>>

xiaolei
2009-05-06, 14:47
呵呵,你好,不知道你的这个变换程序现在还有问题么?因为我再做毕设,要用到这段程序,所以想再这里摘录你的,我对matlab一窍不通:(,所以想问问你这个程序能通过么?

gesang
2009-05-07, 10:51
我的论文也是这方面的啊 呵呵 我也不会 汗:(

yhcode
2009-05-07, 12:11
单步运动到第38行或断点运行到38行,看看运行前等式两端的维数是否匹配