超分辨率初体验
图像的超分辨率重建技术指的是将给定的低分辨率图像通过特定的算法恢复成相应的高分辨率图像。具体来说,图像超分辨率重建技术指的是利用数字图像处理、计算机视觉等领域的相关知识,借由特定的算法和处理流程,从给定的低分辨率图像中重建出高分辨率图像的过程。其旨在克服或补偿由于图像采集系统或采集环境本身的限制,导致的成像图像模糊、质量低下、感兴趣区域不显著等问题。
简单来理解超分辨率重建就是将小尺寸图像变为大尺寸图像,使图像更加“清晰”。
个人理解
超分辨率会产生新信息,直接的图片拉伸不会产生新的信息。
- 例1:1080的图像分别按两种方式扩展到4k。超分辨率的图像更清晰,但是比1080原图模糊。
原因:直接的图片拉伸没产生新信息,扩展成4k以后信息密度下降,变得极为模糊。虽然超分辨率产生的新的信息,但是信息密度下降(非无损拉伸)。
在低分辨率未拉伸的图片上,超分辨率仅能以类似“无损”拉伸的方式使图像变“大”,如果图像本身不匹配显示设备(例如1080的图片拉伸方式显示在4k设备上),超分辨率能提升图片的清晰度。
总结:在高分辨率显示设备上清晰显示低分辨率图像。
若要修复因为码率等种种原因导致观感极差的图片,我觉得可以超分辨率以后将图片显示在像素密度更大的显示设备上,这样信息密度就提升了,图片也变得更清晰?
纯属个人理解,如果有问题的话欢迎指正。
例程
就简单跑一下吧。
-
创建py3.6或3.7的虚拟环境 -
conda install tensorflow=2.0.0 #装GPU版本也行
-
pip install ISR
-
pip install 'h5py==2.10.0' --force-reinstall
-
写个demo:主要展示了4种超分辨率模型 import numpy as np
from PIL import Image
from ISR.models import RDN
from ISR.models import RRDN
img = Image.open('134.jpg')
img.show()
lr_img = np.array(img)
rdn = RDN(weights='psnr-small')
sr_img = rdn.predict(lr_img)
out_img = Image.fromarray(sr_img)
out_img.show()
rdn = RDN(weights='psnr-large')
sr_img = rdn.predict(lr_img)
out_img = Image.fromarray(sr_img)
out_img.show()
rrdn = RRDN(weights='gans')
sr_img = rrdn.predict(lr_img)
out_img = Image.fromarray(sr_img)
out_img.show()
rdn = RDN(weights='noise-cancel')
sr_img = rdn.predict(lr_img)
out_img = Image.fromarray(sr_img)
out_img.show()
-
简单展示下效果:(从左到右依次是原图,原图压缩再拉伸的图像,原图压缩再超分辨率的图像)
|