【MATLAB图像处理实用案例详解(9)】——基于最大类间方差遗传算法的道路分割

news/2024/11/28 5:46:29/

目录

    • 一、最大类间方差遗传算法
    • 二、代码示例

一、最大类间方差遗传算法

最大类间方差的求解过程,就是在解空间中查找到一个最优的解,使得其方差最大,而遗传算法能非线性快速查找最优解k*及最大的方差,其步骤如下:
①为了使用遗传算法,首先必须对实现解空间的数值编码,产生染色体单元。由于所采集到的道路图像的灰度图由0~255个灰度值组成,正好对应着一个8位二进制即一个字节,因此使用一个字节作为一个染色体。对于染色体的解码正好是编码的逆过程,就是这个字节的十进制数。
②初使化种群,产生一个规模的染色体种群,并随机初始化每一染色体,得到多个不同的染色体,这个过程实际上决定了解的起始值,如果其选取过偏,则会造成最优解收敛慢、计算时间长的缺点。
③对每个染色体进行解码。由最大类方差的分割阈值方法,可以设定其方差作为每一个染色体的评价函数,染色体的方差越大,就越有可能逼近最优解。求出每一个染色体的适应值,对于所求得的适应值,求出每一个染色体的选择概率及累计概率并产生多个随机数。选择出随机概率对应的染色体作为遗传运算的一组种子,其中适应值大的被选取的可能性大,而适应值小的被选取的机会少,其值对染色体进行优胜劣汰的自然选择,又称为竞争。被选中的染色体作为遗传种子,进行遗传运算,这样一代一代地进行,每一代所得到的适应值都不相同,新一代中的染色体得到的适应值较高,因此,其解也更逼近于最大的值。
④接下来进行遗传运算。首先进行杂交运算,杂交运算就是对染色体中的某些基因进行交换,此过程中为了控制交换的位数,必须给定一个杂交率。杂交率越大,其交换的基因越多,其值变化就越快,解的收敛速度就越快;但杂交率太大,不利于求得最优解。

二、代码示例

运用最大类间方差遗传算法进行道路分割的MATLAB代码和效果如下:
原始道路和分割后的道路图像如下:
在这里插入图片描述
最佳适应度值进化曲线和每一代的最佳阈值进化曲线如下:
在这里插入图片描述
【注】:将传统的图像分割技术与现代智能理论——遗传算法相结合,不但提高了算法的分割性能,还大大提高了算法的运算速度。
完整代码参考链接:https://download.csdn.net/download/didi_ya/87691646


http://www.ppmy.cn/news/41808.html

相关文章

《2023金融科技·校园招聘白皮书》新鲜出炉|牛客独家

数智创新时代,科技人才为先。 眼下,在建设“数字中国”的时代背景下,金融行业全面数智化转型已箭在弦上。政策端,金融行业为中共中央、国务院印发《数字中国建设整体布局规划》的7大重点行业之一。 资本端,仅2022年三…

手把手教你安装Visual Studio 2019(史上最全)

前言: 本文是以Visual Studio Community 2019为例子,介绍如何在微软官网下载Visual Studio Community 2019并安装.net桌面开发程序环境(主要是winform开发环境)。 下载请点击这里Visual Studio Community 2019下载,然后点击下图的箭头的DownLoad下载,要注意的是下载时要…

【python学习】基础篇-常用函数-format函数 格式化操作

format()可以对数据进行格式化处理操作,语法如下: format(value,format_spec) value 为要转换的数据,fommat spec 为格式化解释, 当参数 format spec 为空时,等同于函数 str(value)的方式。 format spec 可以设置非常复…

「STM32入门」TIM输出比较

输出比较的简介 输出比较英文写作OC (Output Compare) 输出比较可以通过比较CNT和CCR寄存器值的关系,来对输出电平进行置高或者置低或者翻转的操作,用于输出一定频率和占空比的PWM波形常见应用例子如:呼吸灯,调速电机等CCR&#x…

Android开发中kotlin编程语言的一些实用技巧

前言 相信大家都知道,kotlin是kotlin是google力推的用以取代java的android开发语言 ,kotlin使用起来比较方便,同时有许多语法糖,本文主要讲解了一些比较实用的kotlin技巧。 一,自定义圆角矩形 在项目中,…

在Ubuntu18.04或者20.04下搭建edk2运行环境

#更新完之后依次执行下面两条命令 1.apt-get update 2.apt-get upgrade 如果执行之后出现源不能更新的问题,到/etc/apt/sources.list.d 下删除对应的ppa源重新更新即可解决 git clone https://github.com/tianocore/edk2.git cd edk2 git submodule update --init 如果git cl…

C++之动态内存

12 动态内存 12.1动态内存与智能指针 动态分配对象的生存期与它们在哪里创建无关,只有当显示地被释放时,这些对象才会销毁。 new在动态内存中为对象分配空间并返回一个指向该对象的指针,可以对对象进行初始化。 delete接受以一个动态内存…

18从零开始学Java之switch分支语句中该怎么用?

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中,壹哥给大家介绍了Java里的顺序、分支、循环结构的概念,并且重点给大家讲解了分支结…