图像处理之把模糊的图片变清晰

1.图片如果是有雾化效果的对图像产生影响的,要先进行图形增强,Retinex是基于深度神经网络了,我在之前图形处理的文章一路从神经网络(概率统计)—>积卷神经网络(对区域进行概率统计,对图片进行切割多个识别对象)–>深度积卷神经网络(RetinexNet也是模拟人脑的处理过程,增加模拟物体反射情况的层处理环境影响问题)

RetinexNet 是一种用于图像增强的神经网络模型。它基于 Retinex 理论,旨在提高图像的对比度和色彩平衡,从而改善图像的质量。

Retinex 理论是由 Edwin H. Land
提出的,该理论认为人类视觉系统对物体的颜色和亮度感知是基于物体的相对辐射度,而与环境光照条件无关。基于这一理论,RetinexNet
旨在实现类似的功能:将图像中的反射成分和阴影成分进行分离,以便更好地调整图像的对比度和亮度,从而使图像更加清晰、自然和易于理解。

RetinexNet
模型通常基于深度学习技术,使用卷积神经网络(CNN)等结构来学习图像增强的过程。它可以应用于许多图像处理任务,如去雾、去噪、增强对比度等,从而改善图像的质量和视觉效果。

总的来说,RetinexNet 是一种专门设计用于图像增强的神经网络模型,它的目标是改善图像的质量,使图像更加清晰、自然和易于理解。

2.代码 pyhton3.8

import tensorflow as tf
from tensorflow import keras

# 定义RetinexNet模型
def build_model(input_shape):
    input = keras.layers.Input(shape=input_shape)

    # 卷积层和池化层
    x = keras.layers.Conv2D(32, (3, 3), activation='relu', padding='same')(input)
    x = keras.layers.MaxPool2D((2,2))(x)
    x = keras.layers.Conv2D(64, (3, 3), activation='relu', padding='same')(x)
    x = keras.layers.MaxPool2D((2,2))(x)
    x = keras.layers.Conv2D(128, (3, 3), activation='relu', padding='same')(x)

    # 跳跃连接和残差块
    skip1 = x
    x = keras.layers.Conv2D(128, (3, 3), activation='relu', padding='same')(x)
    x = keras.layers.Conv2D(128, (3, 3), activation='relu', padding='same')(x)
    x = keras.layers.Add()([x, skip1])

    skip2 = x
    x = keras.layers.Conv2D(128, (3, 3), activation='relu', padding='same')(x)
    x = keras.layers.Conv2D(128, (3, 3), activation='relu', padding='same')(x)
    x = keras.layers.Add()([x, skip2])

    # 反卷积层
    x = keras.layers.Conv2DTranspose(64, (3, 3), strides=(2, 2), activation='relu', padding='same')(x)
    x = keras.layers.Conv2DTranspose(32, (3, 3), strides=(2, 2), activation='relu', padding='same')(x)

    # 输出层
    output = keras.layers.Conv2D(3, (3, 3), activation='sigmoid', padding='same')(x)

    model = keras.models.Model(input, output)
    return model

# 加载数据集并准备训练数据
(x_train, _), (x_test, _) = keras.datasets.cifar10.load_data()
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.

# 构建和编译模型
model = build_model(x_train.shape[1:])
model.compile(optimizer='adam', loss='mse')

# 训练模型
model.fit(x_train, x_train, epochs=10, batch_size=32, validation_data=(x_test, x_test))

# 保存模型
model.save('retinexnet.h5')


#会生成模型文件
在这里插入图片描述

2.使用模型进行图形增强(模型的训练集是默认的CIFAR-10 ) 如果我们想要对特定的物体进行增强,我们可以使用自己的训练数据,比如草莓,我有个大胆的想法,对老的电影的变成高清电源是不是可以用这个模型,那一定在电影业一定有被大量训练过的模型,就不知道开不开源…
https://www.cs.toronto.edu/~kriz/cifar.html
//测试

import tkinter as tk
from PIL import Image, ImageTk
import tensorflow as tf
import numpy as np

# 加载模型
model = tf.keras.models.load_model('retinexnet.h5')

# 创建Tkinter窗口
root = tk.Tk()
root.title("Enhanced Image Prediction")

# 加载图像并进行预测
image = Image.open('aa/2/blur.png')
image = image.resize((32, 32))  # 调整图像大小
image_array = np.array(image)  # Convert to NumPy array
image_array = image_array / 255.0  # 缩放到 [0, 1] 范围内
image_tensor = tf.convert_to_tensor(image_array, dtype=tf.float32)  # Convert to tensor
enhanced_image = model.predict(tf.expand_dims(image_tensor, axis=0))

# 将NumPy数组转换为PIL图像对象
enhanced_image = (enhanced_image * 255).astype(np.uint8)
enhanced_image = np.squeeze(enhanced_image, axis=0)  # 去除batch维度
enhanced_image = Image.fromarray(enhanced_image)

# 将PIL图像对象转换为Tkinter PhotoImage对象
enhanced_image_tk = ImageTk.PhotoImage(enhanced_image)

# 在窗口中显示原始图像
original_label = tk.Label(root, text="Original Image")
original_label.pack()
original_img = Image.open('aa/2/blur.png')
original_img = original_img.resize((200, 200))
original_photo = ImageTk.PhotoImage(original_img)
original_label = tk.Label(image=original_photo)
original_label.image = original_photo
original_label.pack()

# 在窗口中显示增强后的图像
enhanced_label = tk.Label(root, text="Enhanced Image")
enhanced_label.pack()
enhanced_label = tk.Label(image=enhanced_image_tk)
enhanced_label.image = enhanced_image_tk
enhanced_label.pack()

# 启动Tkinter事件循环
root.mainloop()

#效果貌似就是把图片缩小了,确实清晰很多,
在这里插入图片描述
#emmm,貌似没有什么变化,可能训练数据太少了
在这里插入图片描述

3.使用其他人的模型进行图片分辨率高清化处理

import tensorflow as tf
import tensorflow_hub as hub
from tensorflow.keras.preprocessing.image import array_to_img

# 加载EDSR模型
model = hub.load("https://tfhub.dev/captain-pool/esrgan-tf2/1")

# 读取图像文件
image = tf.io.read_file('aa/2/blur.png')
image = tf.image.decode_jpeg(image, channels=3)
input_image = tf.expand_dims(image, axis=0)  # 增加批次维度
input_image = tf.cast(input_image, tf.float32)

# 使用EDSR模型进行超分辨率重建
output_image = model(input_image)

# 输出重建后的图像
reconstructed_image = output_image[0]

# 将重建图像转换为PIL图像对象并保存
reconstructed_image_pil = array_to_img(reconstructed_image.numpy())
reconstructed_image_pil.save('output_image.png')

#之前的图片
在这里插入图片描述
#效果看起来比较像真实的草莓
在这里插入图片描述

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

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

相关文章

挑选分支中某一个提交进行合并

复制提交的哈希(sha-1)值 挑选提交 git cherry-pick 复制过来的哈希值 若有冲突,解决冲突,没有冲突,即合并完成

C语言普里姆(Prim)算法实现计算国家建设高铁运输网最低造价的建设方案

背景: 描述:为促进全球更好互联互通,亚投行拟在一带一路沿线国家建设高铁运输网,请查阅相关资料 画出沿线国家首都或某些代表性城市的连通图,为其设计长度最短或造价最低的高铁建设方案。 要求:抽象出的图…

Linux-进程之间的通信

目录 ​编辑 一.什么是进程之间的通信 二.进程之间的通信所访问的数据 三.进程之间的通信是如何做到的 四.基于内存文件级别的通信方式——管道 1.什么是管道 2.管道的建立过程——匿名管道 a.什么是匿名管道 b.匿名管道特点: c.使用匿名管道的…

Peter算法小课堂—贪心算法

课前思考:贪心是什么?贪心如何“贪”? 课前小视频:什么是贪心算法 - 知乎 (zhihu.com) 贪心 贪心是一种寻找最优解问题的常用方法。 贪心一般将求解过程分拆成若干个步骤,自顶向下,解决问题 太戈编程第…

邮政单号查询,邮政快递物流查询,并进行提前签收分析

批量查询邮政快递单号的物流信息,并将提前签收件分析筛选出来。 所需工具: 一个【快递批量查询高手】软件 邮政快递单号若干 操作步骤: 步骤1:运行【快递批量查询高手】软件,第一次使用的朋友记得先注册&#xff0c…

关于svn如何上传一个完整的项目

注意:请一定要按照该步骤进行操作,请上传新项目时将项目名称进行规范命名 例如原始文件是arrange_v2 将此项目需要注入新的医院 则命名为 arrange_某医院名称_门诊或者医技或者药房_v2 重新命名文件夹名称快捷键 (F12) 一 &…

【Linux】公网远程访问AMH服务器管理面板

目录 1. Linux 安装AMH 面板2. 本地访问AMH 面板3. Linux安装Cpolar4. 配置AMH面板公网地址5. 远程访问AMH面板6. 固定AMH面板公网地址 AMH 是一款基于 Linux 系统的服务器管理面板,它提供了一系列的功能,包括网站管理、FTP 管理、数据库管理、DNS 管理、…

UI自动化测试工具的定义及重要性

UI自动化测试工具在现代软件开发中起着不可或缺的作用。它们能够提高测试效率、减少人为错误、提供全面的测试覆盖,并支持持续集成。通过有效使用UI自动化测试工具,开发团队可以提高软件质量,提供更可靠的应用程序,满足用户的需求…

Jsoup爬取HTTPS页面数据资源,并导入数据库(Java)

一、实现思路 示例页面: 2020年12月中华人民共和国县以上行政区划代码 忽略https请求的SSL证书通过Jsoup获取页面标签遍历行标签,分别获取每个行标签的第二个和第三个列标签将获取到的行政代码和单位名称分别插入sql语句占位符执行sql语句&#xff0c…

掌汇云 | 全场景数据追踪,多维了解用户偏好,提高运营效率

掌汇云拥有黄金“三件套”:掌头条、汇互动、云品牌。群硕借助这些功能套件,面向细分领域如:会展,食品饮料、医药以及工业等,定制综合性信息服务平台,提供资讯、商机、企业人脉、上下游资源、活动等高质量服…

<软考>软件设计师-3程序设计语言基础(总结)

(一) 程序设计语言概述 1 程序设计语言的基本概念 1-1 程序设计语言的目的 程序设计语言是为了书写计算机程序而人为设计的符号语言,用于对计算过程进行描述、组织和推导。 1-2 程序语言分类 低级语言 : 机器语言(计算机硬件只能识别0和1的指令序列)&…

docker网络【重点】

一、网络知识 1、桥接模式:用于链接两个不同网络段的设备,是共享通信的一种方式 2、桥接设备:工作在OSI模型的第二层(数据链路层)。根据MAC地址转发数据帧,类似于交换机,只能转发同一网段&…

使用Inno Setup 打包程序文件 怎么把其中一个文件安装时复制到指定系统文件夹

环境: Inno Setup 6.6 Win10 专业版 问题描述: 使用Inno Setup 打包程序文件 怎么把其中一个文件安装时复制到指定系统文件夹 将文件api-ms-win-shcore-scaling-l1-1-1.dll复制到system32里面 解决方案: 1.由于安全和权限的限制,直接在Inno Setup脚本中复制文件到C:\…

Mysql综合案例练习<1>

MySql综合案例练习<1> 题目一题目二题目三题目四题目五题目六题目七题目八题目九题目十题目十一题目十二题目十三题目十四题目十五题目十六题目十七题目十八题目十九 题目一 创建数据库test01_library 创建表 books&#xff0c;表结构如下&#xff1a; CREATE DATABASE …

Tap虚拟网卡

1 概述 Tap设备通常用于虚拟化场景下&#xff0c;其驱动代码位于drivers/net/tun.c&#xff0c;tap与tun复用大部分代码&#xff0c; 注&#xff1a;drivers/net/tap.c并不是tap设备的代码&#xff0c;而是macvtap和ipvtap&#xff1b; 下文中&#xff0c;我们统一称tap&#…

了解Linux网络配置

本章主要介绍网络配置的方法。 网络基础知识 查看网络信息 图形化界面修改 通过配置文件修改 命令行管理 11.1 网络基础知识 一台主机需要配置必要的网络信息&#xff0c;才可以连接到互联网。需要的配置网络信息包括IP、 子网掩码、网关和 DNS。 11.1.1 IP 地址 在计算机…

0010Java安卓程序设计-ssm基于安卓的掌上校园系统

文章目录 **摘要**目录系统实现5.2管理员功能模块开发环境 编程技术交流、源码分享、模板分享、网课分享 企鹅&#x1f427;裙&#xff1a;776871563 摘要 随着Internet的发展&#xff0c;人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化&#xff0c;…

【Java系列】函数式接口编程

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【redis笔记】redis应用

redis应用 redis 发布订阅 redis客户端可以订阅任意数量的频道 订阅方式 subscribe channel1 – 订阅了channel1频道 发布方式 订阅了之后&#xff0c;可以在任意客户端发布消息到指定channel publish channel1 hello – 往channel发布hello&#xff0c;会返回订阅channe…