• 基于原子势函数及人工蜂群算法进行形状匹配优化(Matlab代码实现)


    💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥

    🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

    ⛳️座右铭:行百里者,半于九十。

    目录

    💥1 概述

    📚2 运行结果

    🎉3 参考文献

    👨‍💻4 Matlab代码实现 

    💥1 概述

           当观察周围环境时,人们首先注意到的是物体及其周围环境的颜色、纹理、形状和空间关系等等,形状是物体最基本的有感觉意义的特征之一.在计算机视觉和模式识别中,形状是对目标范围的二值图像表示,可以看成是目标的轮廓,它是用于目标识别的重要特征.为了节省存储空间、易于特征计算﹐需要对形状作进一步的表示,这些表示通常可以分为两类:编码方式.如链码﹑游程码, freeman码等;简化方式,如样条(B样条,3次·5次样条八插值、多项式、多边形逼近、和特征点检测等.另外还可以使用形状的骨架来描述形状。

    📚2 运行结果

    部分代码:

    clear all
    close all
    clc

    global exp001
    exp002 = imread('1.bmp');
    exp001 = rgb2gray(exp002);
    exp001 = edge(exp001,'sobel');

    global flag
    global yanmo

    load zxx

    [mmmm, ~] = size(yanmo);
    flag = (mmmm./2);

    D = 3;
    NP = 40; %/* The number of colony size (employed bees+onlooker bees)*/
    FoodNumber = NP/2; %/*The number of food sources equals the half of the colony size*/
    maxCycle = 50; %/*The number of cycles for foraging {a stopping criteria}*/
    runtime = 3;%/*Algorithm can be run many times in order to see its robustness*/
    limit = D*NP./2; %/*A food source which could not be improved through "limit" trials is abandoned by its employed bee*/ 
    [zxx1,zxx2] = size(exp001);
    lb = [flag+1 ,flag+1, 0]; %/*lower bounds of the parameters. */
    ub = [zxx1-(flag + 1),zxx2- (flag + 1),2*pi];%/*upper bound of the parameters.*/

    GlobalMins=zeros(1,runtime);
    Range = repmat((ub-lb),[FoodNumber 1]);
    Lower = repmat(lb, [FoodNumber 1]);


    for r=1:runtime
        tic
        Foods = rand(FoodNumber,D) .* Range + Lower;
        for i = 1:FoodNumber
            ObjVal(i) = libai1989(Foods(i,1),Foods(i,2),Foods(i,3));
        end
    Fitness = calculateFitness(ObjVal);
    trial=zeros(1,FoodNumber);
    BestInd=find(ObjVal==max(ObjVal));
    BestInd=BestInd(end);
    GlobalMin = ObjVal(BestInd);
    GlobalParams=Foods(BestInd,:);
    ap = Fitness(1);

    iter=1;
    while ((iter <= maxCycle)),
        for i=1:(FoodNumber)
        neighbour1 = fix(rand*(FoodNumber)) + 1;
        neighbour2 = fix(rand*(FoodNumber)) + 1;
        while(neighbour2 == i)
             neighbour2 = fix(rand*(FoodNumber)) + 1;
        end;
        vv = (trial(i)+1)./((trial(i) + trial(neighbour2))+2);
           sol=Foods(i,:);
           Param2Change=fix(rand*D)+1;
           sol(Param2Change) = Foods(i,Param2Change) + (Foods(neighbour1,Param2Change)-Foods(neighbour2,Param2Change))*(rand-0.5)*2*vv;
            %
            ind = find(sol         sol(ind) = lb(ind);
            ind = find(sol>ub);
            sol(ind) = ub(ind);
            %
            ObjValSol = libai1989(sol(1),sol(2),sol(3));
            FitnessSol=calculateFitness(ObjValSol);
           if (FitnessSol>Fitness(i)) 
                Foods(i,:)=sol;
                Fitness(i)=FitnessSol;
                ObjVal(i)=ObjValSol;
                trial(i)=0;
            else
                trial(i)=trial(i)+1;
           end;
         end;
    prob=(0.9.*Fitness./max(Fitness))+0.1;
    i=1;
    t=0;
    while(t     if(rand         t=t+1;
            Param2Change=fix(rand*D)+1;
            neighbour=fix(rand*(FoodNumber))+1;     
                while(neighbour==i)
                    neighbour=fix(rand*(FoodNumber))+1;
                end;
            
           sol=Foods(i,:);
           vv = (trial(i) + 1) ./ ((trial(i) + trial(neighbour)) + 2);
           sol(Param2Change) = Foods(i,Param2Change) + (Foods(i,Param2Change)-Foods(neighbour,Param2Change))*(rand-0.5)*2*vv;

           
            %
            ind = find(sol < lb);
            sol(ind) = lb(ind);
            ind = find(sol > ub);
            sol(ind) = ub(ind);
            %
            ObjValSol = libai1989(sol(1),sol(2),sol(3));
            FitnessSol=calculateFitness(ObjValSol);
           if (FitnessSol             Foods(i,:)=sol;
                Fitness(i)=FitnessSol;
                ObjVal(i)=ObjValSol;
                trial(i)=0;
            else
                trial(i)=trial(i)+1; %/*if the solution i can not be improved, increase its trial counter*/
           end;
        end;
        
        i=i+1;
        if (i==(FoodNumber)+1) 
            i=1;
        end;   
    end; 
             ind=find(ObjVal==max(ObjVal));
             ind=ind(end);
             if (ObjVal(ind)>GlobalMin)
             GlobalMin=ObjVal(ind);
             GlobalParams=Foods(ind,:);
             end;
    ind=find(trial==max(trial));
    ind=ind(end);
    if (trial(ind)>limit)
        trial(ind)=0;
        sol=(ub-lb).*rand(1,D)+lb;
        ObjValSol = libai1989(sol(1),sol(2),sol(3));
        FitnessSol=calculateFitness(ObjValSol);
        Foods(ind,:)=sol;
        Fitness(ind)=FitnessSol;
        ObjVal(ind)=ObjValSol;
    end;

    fprintf('iteration = %d ObjVal=%g\n',iter, GlobalMin);
    AAA(r,iter) = GlobalMin;

    iter  = iter +1;
    end % End of ABC
    solution_restore(r,1:3) = GlobalParams;
    save BE

    end
    asddsa


    asddsa

    🎉3 参考文献

    [1]Bai Li and Yuan Yao, "An Edge-based Optimization Method for Shape Recognition Using Atomic Potential Function", Engineering Applications of Artificial Intelligence, no. 35, pp. 14–25, 2014.
    [2]Bai Li, Raymond Chiong and Mu Lin, "A Balance-Evolution Artificial Bee Colony Algorithm for Protein Structure Optimization Based on a Three-dimensional AB Off-Lattice Model", Computational Biology and Chemistry, no. 54, pp. 1–12, 2015.

    👨‍💻4 Matlab代码实现 

  • 相关阅读:
    EPOLL(C/S模型)实现I/O复用多进程聊天室,通过共享内存、socketpair实现父子进程通信,通过信号量回收进程
    解决方案|法大大电子签:3招击破汽车销售效率及成本难题!
    代码改造:设计模式之责任链
    制作一个模板
    城商行两地三中心存储架构设计实践分享
    算法学习 | 回溯算法之深度优先搜索常见题型练习
    Java 提取HTML文件中的文本内容
    C语言基本算法之选择排序
    Rust机器学习之Plotters
    C# WPF入门学习主线篇(二十九)—— 绑定到对象和集合
  • 原文地址:https://blog.csdn.net/weixin_46039719/article/details/127435659