【元胞自动机】基于元胞自动机实现艺术图像处理附matlab代码

简介: 【元胞自动机】基于元胞自动机实现艺术图像处理附matlab代码

1 内容介绍

元胞自动机变换为我们提供了一个将已知现象和元胞自动机演化联系起来的直接方法.它将物理网格空间上的每个点通过元胞自动机变换基映射到元胞自动机空间上,通过元胞自动机空间上的变换系数揭示出物理空间中很难观察到的性质.元胞自动机变换最大的优势是能产生大量的不同性质的基函数,这些基函数可以适应已知问题的各种特性,为图像压缩,数据加密,求解积分方程等方面的应用提供一个良好的平台. 本文先对元胞自动机变换的发展情况和元胞自动机变换的基本方法作了简要的介绍,在此基础上把元胞自动机变换应用到图像处理中。

2 仿真代码

function [ opImgCell ] = CAPainting( Img, mu, lambda, Generation, Boundary )

%CAPAINTING Summary of this function goes here

%   Detailed explanation goes here

Img = double(Img);

Sz = size(Img);

Pop = cell(1, mu+lambda);

Result = cell(1, mu+lambda);

if exist('Save', 'dir') ~= 7

   mkdir('Save');

end

% initialize first population

for i=1:mu+lambda

   if i<= mu

       Pop{i} = cell(1, 7);

       Pop{i}{1} = randi([1, Boundary{1}], 1, 3); % Birth

       Pop{i}{2} = randi([1, Boundary{2}], 1, 3); % Level

       Pop{i}{3} = randi([1, Boundary{3}], 1, 3); % number of Pattern Pos

       Pop{i}{6} = randi([Boundary{4}, Boundary{5}], 1, 3); % Cell Generation

       Pop{i}{4} = cell(1, 3); % PosH

       Pop{i}{5} = cell(1, 3); % PosW

       Pop{i}{7} = cell(1, 3); % Pattern

       for j=1:3

           Pop{i}{4}{j} = randi([1, Boundary{6}], 1, Pop{i}{3}(j));  

           Pop{i}{5}{j} = randi([1, Boundary{7}], 1, Pop{i}{3}(j));

           Pop{i}{7}{j} = randi([0, 1],2*Pop{i}{2}(j)+1, 2*Pop{i}{2}(j)+1);

       end

       Result{i} = zeros(Sz);

       for cc=1:3

        [Result{i}(:, :, cc), ta, tb, tc, td, te] = GUILogicRule(Img, cc, Pop{i}{1}(cc), Pop{i}{2}(cc), Pop{i}{3}(cc), Pop{i}{6}(cc), 1, Pop{i}{4}{cc}, Pop{i}{5}{cc}, Pop{i}{7}{cc});

       end

   else

       Pop{i} = cell(1, 7);

       Result{i} = zeros(Sz);

   end

end

% end initialize    


Fit = Fitness(Result);



for g=1:Generation

   % tournament size = 2;

   SelCounter = 1;

   selectMutation = zeros(1, mu);

   for sel=1:mu

       selectArray = randi([1, mu], 1, 2);

       if Fit(selectArray(1)) > Fit(selectArray(2))

           selectMutation(SelCounter) = selectArray(1);

           SelCounter = SelCounter +1;

       else

           selectMutation(SelCounter) = selectArray(2);

           SelCounter = SelCounter +1;

       end

   end

   for mutate=1:lambda

       [Pop{mu+mutate}, cc] = Mutation(Pop{selectMutation(mutate)}, Boundary);

       Result{mu+mutate} = Result{selectMutation(mutate)};

       [Result{mu+mutate}(:, :, cc), ta, tb, tc, td, te] = GUILogicRule(Img, cc, Pop{mu+mutate}{1}(cc), Pop{mu+mutate}{2}(cc), Pop{mu+mutate}{3}(cc), Pop{mu+mutate}{6}(cc), 1, Pop{mu+mutate}{4}{cc}, Pop{mu+mutate}{5}{cc}, Pop{mu+mutate}{7}{cc});

   end    

   Fit = Fitness(Result);

   % survivor selection

   [Fit,sortIndex] = sort(Fit(:),'descend');

   Fit = [Fit(1:mu)', zeros(1, lambda)];

   selectParent = sortIndex(1:mu);  

   newPop = cell(1, mu+lambda);

   newRes = cell(1, mu+lambda);

   for wrt=1:mu+lambda

       if wrt <= mu

           imwrite(Result{wrt}, ['Save/G', num2str(g), 'Parent', num2str(wrt), '.jpg']);

       else

           imwrite(Result{wrt}, ['Save/G', num2str(g), 'Child', num2str(wrt-mu), '.jpg']);

       end

   end

   for i=1:mu+lambda

       if i<= mu

           newPop{i} = Pop{selectParent(i)};

           newRes{i} = Result{selectParent(i)};

       else

           newPop{i} = cell(1, 7);

           newRes{i} = zeros(Sz);

       end

   end

   Pop = newPop;

   Result = newRes;

end


opImgCell = Result;


end

3 运行结果

4 参考文献

[1]李辉亮. 基于元胞自动机的数字图像处理[D]. 汕头大学, 2007.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。


相关文章
|
4月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
216 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
4月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
139 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
4月前
|
计算机视觉
【图像处理】基于灰度矩的亚像素边缘检测方法理论及MATLAB实现
基于灰度矩的亚像素边缘检测方法,包括理论基础和MATLAB实现,通过计算图像的灰度矩来精确定位边缘位置,并提供了详细的MATLAB代码和实验结果图。
119 6
|
4月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
105 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
4月前
|
计算机视觉
【图像处理】基于Zernike矩的亚像素边缘检测理论及MATLAB实现
基于Zernike矩的亚像素边缘检测理论,并提供了相应的MATLAB代码实现,包括定义7x7的Zernike模板、图像处理、边缘检测和连通域分析等步骤。
121 1
|
6月前
|
机器学习/深度学习 数据可视化 算法
探索MATLAB世界:掌握基础知识与实用技能(1. MATLAB环境与基本操作 2. 数据类型与变量 3. 条件与循环,1. 数据分析与统计 2. 图像处理与计算机视觉 3. 信号处理与控制系统)
探索MATLAB世界:掌握基础知识与实用技能(1. MATLAB环境与基本操作 2. 数据类型与变量 3. 条件与循环,1. 数据分析与统计 2. 图像处理与计算机视觉 3. 信号处理与控制系统)
58 0
|
7月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
7月前
|
数据安全/隐私保护
地震波功率谱密度函数、功率谱密度曲线,反应谱转功率谱,matlab代码
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
7月前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)