【图像分割】基于matlab遗传算法道路图像分割【含Matlab源码 779期】
一、图像分割简介
理论知识参考:【基础教程】基于matlab图像处理图像分割【含Matlab源码 191期】
二、部分源代码
%%%%%%%%%%%%%%%%遗传算法在道路图像阈值分割中的应用%%%%%%%%%%%%
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(A,0.4);
B=rgb2gray(A); %灰度化
C=imresize(B,0.1); %将读入的图像缩小
lchrom=8; %染色体长度
popsize=10; %种群大小
cross_rate=0.7; %交叉概率
mutation_rate=0.4; %变异概率
maxgen=150; %最大代数
[m,n]=size(C);
'计算中,请稍等...'
initpop; %初始种群
for gen=1:maxgengeneration; %遗传操作
end
findresult; %图象分割结果
%%%输出进化各曲线
figure;
gen=1:maxgen;
plot(gen,fit(1,gen));
title('最佳适应度值进化曲线');
figure;
plot(gen,yuzhi(1,gen));
title('每一代的最佳阈值进化曲线');
%%%%%%%%%%%%%%%%%%%初始化种群%%%%%%%%%%%%%%%%%%%%
function initpop()
global lchrom oldpop popsize chrom C
imshow(C);
for i=1:popsizechrom=rand(1,lchrom);for j=1:lchromif chrom(1,j)<0.5chrom(1,j)=0;else chrom(1,j)=1;endendoldpop(i,1: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>=5popsize=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:popsizeif j>=1oldpop(i,:)=t(j,:);endj=j-1;end
end
%计算适度值并排序
for i=1:popsizelowsum=0;higsum=0;lownum=0;hignum=0;chrom=oldpop(i,:);c=0;for j=1:lchromc=c+chrom(1,j)*(2^(lchrom-j));endb(1,i)=c*255/(2^lchrom-1); %转化到灰度值 for x=1:mfor y=1:nif C(x,y)<=b(1,i)lowsum=lowsum+double(C(x,y));%统计低于阈值的灰度值的总和lownum=lownum+1; %统计低于阈值的灰度值的像素的总个数elsehigsum=higsum+double(C(x,y));%统计高于阈值的灰度值的总和hignum=hignum+1; %统计高于阈值的灰度值的像素的总个数endendendif lownum~=0u1=lowsum/lownum; %u1、u2为对应于两类的平均灰度值elseu1=0;endif hignum~=0u2=higsum/hignum;elseu2=0;end fitness(1,i)=lownum*hignum*(u1-u2)^2; %计算适度值
end
if gen==1 %如果为第一代,从小往大排序for i=1:popsizej=i+1;while j<=popsizeif fitness(1,i)>fitness(1,j)tempf=fitness(1,i);tempc=oldpop(i,:);tempb=b(1,i);b(1,i)=b(1,j);b(1,j)=tempb;fitness(1,i)=fitness(1,j);oldpop(i,:)=oldpop(j,:);fitness(1,j)=tempf;oldpop(j,:)=tempc;endj=j+1;endendfor i=1:popsizefitness1(1,i)=fitness(1,i);b1(1,i)=b(1,i);oldpop1(i,:)=oldpop(i,:);endpopsize1=popsize;
else %大于一代时进行如下从小到大排序for i=1:popsizej=i+1;while j<=popsizeif fitness(1,i)>fitness(1,j)tempf=fitness(1,i);tempc=oldpop(i,:);tempb=b(1,i);b(1,i)=b(1,j);b(1,j)=tempb;fitness(1,i)=fitness(1,j);oldpop(i,:)=oldpop(j,:);fitness(1,j)=tempf;oldpop(j,:)=tempc;endj=j+1;endend
end
%下边对上一代群体进行排序
for i=1:popsize1j=i+1;while j<=popsize1if fitness1(1,i)>fitness1(1,j)tempf=fitness1(1,i);tempc=oldpop1(i,:);tempb=b1(1,i);b1(1,i)=b1(1,j);b1(1,j)=tempb;fitness1(1,i)=fitness1(1,j);oldpop1(i,:)=oldpop1(j,:);fitness1(1,j)=tempf;oldpop1(j,:)=tempc;endj=j+1;end
end
%下边统计每一代中的最佳阈值和最佳适应度值
if gen==1fit(1,gen)=fitness(1,popsize);yuzhi(1,gen)=b(1,popsize);yuzhisum=0;
elseif fitness(1,popsize)>fitness1(1,popsize1)yuzhi(1,gen)=b(1,popsize); %每一代中的最佳阈值fit(1,gen)=fitness(1,popsize);%每一代中的最佳适应度elseyuzhi(1,gen)=b1(1,popsize1); fit(1,gen)=fitness1(1,popsize1);end
end%%%%%%%%%%%%%%%%%%%精英选择%%%%%%%%%%%%%%%%%%%%
function select()
global fitness popsize oldpop temp popsize1 oldpop1 gen b b1 fitness1
%统计前一个群体中适应值比当前群体适应值大的个数
s=popsize1+1;
for j=popsize1:-1:1if fitness(1,popsize)<fitness1(1,j)s=j;end
end
for i=1:popsizetemp(i,:)=oldpop(i,:);
end
if s~=popsize1+1if gen<50 %小于50代用上一代中用适应度值大于当前代的个体随机代替当前代中的个体for i=s:popsize1p=rand;j=floor(p*popsize+1);temp(j,:)=oldpop1(i,:);b(1,j)=b1(1,i);fitness(1,j)=fitness1(1,i);endelseif gen<100 %50~100代用上一代中用适应度值大于当前代的个体代替当前代中的最差个体j=1;for i=s:popsize1temp(j,:)=oldpop1(i,:);b(1,j)=b1(1,i);fitness(1,j)=fitness1(1,i);j=j+1;endelse %大于100代用上一代中的优秀的一半代替当前代中的最差的一半,加快寻优j=popsize1;for i=1:floor(popsize/2)temp(i,:)=oldpop1(j,:);b(1,i)=b1(1,j);fitness(1,i)=fitness1(1,j);j=j-1;endendend
end
三、运行结果
四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]赵勇,方宗德,庞辉,王侃伟.基于量子粒子群优化算法的最小交叉熵多阈值图像分割[J].计算机应用研究. 2008,(04)
【图像分割】基于matlab遗传算法道路图像分割【含Matlab源码 779期】相关推荐
- 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】
一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...
- 【Matlab路径规划】改进的遗传算法机器人避障路径规划【含GUI源码 703期】
一.代码运行视频(哔哩哔哩) [Matlab路径规划]改进的遗传算法机器人避障路径规划[含GUI源码 703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...
- 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】
一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...
- 【Matlab语音分析】语音信号分析【含GUI源码 1718期】
一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...
- 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】
一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...
- 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】
一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...
- 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】
一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...
- 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】
一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...
- 【Matlab语音加密】语音信号加密解密(带面板)【含GUI源码 181期】
一.代码运行视频(哔哩哔哩) [Matlab语音加密]语音信号加密解密(带面板)[含GUI源码 181期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆 ...
- 【Matlab身份证识别】身份证号码识别【含GUI源码 014期】
一.代码运行视频(哔哩哔哩) [Matlab身份证识别]身份证号码识别[含GUI源码 014期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...
最新文章
- 在 Ubuntu 配置 PPTP Server
- python实现redis三种cas事务操作
- 从扁平到立体:Windows 10 图标的演化
- SAP Data Intelligence Graph使用浏览器访问的url规范
- Linux主机系统加固
- 【华为云技术分享】容易造成单片机内存溢出的几个陷阱
- liunx screen使用简单实验
- 为什么我们应该学马化腾,而不是马云
- 各个浏览器兼容性问题积累
- ELK在广告系统监控中的应用 及 Elasticsearch简介
- 基于jsp java的员工绩效考核管理系统
- AVR-GCC与AVR单片机C语言开发,[推荐]AVR 单片机与GCC 编程 教程
- 别做老好人,你的善良应该带点锋芒
- 在Idea中使用Git后,类名各种颜色代表的含义
- sklearn的系统学习——随机森林调参(含案例及完整python代码)
- 工业物联网:平台架构、关键技术与应用实践
- EndNote设置自动导入文献
- android最新版本下载vivo,vivo应用商店下载安卓版
- iOS报错 之 The app delegate must implement the window property if it wants to use
- elasticsearch-7.2.1启动报错
热门文章
- 让simplejson支持datetime类型的序列化
- leetcode先刷_Maximum Subarray
- 2021-01-02
- 七月算法机器学习3 矩阵分析与应用
- ARKit 和 ARCore剖析、结构、原理介绍
- 2018CHI paper: Communication Behavior in Embodied Virtual Reality
- Atitit nlp 自然语言处理的艺术 attilax著作 v2 t55.docx Atitit nlp 自然语言处理attilax总结 目录 1.1. 主要范畴	1 1.2. 研究难点
- Atitit 成果艺术 attilax著 艾提拉著 目录 1. 	2 2. 理论类	2 2.1. xxx模型 曲线 定律 原则 曲线	2 3. 代码类成果 范例代码项目 代码类库 与代码片段
- Atitit cnchar simp best list 汉字简化方案 最简化汉字256个
- atitit.科技公司的超级武器--超级框架,到底要不要自己的框架??