资源简介
应用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
- 上一篇:变分模式分解实测程序
- 下一篇:SVM中matlab版本的交叉验证和参数选择
相关资源
- SVM中matlab版本的交叉验证和参数选择
- K最邻近分类器设计matlab
- MATLAB GUI---常见图像处理算法
- 基于趋近律的滑模控制matlab仿真
- 扩频通信变换域抗干扰技术matlab实现
- 计算lpcc的matlab程序
- matlab GPS水准高程拟合
- GUI人脸识别MATLAB代码
- 正交最小二乘法的matlab代码(ols)
- 一个批量剪裁图像的matlab程序
- ARNOLD变换代码 可直接使用
- 《MATLAB神经网络原理与精解》随书附
- 图片左右翻转的Matlab代码
- matlab2018b license standalone
- 小波变换的matlab代码包括EZWImfusmodif
- matlab正交频分复用OFDM技术matlab实现仿
- pri变换算法优化
- 基于Gabor小波变换和人工神经网络的人
- 生态系统动力学仿真matlab程序
- MATLAB钢琴模拟
- DMR中的4FSK的matlab仿真
- 《数字信号处理》 MATLAB上机实验全部
- 图像融合的Matlab代码
- ASK调制matlab代码
- Boosting matlab代码
- matlab dtmf
- matlab孤立点提取函数
- MIMO信道容量仿真matlab代码
- 图像彩色增强matlab源码
- 轮廓波变换及其去噪的程序
评论
共有 条评论