• 大小: 724KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: Matlab
  • 标签: 图像分割  matlab  

资源简介

应用matlab设计的道路图像分割程序,包含程序和实验图像,采用方法为遗传算法

资源截图

代码片段和文件信息

%%%%%%%%%%%%%%%%遗传算法在道路图像阈值分割中的应用%%%%%%%%%%%%
function main()
clear all
close all
clc
global chrom oldpop fitness lchrom  popsize cross_rate mutation_rate yuzhisum
global maxgen  m n fit gen yuzhi A B C oldpop1 popsize1 b b1 fitness1 yuzhi1
A=imread(‘1.jpg‘);     %读入道路图像
A=imresize(A0.4);
B=rgb2gray(A);         %灰度化
C=imresize(B0.1);     %将读入的图像缩小
lchrom=8;              %染色体长度
popsize=10;            %种群大小
cross_rate=0.7;        %交叉概率
mutation_rate=0.4;     %变异概率
maxgen=150;            %最大代数
[mn]=size(C);
‘计算中请稍等...‘
initpop;    %初始种群
for gen=1:maxgen
    generation;  %遗传操作
end
findresult; %图象分割结果
%%%输出进化各曲线
figure;
gen=1:maxgen;
plot(genfit(1gen)); 
title(‘最佳适应度值进化曲线‘);
figure;
plot(genyuzhi(1gen));
title(‘每一代的最佳阈值进化曲线‘);
%%%%%%%%%%%%%%%%%%%初始化种群%%%%%%%%%%%%%%%%%%%%
function initpop()
global lchrom oldpop popsize chrom C
imshow(C);
for i=1:popsize
    chrom=rand(1lchrom);
    for j=1:lchrom
        if chrom(1j)<0.5
            chrom(1j)=0;
       else 
           chrom(1j)=1;
        end
    end
    oldpop(i1:lchrom)=chrom;    
end

%%%%%%%%%%%%%%%%%产生新一代个体%%%%%%%%%%%%%%%%%%%%%%
function generation()
fitness_order;                  %计算适应度值及排序
select;                         %选择操作
crossover;                      %交叉
mutation;                       %变异
%%%%%%%%%%%%%%%%%计算适度值并且排序%%%%%%%%%%%%%%%%%%%
function fitness_order()
global lchrom oldpop fitness popsize chrom fit gen C m n  fitness1 yuzhisum
global lowsum higsum u1 u2 yuzhi gen oldpop1 popsize1 b1 b yuzhi1 
if popsize>=5
    popsize=ceil(popsize-0.03*gen);
end
if gen==75     %当进化到末期的时候调整种群规模和交叉、变异概率
    cross_rate=0.3;        %交叉概率
    mutation_rate=0.3;     %变异概率
end
%如果不是第一代则将上一代操作后的种群根据此代的种群规模装入此代种群中
if gen>1   
    t=oldpop;
    j=popsize1;
    for i=1:popsize
        if j>=1
            oldpop(i:)=t(j:);
        end
        j=j-1;
    end
end
%计算适度值并排序
for i=1:popsize
    lowsum=0;
    higsum=0;
    lownum=0;
    hignum=0;
    chrom=oldpop(i:);
    c=0;
    for j=1:lchrom
        c=c+chrom(1j)*(2^(lchrom-j));
    end
    b(1i)=c*255/(2^lchrom-1);  %转化到灰度值        
    for x=1:m
        for y=1:n
            if C(xy)<=b(1i)
                lowsum=lowsum+double(C(xy));%统计低于阈值的灰度值的总和
                lownum=lownum+1; %统计低于阈值的灰度值的像素的总个数
            else
                higsum=higsum+double(C(xy));%统计高于阈值的灰度值的总和
                hignum=hignum+1; %统计高于阈值的灰度值的像素的总个数
            end
        end
    end
    if lownum~=0
        u1=lowsum/lownum; %u1、u2为对应于两类的平均灰度值
    else
        u1=0;
    end
    if hignum~=0
        u2=higsum/hignum;
    else
        u2=0;
    end   
    fitness(1i)=lownum*hignum*(u1-u2)^2; %计算适度值
end
if gen==1 %如果为第一代,从小往大排序
    for i=1:popsize
        j=i+1;
        while j<=popsize
            if fitness(1i)>fitness(1j)
                tempf=fitness(1i);
                tempc=oldpop(i:);
                tempb=b(1i);
                b(

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     493775  2005-10-25 15:56  2.jpg

     文件       8414  2007-07-13 15:11  maingaelit.m

     文件     251936  2000-01-06 22:43  1.JPG

----------- ---------  ---------- -----  ----

               754125                    3


评论

共有 条评论