遗传算法优化otsu分割问题python实现

本文介绍了遗传算法在解决Otsu分割问题中的应用,详细讲解了种群编码、选择、交换和变异策略,并提供了核心代码实现。讨论了遗传算法中的潜在问题,如轮盘选择法的缺点及改进措施,以及停止条件的设定。最后,给出了代码下载链接。
摘要由CSDN通过智能技术生成

杭电模式识别课程设计作业

最大类间方差法(Otsu)

详见https://www.cnblogs.com/xiaomanon/p/4110006.html,这里就不去赘述了。

遗传算法策略

关于遗传算法的详解什么的,可以参考其他的类似文章,下面讲讲我自己的策略

种群编码策略

二进制,优点在于方便理解,缺点在于python对于二进制数的处理有点鸡肋。

选择策略

轮盘选择法(有待改进)
缺点在于:若变异产生了一个新的最大值(更接近于最优值),但是其种群数量就只有1,远远比不上当前的最大值(离最优值远一点)。若直接使用轮盘选择法,那么这个新变异出来的值就会被覆盖掉。
改进:强制将上一代中最大的值进行保留,这样使得种群不会退化

交换策略

从基因一半往后的位置开始交换,这样有利于保持当前的最优值,使得交换之后的种群不至于很差。(待改进,对于最大值个体不进行交换操作)

  • Step1:产生一个概率,若小于交换概率,那么进行step2往后,否则处理下一个个体;

  • Step1:将种群的population乱序排列,取出前一半作为father,后一半作为mother;

    Step2:产生half-end的随机位置,然后从father和mother中各选出一位出来配对,交换。

变异策略

对于每一个个体,对于任意位置产生一位变异,但是变异概率不宜设计的很大,这样会导致种群不容易收敛。(待改进,对于最大值个体不进行变异操作)

  • Step1:产生一个概率,若小于变异的概率,那么进行step2往后,否则处理下一个个体;
  • Step2:产生一个随机位置start-end;
  • Step3:将该个体位置对应的随机位置的值取反。

停止条件

需满足以下其一即可:
1:满足种群迭代的最大值;
2:种群的0.98的个体都指向同一个值。

核心代码

otsu

import cv2
import numpy as np
import matplotlib.pyplot as plt

GRAY_SCALE = 256


def otsuth(img, threshold):
    image_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

    # fg_pro = np.zeros((1, GRAY_SCALE))
    # bg_pro = np.zeros((1, GRAY_SCALE))

    # fg_sum = 0
    # bg_sum = 0
    # for col in image_gray:
    #     for pix in col:
    #         if pix > threshold:
    #             fg_pro[0, pix] += 1
    #             fg_sum += pix
    #         else:
    #             bg_pro[0, pix] += 1
    #             bg_sum += pix
    #
    # if fg_sum != 0:
    #     fg_pro = fg_pro / fg_sum
    # if bg_sum != 0:
    #     bg_pro = bg_pro / bg_sum

    fg_pix = image_gray > threshold
    bg_pix = image_gray <= threshold

    w0 = float(np.sum(fg_pix)) / image_gray.size
    w1 = float(np.sum(bg_pix)) / image_gray.size
    
    u0 = 0
    u1 = 0
    if np.sum(fg_pix) != 0:
        u0 = np.sum(image_gray * fg_pix) / np
  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
遗传算法(Genetic Algorithm,GA)是一种启发式搜索算法,受到生物进化的启发。它通过模拟自然选择和遗传学中的杂交过程来寻找问题的最优解或近似最优解。遗传算法通常用于优化和搜索问题,例如函数优化、调度问题、机器学习等。 遗传算法包括以下几个步骤: 1. 初始化种群:生成一个包含一定数量个体的种群,每个个体代表问题的一个可能解。个体通常由染色体组成,染色体是一个有序的基因序列,对应于问题的参数或变量。 2. 评估适应度:计算每个个体的适应度值,表示该个体在当前问题环境下的优劣程度。适应度高的个体更有可能生存下来并传递其基因。 3. 选择(Selection):基于个体的适应度值,选择一定比例的个体作为父代和母代。常见的选择策略包括轮盘赌选择、锦标赛选择等。 4. 杂交(Crossover):将父代和母代的基因进行交叉,生成新的个体。交叉操作模拟生物的杂交过程,通过交换基因来产生新的基因组合。 5. 变异(Mutation):对生成的个体进行变异,即以一定概率随机改变某些基因的值。变异操作模拟生物的突变现象,增加种群的多样性,防止早熟收敛。 6. 替换(Replacement):将生成的新的个体替换旧的个体,更新当前种群。常见的替换策略包括最佳保留策略、最佳淘汰策略等。 7. 迭代(Iteration):重复执行选择、杂交、变异和替换操作,直到满足终止条件,如达到预定的迭代次数,或种群的适应度值不再显著提高。 遗传算法的优点包括: 不需要问题的数学模型,仅需要定义适应度函数; 可以处理多变量、非线性、不连续的问题; 可以找到全局最优解或近似最优解; 简单易行,实现原理清晰。 然而,遗传算法也存在一些缺点: 对于大规模问题遗传算法的计算复杂度较高; 需要调参,如选择合适的种群大小、迭代次数、交叉概率、变异概率等; 结果具有一定的随机性,不同的运行结果可能不同。 因此,在应用遗传算法时,需要仔细评估问题的特点和约束条件,并进行适当的参数调优和结果分析。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值