生命游戏置乱算法的MATLAB实现
生命游戏置乱算法的MATLAB实现,用于置乱图像function f=Lifegame(x,t)
=size(x);
orgData=x;%每次叠代的初始数据
resData=zeros(x_r,x_c);%每次叠代的结果数据
tempData=zeros(x_r,x_c);%记录曾经存活过的点,即已被取走的点
vex=zeros(1,x_r*x_c);%返回的存有置换位置的向量
point=1;%向量当前位置指针
times=t;%times记录迭代次数
for time=1:times
for nRows=2:x_r-1
for nCols=2:x_c-1
%计算每一个细胞周围的活的细胞数
nCount=orgData(nRows-1,nCols-1)+orgData(nRows-1,nCols)...
+orgData(nRows-1,nCols+1)+orgData(nRows,nCols-1)...
+orgData(nRows,nCols+1)+orgData(nRows+1,nCols-1)...
+orgData(nRows+1,nCols)+orgData(nRows+1,nCols+1);
switch(nCount)
case 3
resData(nRows,nCols)=1;%周围有3个活细胞,该细胞为生,赋1
case 2
resData(nRows,nCols)=orgData(nRows,nCols);%周围有2个活细胞,该细胞不变
otherwise
resData(nRows,nCols)=0;%其它情况下,细胞为死,赋0
end
end
end
%将新产生的活细胞对应的点取走,并更新tempData中的数据
for ii=1:x_r
for jj=1:x_c
if resData(ii,jj)==1 & tempData(ii,jj)==0
vex(1,point)=(ii-1)*x_c+jj;
point=point+1;
tempData(ii,jj)=1;
end
end
end
orgData=resData;%每次叠代的结果作为下次叠代的输入
end
%将一直未曾活过的细胞取走
for ii=1:x_r
for jj=1:x_c
if tempData(ii,jj)==0
vex(1,point)=(ii-1)*x_c+jj;
point=point+1;
end
end
end
%返回结果向量
f=vex; 不错,顶一下
页:
[1]