马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
生命游戏置乱算法的MATLAB实现,用于置乱图像
- function f=Lifegame(x,t)
- [x_r x_c n]=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;
复制代码 |