欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > 图像超分,提高图像分辨率的方法和工具

图像超分,提高图像分辨率的方法和工具

2025/2/23 6:41:29 来源:https://blog.csdn.net/A41915460/article/details/145110329  浏览:    关键词:图像超分,提高图像分辨率的方法和工具

图像超分是一种图像处理技术,旨在提高图像的分辨率,使其具有更高的清晰度和细节。这一技术通常用于图像重建、图像恢复、图像增强等领域,可以帮助我们更好地理解和利用图像信息。图像超分技术可以通过多种方法实现,包括插值算法、深度学习等。其中,深度学习的方法在近年来得到了广泛的关注和应用。基于深度学习的图像超分技术,可以利用深度神经网络学习图像的高频部分,从而提高了图像的分辨率和清晰度。

总结:传统方法效果不佳,但是扭曲较小,深度学习的效果较好,带上会带来部分扭曲,特别是文字部分。

一、传统的扩大图像的方法
主要使用差值法和重采样的方法,PIL、openCV、scikit-imge等库有相关的功能。
双线性插值(Bilinear Interpolation)和双三次插值(Bicubic Interpolation)它们通过计算相邻像素的加权平均来估计新的像素值。虽然简单且快速,但边缘可能不够平滑,有小方块。手动拉大图像和指定尺寸用的就是这种方法。

以下是双三次插值的方法,一般而言效果要比双线性插值要好一点,但是高频区域可能会有扭曲。

实测:效果不明显,图片放大后并没有变清晰,但也没有变模糊。也没有扭曲

from PIL import Image# 图像路径
path1 = r"C:\Users\xueshifeng\Desktop\微信截图_20250108094001.png"
path2 = r"C:\Users\xueshifeng\Desktop\微信截图_20250108094001_resized.png"# 打开图片文件
img = Image.open(path1)# 新的宽度和高度
new_width, new_height = 1500, 1500# 调整大小并应用双三次插值
resized_img = img.resize((new_width, new_height), Image.BICUBIC)# 保存结果
resized_img.save(path2)

Lanczos重采样:Lanczos插值通过使用一个基于sinc函数的窗口化滤波器,Lanczos重采样通常被称为“锐化滤波器”,它可以提高检测边缘和线性特征的能力,在保持边缘清晰度方面,提供比双线性和双三次插值更好的质量。但是他对噪声敏感,他是一种低通滤波器,可以消除缩放过程中产生的混叠现象,这对于维持图像的整体结构是有利的。但是抑制了一些高频成分,从而可能丢失了一些微小但重要的空间精度,可能带来局部模糊。

实测:图片放大后并没有变清晰,但也没有变模糊。也没有扭曲。

from PIL import Image
path1=r"xx.png"
path2=r"xx.png"
# 打开图片文件
img = Image.open(path1)
new_width, new_height=1500,1500
# 调整大小并应用Lanczos重采样
resized_img = img.resize((new_width, new_height), Image.LANCZOS)# 保存结果
resized_img.save(path2)

二、基于深度学习的方法
应用最为广泛的方法是 ESRGAN(Enhanced Super-Resolution Generative Adversarial Networks)及其改进版本Real-ESRGAN。ESRGAN 引入了生成对抗网络(GAN),特别是对抗性损失(adversarial loss),这使得生成的高分辨率图像更加逼真,边缘更加清晰锐利。与传统的基于均方误差(MSE)训练的模型相比,GAN 可以产生视觉上更令人满意的输出。ESRGAN 使用感知损失来指导模型学习更高层次的特征表示,而不是仅仅追求像素级别的相似度。这种方法有助于捕捉图像中的语义信息,从而生成更自然、细节丰富的高分辨率图像。

参考文献:腾讯ARC实验室发布的一个图像超分辨率模型Real-ESRGAN

https://www.cnblogs.com/RSran/p/17832024.html

使用方法:由于 pip install realesrgan 安装库的方法总是报错,下面介绍基于桌面端应用的方法

由于使用该应用需要将图片放在realesrgan-ncnn-vulkan.exe同目录下,然后使用cmd命令行跳转至这个目录,输入下面的命令。

./realesrgan-ncnn-vulkan.exe -i 输入图像.jpg -o 输出图像.png -n 模型名字

将以上过程封装成Python脚本
1、将目标图像复制一份放在realesrgan-ncnn-vulkan.exe同目录下。
2、跳转至这个目录,并输入命令
3、将转化后的图像复制到指定路径
4、删除复制到realesrgan-ncnn-vulkan.exe同目录下的图像
将上述功能封装成函数其中realesrgan-ncnn-vulkan.exe目录、要处理的图片文件路径和输出文件路径是参数。

其中模型介绍如下:
realesrgan-x4plus(默认)
reaesrnet-x4plus
realesrgan-x4plus-anime(针对动漫插画图像优化,有更小的体积)
realesr-animevideov3 (针对动漫视频)

以下为代码,实测图像很清晰,文字的笔顺会有一定的扭曲,直笔会变弯曲。

import os
import shutil
import subprocessdef process_image_with_realesrgan(realesrgan_executable_path, input_image_path, output_image_path, model_name):# 获取 realesrgan-ncnn-vulkan.exe 的目录realesgan_dir = os.path.dirname(realesrgan_executable_path)# 获取输入图像的文件名input_image_filename = os.path.basename(input_image_path)# 构建临时图像路径temp_input_image_path = os.path.join(realesgan_dir, input_image_filename)try:# 1. 将目标图像复制到 realesrgan-ncnn-vulkan.exe 所在目录shutil.copy(input_image_path, temp_input_image_path)# 2. 跳转到该目录并执行命令command = [realesrgan_executable_path,'-i', input_image_filename,'-o', 'output.png']if model_name:command.extend(['-n', model_name])subprocess.run(command, check=True, cwd=realesgan_dir)# 3. 将转换后的图像复制到指定的输出路径converted_image_path = os.path.join(realesgan_dir, 'output.png')shutil.copy(converted_image_path, output_image_path)finally:# 4. 删除复制到 realesrgan-ncnn-vulkan.exe 目录下的图像if os.path.exists(temp_input_image_path):os.remove(temp_input_image_path)if os.path.exists(converted_image_path):os.remove(converted_image_path)# 示例调用
if __name__ == "__main__":exe_dir = r"D:\Program Files (x86)\realesrgan-ncnn-vulkan-20220424-windows\realesrgan-ncnn-vulkan.exe"input_image_path = r" "output_image_path = r" "  # 修改输出路径以避免覆盖原图model_name = ''  # 默认模型不加名字process_image_with_realesrgan(realesrgan_executable_path=exe_dir,input_image_path=input_image_path,output_image_path=output_image_path,model_name=model_name)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词