【遗传算法】在图像处理中的应用

融合遗传算法的多域值分块低照度图像增强算法

该算法主要分为颜色空间转换、亮度增强、细节增强和多尺度融合四个阶段,其流程如下图 所示。

  • 为 防止算法在增强图像亮度时改变图像的颜色信息,先将低照度图像从 RGB 空间转换至 HSV 空间,其中 Image H 和 Image S 表征图像的色彩信息, Image V 表征图像的亮度信息,由此分离图像的颜色信息和亮度信息。
  • 利用遗传算法求出 Image V 的最优分割阈值,将 Image V 分为亮度不同的多个子图。
  • 采用多阈值分块增强算法对各子图进行亮度的评判和增强,得到亮度增强后的 Image A。
  • 为增强图像的细节信息,利用引导滤波算法和反锐化掩模算法提取图像 Image V 的轮廓信息 Image C和纹理信息 Image B。
  • 借鉴多尺度融合思想将 Image A、Image B 和 Image C 加权融合,重构出曝光度正常且细节信息丰富的 Image V1。
  • 最后将 Image V1、Image H 和 Image S 转换为细节清晰、对比度高且视觉效果良好的高质量 RGB 图像。

遗传算法用于图像去噪

1. 种群初始化

def firstPopulation(size):
    population = []
    for i in range(size):
        population.append((randint(1, 40), randint(1, 40), randint(1, 6)))
    return population

经过以上代码,firstPopulation 函数返回一个包含 size 个元素的Population列表,其中每个元素都是一个包含三个由 randint 函数生成的随机整数的元组,这三个参数通常是个体的基因表达方式,它们代表了某种问题的解或优化问题中的一组参数。firstPopulation 函数调用时需要接收一个参数 size,以确定生成的种群中有多少个个体。这个参数决定了返回的列表的长度。

2. 适应度函数设计

def fitness(h, twindows, swindows):
    img_denoise = cv2.fastNlMeansDenoising(img_noise, None, h, twindows, swindows)
    fit = 1 / mad(img_denoise, axis=None)
    return fit

适应度函数fitness有三个接收参数:h,twindow及swindows,这三个参数也是对含噪图像进行快速非局部均值去噪(fastNlMeansDenoising)的参数,通过在整幅图像计算去噪后图像的中位数绝对偏差(MAD)的倒数得到适应度,在这一步,适应度值 fit 被定义为 MAD 的倒数。这是因为在遗传算法中,我们通常尝试最大化适应度值,而 MAD 的值越小表示图像的噪声越少,所以取倒数可以将问题转换为最小化问题。

3. 计算种群的适应度

def computePerfPopulation(population):
    populationPerf = {}
    for i in population:
        populationPerf[i] = fitness(i[0], i[1], i[2])
    return sorted(populationPerf.items(), key=operator.itemgetter(1), reverse=True)

函数computePerfPopulation是为了计算种群中个体的适应度,其接收参数也为第一步中经过初始化的种群,随后定义字典populationPerf,对于population的每个个体i,其有三个参数(种群初始化),将这三个参数作为fitness函数的接收参数计算种群中每个个体的适应度,存储再populationPerf中,populationPerf.items()返回包含字典所有键值对的视图对象,随后通过key=operator.itemgetter(1)按照populationPerf的第二个元素进行排序,reverse=True按照从大到小排序。

4. 种群的自然选择

def selectFromPopulation(populationSorted, best_sample, lucky_few):
    nextGeneration = []
    for i in range(best_sample):
        nextGeneration.append(populationSorted[i][0])
    for i in range(lucky_few):
        nextGeneration.append(random.choice(populationSorted)[0])
    random.shuffle(nextGeneration)
    return nextGeneration

这里是对经过适应度计算的种群进行自然选择产生下一代种群,populationSorted是经过适应度计算的种群,best_sample是要选择的适应度较好的个体的个数,lucky_few是要选择的幸运个体个数。

5. 种群的交叉

def createChild(pai1, pai2):
    child = ((pai1[0], pai1[1], pai2[2]))
    return child


def next_generation(population):
    ng = population
    for i in range(0, (len(population) - 1), 2):
        ng.append(createChild(population[i], population[i + 2]))
        ng.append(createChild(population[i + 2], population[i]))
    return ng

6. 种群的基因突变

def mutateGene(indi):
    aux = list(indi)
    index_modification = int(randint(0, len(indi) - 2))
    if random.random() * 100 < 50:
        aux[index_modification] += randint(0, 5)
    else:
        aux[index_modification] -= randint(0, 5)
    return tuple(aux)


def mutatePopulation(pop, chance_de_mut):
    for i in range(len(pop)):
        if random.random() * 100 < chance_de_mut:
            pop[i] = mutateGene(pop[i])

一些相关材料:

基于遗传算法的图像退化模型

python 人工智能学习 遗传算法实现图片再现

【论文复现】遗传算法图像去噪:Effective Hybrid Genetic Algorithm (EHGA)

【图像分割】利用粒子群算法与遗传算法实现图像的自适应多阈值的快速分割

智能优化算法——python实现使用遗传算法进行图片拟合

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值