• 【图像分割】基于花朵授粉算法实现图像的自适应多阈值快速分割附matlab代码


    1 内容介绍

    ​为快速准确地将图像中目标和背景分离开来,将新型群体智能模型中的花朵授粉算法、最大类间阈值相结合,提出了一种图像分割新方法.该方法将图像阈值看成花朵授粉算法群算法中的花粉,利用信息熵和最大熵原理设计花朵授粉算法的适应度函数,逐代逼近最佳阈值.并利用Matlab实现了图像分割算法,对分割的结果进行分析.实验结果表明,该方法在阈值分割图像时,花朵授粉算法能够快速准确地将图像目标分离出来,分离出来的目标更加适合后序的分析和处理.

    2 部分代码

    % --------------------------------------------------------------------%

    % Flower pollenation algorithm (FPA), or flower algorithm             %

    % Programmed by Xin-She Yang @ May 2012                               %

    % --------------------------------------------------------------------%

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    % Notes: This demo program contains the very basic components of      %

    % the flower pollination algorithm (FPA), or flower algorithm (FA),   %

    % for single objective optimization.    It usually works well for     %

    % unconstrained functions only. For functions/problems with           %

    % limits/bounds and constraints, constraint-handling techniques       %

    % should be implemented to deal with constrained problems properly.   %

    %                                                                     %

    % Citation details:                                                   %

    %1)Xin-She Yang, Flower pollination algorithm for global optimization,%

    % Unconventional Computation and Natural Computation,                 %

    % Lecture Notes in Computer Science, Vol. 7445, pp. 240-249 (2012).   %

    %2)X. S. Yang, M. Karamanoglu, X. S. He, Multi-objective flower       %

    % algorithm for optimization, Procedia in Computer Science,           %

    % vol. 18, pp. 861-868 (2013).                                        %

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    clc

    clear all

    close all

    n=30;           % Population size, typically 10 to 25

    p=0.8;           % probabibility switch

    % Iteration parameters

    N_iter=3000;            % Total number of iterations

    fitnessMSE = ones(1,N_iter);

    % % Dimension of the search variables Example 1

    d=2;

    Lb = -1*ones(1,d);

    Ub = 1*ones(1,d);

    % % Dimension of the search variables Example 2

    % d=3;

    % Lb = [-2 -1 -1];

    % Ub = [2 1 1];

    %

    % % Dimension of the search variables Example 3

    % d=3;

    % Lb = [-1 -1 -1];

    % Ub = [1 1 1];

    %

    %

    % % % Dimension of the search variables Example 4

    % d=9;

    % Lb = -1.5*ones(1,d);

    % Ub = 1.5*ones(1,d);

    % Initialize the population/solutions

    for i=1:n,

        Sol(i,:)=Lb+(Ub-Lb).*rand(1,d);

        % To simulate the filters use fitnessX() functions in the next line

        Fitness(i)=fitness(Sol(i,:));

    end

    % Find the current best

    [fmin,I]=min(Fitness);

    best=Sol(I,:);

    S=Sol;

    % Start the iterations -- Flower Algorithm

    for t=1:N_iter,

        % Loop over all bats/solutions

        for i=1:n,

            % Pollens are carried by insects and thus can move in

            % large scale, large distance.

            % This L should replace by Levy flights

            % Formula: x_i^{t+1}=x_i^t+ L (x_i^t-gbest)

            if rand>p,

                %% L=rand;

                L=Levy(d);

                dS=L.*(Sol(i,:)-best);

                S(i,:)=Sol(i,:)+dS;

                

                % Check if the simple limits/bounds are OK

                S(i,:)=simplebounds(S(i,:),Lb,Ub);

                

                % If not, then local pollenation of neighbor flowers

            else

                epsilon=rand;

                % Find random flowers in the neighbourhood

                JK=randperm(n);

                % As they are random, the first two entries also random

                % If the flower are the same or similar species, then

                % they can be pollenated, otherwise, no action.

                % Formula: x_i^{t+1}+epsilon*(x_j^t-x_k^t)

                S(i,:)=S(i,:)+epsilon*(Sol(JK(1),:)-Sol(JK(2),:));

                % Check if the simple limits/bounds are OK

                S(i,:)=simplebounds(S(i,:),Lb,Ub);

            end

            

            % Evaluate new solutions

            % To simulate the filters use fitnessX() functions in the next

            % line

            Fnew=fitness(S(i,:));

            % If fitness improves (better solutions found), update then

            if (Fnew<=Fitness(i)),

                Sol(i,:)=S(i,:);

                Fitness(i)=Fnew;

            end

            

            % Update the current global best

            if Fnew<=fmin,

                best=S(i,:)   ;

                fmin=Fnew   ;

            end

        end

        % Display results every 100 iterations

        if round(t/100)==t/100,

            best

            fmin

        end

        

        fitnessMSE(t) = fmin;

        

    end

    %figure, plot(1:N_iter,fitnessMSE);

    % Output/display

    disp(['Total number of evaluations: ',num2str(N_iter*n)]);

    disp(['Best solution=',num2str(best),'   fmin=',num2str(fmin)]);

    figure(1)

    plot( fitnessMSE)

    xlabel('Iteration');

    ylabel('Best score obtained so far');

    3 运行结果

    4 参考文献

    [1]李小琦. 基于Matlab的图像阈值分割算法研究[J]. 软件导刊, 2014, 13(12):3.

    [2]霍凤财等. "基于人工蜂群算法的图像阈值分割." 自动化技术与应用 035.002(2016):112-116.

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

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

     

  • 相关阅读:
    EdgeX Foundry 边缘物联网中间件平台
    git安装 免密交互 clone push
    慢下来的互联网医疗要等下一阵风?
    TCP/IP协议栈的心跳、丢包重传、连接超时机制实例详解
    【2014年数据结构真题】
    天猫店铺介绍,影响天猫店铺转让价格的六个因素
    什么是mvcc,mysql中的mvcc是怎么实现的
    Android FloatingActionButton 使用神坑记录
    全面理解元宇宙-Web3.0具象表现形式
    stm32 笔记 IO 口点灯实验及 HAL 库使用
  • 原文地址:https://blog.csdn.net/matlab_dingdang/article/details/126684339