使用OpenCV实现图像超分辨率(Python)

AI超分辨率

超分辨率技术指的是将低分辨率的图像或视频通过算法转换成高分辨率的图像或视频的操作。

超分辨率可以分为两种:单图像超分辨率(Single Image Super Resolution,SISR)和视频超分辨率(Video Super Resolution,VSR)。

OpenCV中的超分辨率功能被集中在了contrib模块中,因此我们首先需要安装该模块,可以使用以下代码进行安装:

pip install opencv-contrib-python==4.4.0.44 -i https://pypi.tuna.tsinghua.edu.cn/simple/ 

如果原来就存在opencv-python库,再安装opencv-contrib-python库,在运行代码时可能会导致错误;解决办法是先将所有的opencv库卸载,然后安装opencv-contrib-python库。

OpenCV视觉库目前仅支持四种不同的图像超分辨率模型,它们可以实现2倍、3倍、4倍甚至8倍的图像超分辨率。这些模型的具体描述如下:

  • EDSR(CVPR2017):模型大小为~38.5MB,Batch Size=16训练了3天,优点是精确度高,缺点是模型大、速度慢,提供x2、x3、x4训练模型。
  • ESPCN(CVPR2016):模型大小为~100KB,Batch Size=32训练了大约100次迭代,优点是体积小、速度快、性能依然很好,缺点是在视觉上的表现不如更新、更稳健的模型,提供x2、x3、x4训练模型。
  • FSRCNN(ECCV2016):模型大小为~40KB,Batch Size=1训练了大约30次迭代,优点是快速、小巧、准确,缺点是精度不够高。
  • LapSRN(CVPR2017):模型大小为1-5MB,Batch Size=32训练了大约50次迭代,优点是模型一次顺传就可以做多尺度超分辨率,它现在可以支持2x、4x、8x以及[2x、4x]和[2x、4x、8x]超分辨率,缺点是速度比ESPCN和FSRCNN慢,精度比EDSR差,提供x2、x4、x8训练模型。

以上四个模型的下载地址为:https://github.com/opencv/opencv_contrib/tree/master/modules/dnn_superres

实现代码如下:

import cv2
from cv2 import dnn_superres

img = cv2.imread(r'F:/SuperResolution/test_image_720p.jpg')  # 读取720p的图像
trained_model_path = r'F:/SuperResolution/TF-ESPCN/export/ESPCN_x2.pb'  # 训练好的ESPCN_x2模型的存储路径

sr = dnn_superres.DnnSuperResImpl_create()  # 实例化对象
sr.readModel(trained_model_path)  # 读取ESPCN_x2模型
sr.setModel('espcn', 2)  # 设置超分图像放大比例(与训练模型的超分倍数一致),放大图像
result = sr.upsample(img)  # 上采样,超分

cv2.imwrite(r'F:/SuperResolution/result_image_2k.jpg', result)  # 保存2k图像

猜你喜欢

转载自blog.csdn.net/weixin_48158964/article/details/131612368