Matlab实现遗传算法在二值图像重建问题中的应用

Posted 这是一个很随便的名字

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matlab实现遗传算法在二值图像重建问题中的应用相关的知识,希望对你有一定的参考价值。

遗传算法

GA 算法的灵感来自查尔斯·达尔维 (Charles Darwi) 提出的生物进化理论。实际上,GA中模拟的主要机制是适者生存。在自然界中,更健康的生物体生存的可能性更高。这有助于他们将基因转移到下一代。随着时间的推移,让物种更好地适应环境(避开敌人并寻找食物)的良好基因在后代中占据主导地位。受自然界中染色体和基因的启发,GA 算法将优化问题表示为一组变量。优化问题的每个解对应一个染色体,每个基因对应问题的一个变量。

进化计算

进化计算是一系列受生物进化启发的全局优化算法,是研究这些算法的人工智能和软计算的子领域。从技术上讲,它们是一系列具有元启发式或随机优化特征的基于群体的试错问题求解器。 

本文是将遗传算法用于图像重建

代码:



function [BestChrom]  = GeneticAlgorithm (M , N, MaxGen , Pc, Pm , Er , obj, visuailzation)

load IMG_REF_BINARY;

cgcurve = zeros(1 , MaxGen);

%%  Initialization
[ population ] = initialization(M, N);
for i = 1 : M
    population.Chromosomes(i).fitness = obj( population.Chromosomes(i).Gene(:), IMG_REF_BINARY);
end

g = 1;
disp(['Generation #' , num2str(g)]);
[max_val , indx] = sort([ population.Chromosomes(:).fitness ] , 'descend');
cgcurve(g) = population.Chromosomes(indx(1)).fitness;

subplot(1,2,2)

%% Main loop
for g = 2 : MaxGen
    disp(['Generation #' , num2str(g)]);

    for k = 1: 2: M
        % Selection
        [ parent1, parent2] = selection(population);
        
        % Crossover
        [child1 , child2] = crossover(parent1 , parent2, Pc, 'double');
        
        % Mutation
        [child1] = mutation(child1, Pm);
        [child2] = mutation(child2, Pm);
        
        newPopulation.Chromosomes(k).Gene = child1.Gene;
        newPopulation.Chromosomes(k+1).Gene = child2.Gene;
    end
    
    % Calcualte the fitness values
    for i = 1 : M
        newPopulation.Chromosomes(i).fitness = obj( newPopulation.Chromosomes(i).Gene(:), IMG_REF_BINARY);
    end
    
    % Elitism
    [ newPopulation ] = elitism(population, newPopulation, Er);
    
    cgcurve(g) = newPopulation.Chromosomes(1).fitness;
    
    population = newPopulation; % Replace the previous population with the newly made
    
    BestChrom.Gene    = population.Chromosomes(1).Gene;
    BestChrom.Fitness = population.Chromosomes(1).fitness;
    
    
    col_no = size(IMG_REF_BINARY,2);
    Recons_IMG = vec2mat(BestChrom.Gene , col_no);
    Recons_IMG = Recons_IMG .* 255;

    
 %   if rem(g , 100) == 0
        subplot(1,2,2)
        imshow(Recons_IMG);
        title(['Generation #' , num2str(g), ' Error = ' , num2str(-BestChrom.Fitness)])
 
        drawnow
 %   end
    
end

   



if visuailzation == 1
    figure
    plot( 1 : MaxGen , cgcurve);
    xlabel('Generation');
    ylabel('Fitness of the best elite')
end


end

运行结果:

 获取完整代码:https://ai.52learn.online/code/40

以上是关于Matlab实现遗传算法在二值图像重建问题中的应用的主要内容,如果未能解决你的问题,请参考以下文章

图像重建基于matlab遗传算法二值化图像重建含Matlab源码 2396期

基于MATLAB的腐蚀膨胀算法实现

腐蚀膨胀-算法

腐蚀膨胀-算法

opencv实现二值图像孔洞填充

图像处理基于ART算法实现图像重建matlab源码