真实世界单图像超分辨率:新基准与新模型解析

需积分: 26 4 下载量 37 浏览量 更新于2024-07-05 1 收藏 2.02MB DOCX 举报
“Toward Real-World Single Image Super-Resolution” 是一篇由阿里达摩院的研究者提出的关于超分辨率重建技术的论文,该论文提出了一种基于多尺度的退化核估计网络模型,并创建了首个真实超分辨率图像数据集,解决了传统方法依赖人工数据训练的问题,推动超分辨率技术向学习真实退化核的方向发展。 本文讨论的核心知识点: 1. **单图像超分辨率(SISR)**:SISR是图像处理领域的一个关键任务,旨在从低分辨率图像中恢复高分辨率图像,以提高图像的细节和清晰度。它是一个高度不适定的逆问题,需要利用图像先验知识来解决。 2. **模拟数据集的局限性**:传统的SISR方法通常在使用双三次下采样等简单均匀退化的模拟数据集上训练模型。然而,真实世界中的图像退化过程更为复杂,导致这些模型在实际应用中表现不佳。 3. **真实超分辨率(RealSR)数据集**:阿里达摩院的研究者构建了一个新的数据集,通过调整数码相机的焦距获取高分辨率和低分辨率图像对,以模拟真实世界的退化过程。这个数据集能够更好地反映实际的图像退化情况。 4. **图像配准算法**:为了处理不同分辨率图像对的对齐问题,研究者开发了一种图像配准算法,确保LR-HR图像对的精确对应,为模型训练提供准确的数据基础。 5. **基于拉普拉斯金字塔的内核预测网络(LPKPN)**:针对RealSR数据集中的非均匀退化,研究者提出了一种新的网络模型LPKPN,它能够学习每个像素的退化内核,从而更有效地恢复高分辨率图像。 6. **模型泛化能力**:虽然RealSR数据集仅基于两台特定相机(佳能5D3和尼康D810)构建,但经过该数据集训练的模型能够很好地推广到其他相机设备,如索尼a7II和手机,展示了良好的跨设备泛化性能。 7. **深度学习与CNN在SISR中的应用**:随着深度学习,尤其是卷积神经网络的发展,SISR领域的模型设计和性能得到了显著提升。研究者通过设计新的CNN架构和损失函数,持续优化SISR模型的性能。 8. **挑战与未来方向**:尽管RealSR数据集和LPKPN模型是进步,但模型在应对各种未知的、复杂的退化模式时仍面临挑战。未来的研究可能会探索更通用的模型,以适应广泛的实际应用场景,并进一步提升真实世界图像的超分辨率效果。

import numpy as np import numpy.fft as fft import scipy.ndimage as nd import imageio import scipy.misc as misc from math import pi #Read in source image #source = nd.imread("einstein.bmp", flatten=True) source = imageio.imread("einstein.bmp", as_gray=True) #Pad image to simulate oversampling pad_len = len(source) padded = np.pad(source, ((pad_len, pad_len),(pad_len, pad_len)), 'constant', constant_values=((0,0),(0,0))) ft = fft.fft2(padded) #simulate diffraction pattern diffract = np.abs(ft) l = len(padded) #keep track of where the image is vs the padding mask = np.ones((pad_len+2,pad_len+2)) mask = np.pad(mask, ((pad_len-1, pad_len-1),(pad_len-1, pad_len-1)), 'constant', constant_values=((0,0),(0,0))) #Initial guess using random phase info guess = diffract * np.exp(1j * np.random.rand(l,l) * 2 * pi) #number of iterations r = 801 #step size parameter beta = 0.8 #previous result prev = None for s in range(0,r): #apply fourier domain constraints update = diffract * np.exp(1j * np.angle(guess)) inv = fft.ifft2(update) inv = np.real(inv) if prev is None: prev = inv #apply real-space constraints temp = inv for i in range(0,l): for j in range(0,l): #image region must be positive if inv[i,j] < 0 and mask[i,j] == 1: inv[i,j] = prev[i,j] - beta*inv[i,j] #push support region intensity toward zero if mask[i,j] == 0: inv[i,j] = prev[i,j] - beta*inv[i,j] prev = temp guess = fft.fft2(inv) #save an image of the progress if s % 10 == 0: #imageio.imsave("/Users/chasegoddard/Stuff/CDI/code/save/progress" + str(s) + # ".bmp", prev) imageio.imsave("C:/Users/Administrator/Desktop/仿真结果/结果" + str(s) + ".bmp", prev) print(s)

2023-07-16 上传