资源简介
MATLAB智能算法-温正-配书代码,只有代码。
代码片段和文件信息
%%%%%%%%%%%%%%%%遗传算法在道路图像阈值分割中的应用%%%%%%%%%%%%
function main()
clear all
close all
clc
global chrom oldpop fitness lchrom popsize cross_rate mutation_rate thresholdsum
global maxgen m n fit gen threshold A B C oldpop1 popsize1 b b1 fitness1 threshold1
A=imread(‘1.jpg‘); %读入道路图像
A=imresize(A0.5); %利用imresize函数通过默认的最近邻插值将图像放大0.5倍
B=rgb2gray(A); %灰度化
C=imresize(B0.2); %将读入的图像缩小到0.2倍
lchrom=10; %染色体长度
popsize=10; %种群大小
cross_rate=0.8; %交叉概率
mutation_rate=0.5; %变异概率
maxgen=100; %最大代数
[mn]=size(C);
initpop; %初始种群
for gen=1:maxgen
generation; %遗传操作
end
findthreshold_best; %图象分割结果
%%%%%%%%%%%%%%%%%%%输出进化各曲线%%%%%%%%%%%
figure;
gen=1:maxgen;
plot(genfit(1gen));
title(‘最佳适应度值进化曲线‘);
xlabel(‘代数‘)
ylabel(‘最佳适应度值‘)
figure;
plot(genthreshold(1gen));
title(‘每一代的最佳阈值变化曲线‘);
xlabel(‘代数‘)
ylabel(‘每一代的最佳阈值‘)
%%%%%%%%%%%%%%%%%%%初始化种群%%%%%%%%%%%%%%%%%%%%
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; %给每一个个体分配8位的染色体编码
end
%%%%%%%%%%%%%%%%%产生新一代个体%%%%%%%%%%%%%%%%%%%%%%
function generation()
fitness_order; %计算适应度值及排序
select; %选择操作
crossover; %交叉
mutation; %变异
%%%%%%%%%%%%%%%%%计算适度值并且排序%%%%%%%%%%%%%%%%%%%
function fitness_order()
global lchrom oldpop fitness popsize chrom fit gen C m n fitness1 thresholdsum
global lowsum higsum u1 u2 threshold gen oldpop1 popsize1 b1 b threshold1
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
相关资源
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
- k近邻算法matlab实现
- matlab识别系统
- 神经网络分类matlab程序
- matlab正弦信号发生器的设计
- matlab程序用Hopfield网络解决TSP
评论
共有 条评论