Python图像处理【21】基于卷积神经网络增强微光图像

基于卷积神经网络增强微光图像

    • 0. 前言
    • 1. MBLLEN 网络架构
    • 2. 增强微光图像
    • 小结
    • 系列链接

0. 前言

在本节中,我们将学习如何基于预训练的深度学习模型执行微光/夜间图像增强。由于难以同时处理包括亮度、对比度、伪影和噪声在内的所有因素,因此微光图像增强一直是一项具有挑战性的问题。为了解决这一问题,提出了多分支微光增强网络 (multi-branch low-light enhancement network, MBLLEN),其关键思想是提取不同尺度的丰富特征,以便可以通过多个子网应用图像增强。最后,通过多分支融合生成输出图像,采用这种方式图像质量得到了极大的提高。

1. MBLLEN 网络架构

MBLLEN 深度神经网络的架构图如下所示:

MBLLEN 网络架构
MBLLEN 由以下三种模块组成:

  • 特征提取模块 (feature extraction module, FEM)
  • 增强模块 (enhancement module, EM)
  • 融合模块 (fusion module, FM)

网络的关键是学习以下内容:

  • 通过 FEM 提取不同尺度的丰富特征
  • 通过 EM 分别增强多尺度特征
  • 通过 FM 多分支融合获得最终输出

2. 增强微光图像

(1) 下载预训练的模型(也可以通过 gitcode 下载),导入库、模块和函数:

import tensorflow as tf
import numpy as np
from skimage.io import imread
import matplotlib.pylab as plt
from tensorflow.keras.layers import Input, Conv2D, Conv2DTranspose, Concatenate
from tensorflow.keras.applications.vgg19 import VGG19
from tensorflow.keras.models import Model

(2) 定义函数 build_mbllen(),该函数定义模型、创建模型实例并返回模型。增强模块使用四个堆叠的 Conv2D 层,然后使用三个 tensorflow.keras.layers 模块中的 Conv2DTranspose 层,输入图像的颜色通道需要作为输入张量的最后一个维度:

def build_mbllen(input_shape):
    def EM(input, kernal_size, channel):
        conv_1 = Conv2D(channel, (3, 3), activation='relu', padding='same', data_format='channels_last')(input)
        conv_2 = Conv2D(channel, (kernal_size, kernal_size), activation='relu', padding='valid', data_format='channels_last')(conv_1)
        conv_3 = Conv2D(channel*2, (kernal_size, kernal_size), activation='relu', padding='valid', data_format='channels_last')(conv_2)
        conv_4 = Conv2D(channel*4, (kernal_size, kernal_size), activation='relu', padding='valid', data_format='channels_last')(conv_3)
        conv_5 = Conv2DTranspose(channel*2, (kernal_size, kernal_size), activation='relu', padding='valid', data_format='channels_last')(conv_4)
        conv_6 = Conv2DTranspose(channel, (kernal_size, kernal_size), activation='relu', padding='valid', data_format='channels_last')(conv_5)
        res = Conv2DTranspose(3, (kernal_size, kernal_size), activation='relu', padding='valid', data_format='channels_last')(conv_6)
        return res

    inputs = Input(shape=input_shape)
    FEM = Conv2D(32, (3, 3), activation='relu', padding='same', data_format='channels_last')(inputs)
    EM_com = EM(FEM, 5, 8)

    for j in range(3):
        for i in range(0, 3):
            FEM = Conv2D(32, (3, 3), activation='relu', padding='same', data_format='channels_last')(FEM)
            EM1 = EM(FEM, 5, 8)
            EM_com = Concatenate(axis=3)([EM_com, EM1])

    outputs = Conv2D(3, (1, 1), activation='relu', padding='same', data_format='channels_last')(EM_com)
    return Model(inputs, outputs)

(3) 通过调用函数 build_mbllen() 获取模型实例,从下载的预训练模型文件中加载预训练权重(参数值):

mbllen = build_mbllen((None, None, 3))
mbllen.load_weights('LOL_img_lowlight.h5') 

(4) 使用 scikit-image.io 模块的 imread() 函数读取输入微光图像。需要注意的是,输入图像的像素值在 [0, 255] 范围内,而模型期望其输入在范围 [0, 1] 内,因此我们需要缩放图像;另外,我们需要使用 np.newaxis 扩展输入维度,因为模型期望输入尺寸为 1 x h x w x c,其中 hwc 分别表示图像的高度、宽度和颜色通道;调用模型的 predict() 方法,使用输入图像执行前向传播,获得增强的输出图像:

img = imread('Lighthouse_under.png')
print(img.max())
out_pred = mbllen.predict(img[np.newaxis, :] / 255)
out = out_pred[0, :, :, :3]

(5) 最后,使用 matplotlib.pyplot 绘制微光输入图像和增强后的输出图像:

def plot_image(image, title=None, sz=10):
    plt.imshow(image)
    plt.title(title, size=sz)
    plt.axis('off')

plt.figure(figsize=(20,10))
plt.subplot(121), plot_image(img, 'low-light input')
plt.subplot(122), plot_image(np.clip(out, 0, 1), 'enhanced output')
plt.tight_layout()
plt.show()

增强微光图像

小结

由于难以同时处理包括亮度、对比度、伪影和噪声在内的各种因素,微光图像增强问题是一项具有挑战性的任务。本节中,我们介绍了一种基于深度卷积神经网络的微光图像增强模型,多分支微光增强网络 (multi-branch low-light enhancement network, MBLLEN)。MBLLEN 的关键思想是提取不同尺度图像的丰富特征,以便我们可以通过多个子网应用图像增强,并最终通过多分支融合生成输出图像,从不同尺度的多个方面上改善图像质量。

系列链接

Python图像处理【1】图像与视频处理基础
Python图像处理【2】探索Python图像处理库
Python图像处理【3】Python图像处理库应用
Python图像处理【4】图像线性变换
Python图像处理【5】图像扭曲/逆扭曲
Python图像处理【6】通过哈希查找重复和类似的图像
Python图像处理【7】采样、卷积与离散傅里叶变换
Python图像处理【8】使用低通滤波器模糊图像
Python图像处理【9】使用高通滤波器执行边缘检测
Python图像处理【10】基于离散余弦变换的图像压缩
Python图像处理【11】利用反卷积执行图像去模糊
Python图像处理【12】基于小波变换执行图像去噪
Python图像处理【13】使用PIL执行图像降噪
Python图像处理【14】基于非线性滤波器的图像去噪
Python图像处理【15】基于非锐化掩码锐化图像
Python图像处理【16】OpenCV直方图均衡化
Python图像处理【17】指纹增强和细节提取
Python图像处理【18】边缘检测详解
Python图像处理【19】基于霍夫变换的目标检测
Python图像处理【20】图像金字塔

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/430436.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt::TabWidget

在Tab的右上角添加控件 QPushButton *add new QPushButton; add->setText(""); add->resize(30,30); ui->tabWidget->setCornerWidget(add,Qt::TopRightCorner); 结果: Tab添加子页 QWidget*newp new QWidget; ui->tabWidget->add…

Chain-of-thought prompting(链式思考提示)

1.大模型“涌现”的思维链 最近 AI 大厂的开发人员和高校的 NLP 研究人员,都在琢磨,怎么让大模型“涌现”。 所谓“涌现”,在大模型领域指的是当模型突破某个规模时,性能显著提升,表现出让人惊艳、意想不到的能力。比如…

【进击的算法】动态规划——01背包

🍿本文主题:动态规划 01背包 背包问题 C/C 算法 🎈更多算法:基础回溯算法 基础动态规划 💕我的主页:蓝色学者的主页 文章目录 一、前言二、概念✔️动态规划概念✔️01背包的概念 三、问题描述与讲解&#…

《PyTorch深度学习实践》第十一讲卷积神经网络进阶

一、 1、卷积核超参数选择困难,自动找到卷积的最佳组合。 2、1x1卷积核,不同通道的信息融合。使用1x1卷积核虽然参数量增加了,但是能够显著的降低计算量(operations) 3、Inception Moudel由4个分支组成,要分清哪些是在Init里定义…

数据库设计革命:逻辑模型的演变与面向对象的突破

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua,在这里我会分享我的知识和经验。&#x…

C 判断

判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。 C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false。 下面…

YOLOv7优化改进:下采样创新篇 | 新颖的下采样ADown | YOLOv9

💡💡💡本文独家改进:新颖的下采样ADown来自于YOLOv9,助力YOLOv7,将ADown添加在backbone和head处,提供多个yaml改进方法 💡💡💡在多个私有数据集和公开数据集VisDrone2019、PASCAL VOC实现涨点 收录 YOLOv7原创自研 https://blog.csdn.net/m0_63774211/ca…

Jmeter学习系列之七:并发线程组Concurrency Thread Group详解

一、Concurrency Thread Group的介绍 Concurrency Thread Group提供了用于配置多个线程计划的简化方法该线程组目的是为了保持并发水平,意味着如果并发线程不够,则在运行线程中启动额外的线程和Standard Thread Group不同,它不会预先创建所有线程,因此不会使用额外的内存对…

【数据结构】插入排序详细图解(一看就懂)

💯 博客内容:【数据结构】插入排序详细图解(一看就懂) 😀 作  者:陈大大陈 🦉所属专栏:数据结构笔记 🚀 个人简介:一个正在努力学技术的准前端,…

CleanMyMac X软件的清理效果怎么样?好不好用

在实际使用中,CleanMyMac X的清理效果非常显著。以下是一些实际的使用案例和数据: 清理效果的实例:一位Mac用户反映,他的Mac电脑在使用了三年后,通过CleanMyMac X的清理,成功清除了超过62GB的垃圾数据。这…

Cesium 自定义Primitive - 矩形

一、创作思路 1、创建一个自定义CustomPrimitive 2、然后根据两个点,生成矩形 3、方便后期绘制矩形 二、实现代码 1、在vue的包中加入turf. npm install turf/turf 1、创建一个CustomRectanglePrimitive类,并加入更新的代码 import {Color,GeometryInstance,Groun…

【PPT技巧】PPT怎么设置修改文件密码?

PPT文件制作好了之后,保护内容防止在演示时出错是很重要的,那么如何将PPT文件设置成禁止修改模式呢?今天分享几个方法给大家。 方法一 将PPT文件直接保存或者另存为一份文件,在保存时,将文件格式选择为PowerPoint图片…

win系统如何同时安装MySQL5和MySQL8

win系统如何同时安装MySQL5和MySQL8 文章目录 win系统如何同时安装MySQL5和MySQL81、准备好两种版本的数据库2、下载后解压到你指定的目录3、手动配置安装MySQL5和8安装MySQL53.1创建my.ini文件3.2生成data文件夹 安装MySQL83.1创建my.ini文件3.2生成data文件夹 4、配置环境变量…

【.NET Core】深入理解IO - 读取器和编写器

【.NET Core】深入理解IO - 读取器和编写器 文章目录 【.NET Core】深入理解IO - 读取器和编写器一、概述二、BinaryReader和BinaryWriter2.1 BinartReader类2.2 BinaryWriter类 三、StreamReader和StreamWriter3.1 StreamReader类3.1 StreamWriter类StreamWriter类构造函数Str…

【Datawhale组队学习:Sora原理与技术实战】Attention和LLM

Attention Attention 注意力,从两个不同的主体开始。 论文:https://arxiv.org/pdf/1703.03906.pdf seq2seq代码仓:https://github.com/google/seq2seq 计算方法: 加性Attention,如(Bahdanau attention&…

FL Studio2024中文版全新发布,水果音乐制作软件再升级

随着音乐制作技术的不断发展,FL Studio也在不断升级和完善。近日,备受期待的FL Studio2024中文版终于全新发布!这一版本的推出为广大音乐爱好者带来了更加丰富的音乐制作体验和更多创新功能。 FL Studio2024中文版在继承了之前版本强大功能的…

分享一本好书《大模型应用开发极简入门:基于GPT-4和ChatGPT》

如果问个问题:有哪些产品曾经创造了伟大的奇迹?ChatGPT 应该会当之无愧入选。仅仅发布 5 天,ChatGPT 就吸引了 100 万用户——当然,数据不是关键,关键是其背后的技术开启了新的 AI 狂潮,成为技术变革的点火…

没有硬件基础可以学单片机吗?

没有硬件基础可以学单片机吗? 在开始前我分享下我的经历,我刚入行时遇到一个好公司和师父,给了我机会,一年时间从3k薪资涨到18k的, 我师父给了一些 电气工程师学习方法和资料,让我不断提升自己&#xff0c…

以线缆行业为例,工业智能网关的实际应用及其带来的变革-天拓四方

工业智能网关是一种集数据采集、传输、处理和分析于一体的智能化设备。它能够实现对工业现场各种传感器、执行器等设备的数据进行实时采集,并通过网络传输到云端或本地数据中心进行分析处理。同时,工业智能网关还具备边缘计算能力,能够在本地…

uniapp开发android原生插件

一、下载原生开发SDK Android 离线SDK - 正式版 | uni小程序SDK (dcloud.net.cn)、 https://nativesupport.dcloud.net.cn/AppDocs/download/android.html 将开发uniappa原生android的插件解压到ben本地目录,目录结构如下: 接下就可以使用 UniPlugin-Hel…