Cellular Automata have proved fertile research for at least 50 years, providing models for everything ranging from crystal growth to fluid dynamics. Discrete rules are applied at each time step to evolve a particular cellular state; ordered patterns emerge from random initial configurations. The example given here using the connected components labeling (CCL) algorithm demonstrates how topology also can give rise to order from randomness.
![]() |
![]() |
CCL in OCTAVE:
lab=1; freq=1; x=0; y=0;
% main loop(s)
for i=2:c-1
for j=2:d-1
if ( a(i,j)!=0 & label(i,j)==0)
x=i;
y=j;
label(i,j)=lab;
while (x!=1) & (y!=1) & (x!=c) & (y!=d)
[mm,x,nn,y]=pop_s(x,y);
if (a(mm-1,nn-1)==1 && label(mm-1,nn-1)==0 )
[x,y]=push_s(mm-1,x,nn-1,y);
label(mm-1,nn-1)=lab;
freq(lab)++;
end
if (a(mm-1,nn)==1 && label(mm-1,nn)==0)
[x,y]=push_s(mm-1,x,nn,y);
label(mm-1,nn)=lab;
freq(lab)++;
end
if (a(mm-1,nn+1)==1 && label(mm-1,nn+1)==0)
[x,y]=push_s(mm-1,x,nn+1,y);
label(mm-1,nn+1)=lab;
freq(lab)++;
end
if (a(mm,nn-1)==1 && label(mm,nn-1)==0)
[x,y]=push_s(mm,x,nn-1,y);
label(mm,nn-1)=lab;
freq(lab)++;
end
if (a(mm,nn+1)==1 && label(mm,nn+1)==0)
[x,y]=push_s(mm,x,nn+1,y);
label(mm,nn+1)=lab;
freq(lab)++;
end
if (a(mm+1,nn-1)==1 && label(mm+1,nn-1)==0)
[x,y]=push_s(mm+1,x,nn-1,y);
label(mm+1,nn-1)=lab;
freq(lab)++;
end
if (a(mm+1,nn)==1 && label(mm+1,nn)==0)
[x,y]=push_s(mm+1,x,nn,y);
label(mm+1,nn)=lab;
freq(lab)++;
end
if (a(mm+1,nn+1)==1 && label(mm+1,nn+1)==0)
[x,y]=push_s(mm+1,x,nn+1,y);
label(mm+1,nn+1)=lab;
freq(lab)++;
end
end %endwhile
lab++;
freq=[freq, 1];
end %endif
end
end


Posted by bbrouwer