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

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

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

Retinex 理论是由 Edwin H. Land

提出的,该理论认为人类视觉系统对物体的颜色和亮度感知是基于物体的相对辐射度,而与环境光照条件无关。基于这一理论,RetinexNet

旨在实现类似的功能:将图像中的反射成分和阴影成分进行分离,以便更好地调整图像的对比度和亮度,从而使图像更加清晰、自然和易于理解。

RetinexNet

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

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

2.代码 pyhton3.8

python 复制代码
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

//测试

python 复制代码
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.使用其他人的模型进行图片分辨率高清化处理

python 复制代码
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')

#之前的图片

#效果看起来比较像真实的草莓

相关推荐
用户9385156350717 分钟前
从Vibe Coding到SDD:规范驱动开发如何拯救AI编程失控
人工智能
蓝速科技33 分钟前
蓝速科技桌面 AI 双屏翻译机:开放安卓系统商用价值解析
人工智能·科技
博、、37 分钟前
社区家政平台开发实战指南:从需求分析到系统部署全流程解析
人工智能·数据挖掘·需求分析
Python私教40 分钟前
别急着加 llms.txt:企业官网面向 AI 搜索的工程清单
前端·人工智能·seo
Tokenge44 分钟前
AI 前沿日报|2026.08.19:模型安全按下减速键,智能体进入“可控落地”新阶段
人工智能·安全
东方小月1 小时前
从零开发一个 Coding Agent(十三):实现安全的 read 文件读取工具
前端·人工智能·全栈
stuartevil1 小时前
怎么用 AI 创意生图做汽车改装外观效果图?
人工智能·汽车
嗯哼python1 小时前
从 0 到 1 构建 AI 模拟面试系统:RAG + LangGraph 的工程实践
人工智能·面试·职场和发展
空堂与归1 小时前
分类问题怎么建模?用逻辑回归实现概率预测
人工智能·机器学习·分类·逻辑回归
VisualComponents2 小时前
SEJFO依托Visual Components仿真工具,实现自动化业务销售全面升级
人工智能·机器人·工业自动化·工厂仿真·机器人离线编程