suffer 发表于 2006-11-13 10:45

生命游戏置乱算法的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;

liwensheng 发表于 2006-11-13 21:09

不错,顶一下
页: [1]
查看完整版本: 生命游戏置乱算法的MATLAB实现