matlab 简单元胞自动机,灰度图像显示,可用于动态过程,粒子简单运动等

在这篇文章里,我将仔细拆分各个实现过程,不牵扯复杂的定义。

clc
clear
close all
cell=uint8(zeros(256,256));
for i=1:256*256
    cell(i)=uint8(randi(256));
end

imshow(cell)

创建一个矩阵,uint8类型,其中uint8()用于类型转换,否则imshow无法识别

之所以这样是为了可以直接绘制灰度图;

可以写的更简洁:

cell=uint8(randi(256,256,256));
imshow(cell)

这张图是随机生成的,杂乱无序,可以设定一定的生成条件,让图片变得平滑;

待定

这个矩阵搭完,就可以开始设定条件让它动起来,像一个自动机器一样;

cell中各个成员的值不发生改变

我们来看怎么去写这些条件

先让这些成员动起来,每成员在一帧画面内只能移动一格,那就出现一个问题,地盘被挤满了,无法挪动,那我们先随机把一部分地方变成空地。

cell(randi(255,1,128*256))=255;

下面是全部实现代码,后续会继续补充,点的移动趋势,点数量和自身值受外力因素的变化

clc
clear
close all
cell=uint8(zeros(256,256));
for i=1:256*256
    cell(i)=uint8(randi([0,255]));
end,
cell(randi(256*256,1,256*256))=255;

imshow(cell)


cell2=uint8(zeros(258,258));
cell2(2:257,2:257)=cell;
D=zeros(3,3);
cycle=256;
flag1=0;
imshow(cell2)
while(cycle)
cycle=cycle-1  ;
for i=2:257
    for j=2:257
        tmp=cell2(i,j);
        %创建一个滑块方格,代表点周围可到达点
                for p=i-1:i+1
                    for q=j-1:j+1
                        if cell2(p,q)==255
                            D(p-i+2,q-j+2)=0; 
                        else
                            D(p-i+2,q-j+2)=1;
                        end
                    end         
                end
        if D(2,2)==0%如果点本身是空的,则推出
            continue
        end
        
       [raw,col]=find(D==0);
           if(isempty(raw))
             continue
           end
        t=randi(length(raw));
        cell2(i,j)=255;       
        cell2(raw(t)-2+i,col(t)-2+j)=tmp;
    end
end
figure(2)
imshow(cell2)
end

效果如下,目前这个效果,可以通过添加场等,模拟一些物理过程

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值