python如何实现使用遗传算法进行图片拟合


小编给大家分享一下python如何实现使用遗传算法进行图片拟合,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!算法思路假设我们有这样一个生物族群,他们的每个基因片段都是一个个三角形(即只含三个点和颜色信息),他们每个个体表现出的性状就是若干个三角形叠加在一起。假设我们有一张图片可以作为这种生物族群最适应环境的性状,即长得越像这张图片的越能适应环境,越不像这张图片的越容易被淘汰。当然作为一个正常的生物族群,他应该也会有正常的繁衍以产生新个体。产生新个体的过程中来自父亲和母亲的基因会进行交叉互换和变免费云主机域名异,变异又可以有增加基因片段、减少基因片段以及不同位置的基因片段顺序互换。但是一个族群不能够无限的繁殖,我们假设环境资源只能容纳有限的生物族群规模,所以我们在产生足够多的后代之后就要把他们放到族群里与族群内部进行竞争淘汰。这样一来,通过不断地淘汰,这个族群就会越来越像我们给定的图片。这就是算法的基本思路。流程图下面我们来看一下实现过程,为了方便解释,我们会结合python建立类似于伪代码的函数进行解释,不能直接运行,具体可运行的代码可直接下载参照最后的类封装的完整代码我们使用imageio中的imread打开图片,这里为了方便后续使用我们建立OpenImg函数,返回打开的图片img(格式为array),图片的格式(方便后期图片的保存),图片的大小:row和col(为后期画图做准备)。我们假设一个族群的最大生物个数为max_group,用groups来表示族群,g为族群内的生物个体,运用随机数随机产生个体。我们使用PIL画图,首先我们建立一个空白的画布,然后再将个体的特征(三角形)画到图上。使用structural_similarity对比两个图片的相似度,此时两个图片都应该是array类型调用我们之前建立好的to_image函数先将个体转换成图片,然后将图片保存即可。考虑到后期的基因片段的增添和减少,所以应该分为两步,其一是相重合的位置进行交叉互换,以及对于多出来的尾部进行交叉互换,我们按照随机率random_rate和重合位置长度min_locate来确定交换的位数。然后我们使用sample选出若干位置进行互换。交换结束后再对尾部进行互换随机选择的原理和目的与上面类似,这里我们把重新生成某个基因片段的信息看作基因突变。在个体的基因组内随机选择基因片段进行位置互换。直接在个体基因组后面添加随机产生的基因片段即可。随机减少个体的若干基因片段以此调用以上的突变、易位、增添和减少产生4种状态的基因片段繁殖过程包括交叉互换和变异,直接调用之前构造的函数即可建立个体和其与目标的相似度相关的映射关系,并按照相似度排序,然后去除相似度较低的个体,直到剩余生物个体的数量为max_group为止。在这个函数中我们还返回了一个最优个体的相似度来方便监测。拟合过程先要进行若干次的繁殖,为了保证每次繁殖的个体数我们规定其至少选择最大个体数的一半数量的次数进行繁殖,繁殖之后的个体加入到种群当作和之前种群中的个体一起进行淘汰。通过这个过程我们每次淘汰都会将与目标差距最大的个体淘汰。拟合时建议选择分辨率低的图片,如果选择的图片分辨率较高,可以使用以下代码降低图片分辨率我们以拟合一个小蓝鸟和一个心形为例来展示拟合过程
代码实现(这里已经事先将重复图片删除了)效果看完了这篇文章,相信你对“python如何实现使用遗传算法进行图片拟合”有了一定的了解,如果想了解更多相关知识,欢迎关注百云主机行业资讯频道,感谢各位的阅读!

相关推荐: Mybatis怎么使用动态语句实现批量删除

这篇文章主要介绍Mybatis怎么使用动态语句实现免费云主机域名批量删除,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!本人在数据库建了一张emp员工表(表的数据自己填充),表的结构如下:批量删除的核心代码为,在实体映射文件中配置如下的代…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 01/18 18:04
下一篇 01/18 18:04

相关推荐