超分辨率重建生成低分辨率图像,生成降质图像公认方法代码

AI老照片修复实战:从超分辨率到Real-ESRGAN部署全指南 图像超分辨率作为计算机视觉的基础技术,通过学习低质量到高质量图像的映射关系,实现了对图像细节的智能重建。其核心原理基于深度学习模型,能够有效提升图像分辨率并修复噪声、划痕等常见画质问题。这项技术的工程价值在于将传统依赖专业软件的复杂操作,转化为自动化、智能化的处理流程,大幅降低了图像修复的技术门槛。在实际应用场景中,它特别适用于老照片修复、历史影像数字化和家庭相册保存等领域。本文以热门的Real-ESRGAN开源项目为例,详细演示了从环境配置、模型部署到实战处理的全过程,并针对人脸修复等特定需求,对比了GF 阅读详情
AI摘要

本文介绍了超分辨率重建中常用的三种图像降质方法——bicubic-down (BI)、blur-down (BD) 和 bicubic-down+noise (DN),并提供了MATLAB的官方实现代码。这些方法常用于生成低分辨率图像以进行超分辨率模型的训练。文章附带了详细代码链接,方便读者参考和使用。

目录

1背景

2.BI

3.BD

4.DN

5总结


1背景

超分辨率重建中经典的生成降质图像通常使用MATLAB实现的,通常有四种方法:

类型说明
BIbicubic-down
BDblur-down
BNbicubic-down+noise
DNblur-down+noise

其中最常用的是BI,其次是BD,最后是DN。那我将其公认实现和出处总结起来,供大家参考。

注:在一些数据集中由于尺寸问题不能够被下采样的倍率所整除,导致生成数据用于训练测试时会出现很多麻烦,因此注意裁剪其大小。详细见下面代码。

注:关于其Python实现,可同时参考链接 图像/视频超分之降质过程和我的总结图像超分辨率数据集这一篇足够了,你需要注意什么?_Alocus_的博客-优快云博客_图像超分辨率数据集

2.BI

 下面是通过MATLAB公认利用bicubic生成低分辨率(BI)方法,摘自xinntao大大

https://github.com/XPixelGroup/BasicSR/blob/479ec97e8a23e49cc559c081f8ff80eac1bc5989/scripts/matlab_scripts/generate_bicubic_img.mhttps://github.com/XPixelGroup/BasicSR/blob/479ec97e8a23e49cc559c081f8ff80eac1bc5989/scripts/matlab_scripts/generate_bicubic_img.m

function generate_bicubic_img()
%% matlab code to genetate mod images, bicubic-downsampled images and
%% bicubic_upsampled images

%% set configurations
% comment the unnecessary lines
input_folder = '../../datasets/Set5/original';
save_mod_folder = '../../datasets/Set5/GTmod12';
save_lr_folder = '../../datasets/Set5/LRbicx2';
% save_bic_folder = '';

mod_scale = 12;
up_scale = 2;

if exist('save_mod_folder', 'var')
    if exist(save_mod_folder, 'dir')
        disp(['It will cover ', save_mod_folder]);
    else
        mkdir(save_mod_folder);
    end
end
if exist('save_lr_folder', 'var')
    if exist(save_lr_folder, 'dir')
        disp(['It will cover ', save_lr_folder]);
    else
        mkdir(save_lr_folder);
    end
end
if exist('save_bic_folder', 'var')
    if exist(save_bic_folder, 'dir')
        disp(['It will cover ', save_bic_folder]);
    else
        mkdir(save_bic_folder);
    end
end

idx = 0;
filepaths = dir(fullfile(input_folder,'*.*'));
for i = 1 : length(filepaths)
    [paths, img_name, ext] = fileparts(filepaths(i).name);
    if isempty(img_name)
        disp('Ignore . folder.');
    elseif strcmp(img_name, '.')
        disp('Ignore .. folder.');
    else
        idx = idx + 1;
        str_result = sprintf('%d\t%s.\n', idx, img_name);
        fprintf(str_result);

        % read image
        img = imread(fullfile(input_folder, [img_name, ext]));
        img = im2double(img);

        % modcrop
        img = modcrop(img, mod_scale);
        if exist('save_mod_folder', 'var')
            imwrite(img, fullfile(save_mod_folder, [img_name, '.png']));
        end

        % LR
        im_lr = imresize(img, 1/up_scale, 'bicubic');
        if exist('save_lr_folder', 'var')
            imwrite(im_lr, fullfile(save_lr_folder, [img_name, '.png']));
        end

        % Bicubic
        if exist('save_bic_folder', 'var')
            im_bicubic = imresize(im_lr, up_scale, 'bicubic');
            imwrite(im_bicubic, fullfile(save_bic_folder, [img_name, '.png']));
        end
    end
end
end

%% modcrop
function img = modcrop(img, modulo)
if size(img,3) == 1
    sz = size(img);
    sz = sz - mod(sz, modulo);
    img = img(1:sz(1), 1:sz(2));
else
    tmpsz = size(img);
    sz = tmpsz(1:2);
    sz = sz - mod(sz, modulo);
    img = img(1:sz(1), 1:sz(2),:);
end
end

3.BD

 下面是通过MATLAB使用公认的模糊(BD)方法生成低分辨率代码。摘自RDN

https://github.com/yulunzhang/RDN/blob/master/RDN_TrainCode/Prepare_TrainData/Prepare_TrainData_HR_LR_BD.mhttps://github.com/yulunzhang/RDN/blob/master/RDN_TrainCode/Prepare_TrainData/Prepare_TrainData_HR_LR_BD.m

function Prepare_TrainData_HR_LR_BD()
%% settings
path_save = './DIV2K';
path_src = './DIV2K/DIV2K_HR';
ext               =  {'*.jpg','*.png','*.bmp'};
filepaths           =  [];
for i = 1 : length(ext)
    filepaths = cat(1,filepaths, dir(fullfile(path_src, ext{i})));
end
nb_im = length(filepaths);
DIV2K_HR = [];

for idx_im = 1:nb_im
    fprintf('Read HR :%d\n', idx_im);
    ImHR = imread(fullfile(path_src, filepaths(idx_im).name));
    DIV2K_HR{idx_im} = ImHR;
end
%% generate and save LR via imresize() with Bicubic
kernelsize = 7;
sigma = 1.6;
for IdxIm = 1:nb_im
    fprintf('IdxIm=%d\n', IdxIm);
    ImHR = DIV2K_HR{IdxIm};
    ImLRx3 = imresize_BD(ImHR, 3, kernelsize, sigma);
    % name image
    digit = IdxIm;
    fileName = num2str(IdxIm);
    while digit < 1000
        fileName = ['0', fileName];
        digit = digit*10;
    end

    FolderLRx3 = fullfile(path_save, 'DIV2K_LR_bicubic', 'X3');
    
    if ~exist(FolderLRx3)
        mkdir(FolderLRx3)
    end

    NameLRx3 = fullfile(FolderLRx3, [fileName, 'x3BD.png']);
    % save image
    imwrite(ImLRx3, NameLRx3, 'png');
end


end

function ImLR = imresize_BD(ImHR, scale, kernelsize, sigma)
% ImLR and ImHR are uint8 data
% downsample by Bicubic
kernel  = fspecial('gaussian',kernelsize,sigma);
blur_HR = imfilter(ImHR,kernel,'replicate');
ImLR = imresize(blur_HR, 1/scale, 'nearest');

end

4.DN

下面是DN的 MATLAB实现

function Prepare_TrainData_HR_LR_DN()
%% settings
path_save = './DIV2K';
path_src = './DIV2K/DIV2K_HR';
ext               =  {'*.jpg','*.png','*.bmp'};
filepaths           =  [];
for i = 1 : length(ext)
    filepaths = cat(1,filepaths, dir(fullfile(path_src, ext{i})));
end
nb_im = length(filepaths);
DIV2K_HR = [];

for idx_im = 1:nb_im
    fprintf('Read HR :%d\n', idx_im);
    ImHR = imread(fullfile(path_src, filepaths(idx_im).name));
    DIV2K_HR{idx_im} = ImHR;
end
%% generate and save LR via imresize() with Bicubic
sigma = 30; % noise level
for IdxIm = 1:nb_im
    fprintf('IdxIm=%d\n', IdxIm);
    ImHR = DIV2K_HR{IdxIm};
    ImLRx3 = imresize_DN(ImHR, 3, sigma);
    % name image
    digit = IdxIm;
    fileName = num2str(IdxIm);
    while digit < 1000
        fileName = ['0', fileName];
        digit = digit*10;
    end

    FolderLRx3 = fullfile(path_save, 'DIV2K_LR_bicubic', 'X3');
    
    if ~exist(FolderLRx3)
        mkdir(FolderLRx3)
    end

    NameLRx3 = fullfile(FolderLRx3, [fileName, 'x3DN.png']);
    % save image
    imwrite(ImLRx3, NameLRx3, 'png');
end


end

function ImLR = imresize_DN(ImHR, scale, sigma)
% ImLR and ImHR are uint8 data
% downsample by Bicubic
ImDown = imresize(ImHR, 1/scale, 'bicubic'); % 0-255
ImDown = single(ImDown); % 0-255
ImDownNoise = ImDown + single(sigma*randn(size(ImDown))); % 0-255
ImLR = uint8(ImDownNoise); % 0-255
end

5总结

关于Python实现,以及详细信息,我还是想建议大家参考这边文章,总结的很不错,感谢稳扎那股作者以及参考文献中的作者们的贡献。!

图像/视频超分之降质过程

【超分辨率(Super-Resolution)】关于【超分辨率重建】专栏的相关说明,包含专栏简介、专栏亮点、适配人群、相关说明、阅读顺序、超分理解、实现流程、研究方向、论文代码数据集汇总等 本专栏研究领域为【超分辨率重建】,涵盖图像超分、视频超分,实时超分,4K修复等方面。主要内容包括主流算法模型的论文精读、论文复现、毕业设计、涨点手段、调参技巧、论文写作、应用落地等方面。算法模型从SRCNN开始更新至今,一般是一篇论文精读对应一篇论文复现。论文精读详解理论,归化繁为简,归纳核心,积累词句,培养阅读论文和论文写作能力。论文复现依托Pytorch代码,实现完整的模型训练流程,总结调参方法,记录碰到的bug,论文插图可视化,培养读写代码能力、做实验的能力、以及应用落地能力。 阅读详情

相关推荐

18、盲图像超分辨率中的深度傅里叶核利用

本文提出了一种深度傅里叶核利用框架,用于解决盲图像超分辨率中模糊核利用不充分和泛化能力受限的问题。通过解耦下采样与模糊核影响,引入过渡超分辨率图像,并设计核快速傅里叶卷积(KFFC)在频域显式建模模糊核与图像的相关性。该方法避免了传统PCA降维的信息丢失,提升了高频细节重建能力。实验表明,该框架在非盲和盲设置下均优于现有方法,具有良好的鲁棒性和可解释性。未来方向包括复杂模糊核建模、效率优化及与其他技术融合。

q1w3e5r7t9y的博客 97

Pytorch实现上采样upsample和下采样downsample 简单调用函数即可实现,超简单的代码块调用

# 上采用函数,输入数据格式示例:tensor维度[3,300,300],即3通道RGB,大小300×300,当然4通道图像也能做 def upsample(image_tensor, width, height, mode): # mode可用:最近邻插值"nearest",双线性插值"bilinear",双三次插值"bicubic",如mode="nearest" image_upsample_tensor = torch.nn.functional.interpolate(image.

星辰火之梦 1万+

OpenCV超分辨率重建实战:四种模型对比与代码实现

图像分辨率不足是图像处理中的常见痛点,传统插值算法如双线性、双三次只能机械填充像素,无法恢复真实细节。超分辨率重建技术通过深度学习模型从低分辨率输入中推理高频信息,是图像增强、老照片修复、视频增强等领域的基础能力。OpenCV的dnn_superres模块提供了EDSR、ESPCN、FSRCNN、LapSRN四种预训练模型,无需安装PyTorch、TensorFlow等重型框架,即可在Python环境中快速实现图像超分推理。本文对比了四种模型的原理、速度与效果,并给出统一的代码封装与批处理示例,帮助开发者根

weixin_29061465的博客 293

matlab实现降低图片的分辨率

本文用matlab实现降低图片的分辨率,假设一张500万像素的图片,使用该方法可以将像素降低到5万,但通过观察降低后的直方图 ,发现并没有多少区别。实现具体思路:将彩色图片灰度化后,获得其灰度直方图。确定其图片的长L和宽W,然后对其矩阵进行操作。L和W均设置步长为10,获得一个(L/10)*(W/10)的矩阵,接着显示该直方图。结果如图所示:(1)曝光不足实验结果:(2)曝光正常实验结果:(3)过...

bi_diu1368的专栏 2万+

图像超分辨率重建:卷积神经网络原理与PyTorch实战

图像超分辨率重建是计算机视觉中的经典问题,目标是从低分辨率图像恢复高频细节,其难点不在于放大尺寸,而在于如何补全缺失的纹理与边缘信息。传统插值算法仅能生成平滑轮廓,稀疏编码等方案虽能补细节,但工程化复杂且泛化能力有限。深度卷积神经网络通过端到端学习低分辨率到高分辨率的映射,将重建过程转化为卷积核的参数优化,其中SRCNN作为开山之作,以三层卷积结构即可超越传统方法。本文从数据准备、模型定义、训练循环到PSNR/SSIM评估,系统讲解基于PyTorch复现超分网络的完整流程,并讨论padding模式、多倍率训

weixin_33708633的博客 150

SRCNN超分辨率复现指南:从原理到PyTorch代码实现

图像超分辨率是计算机视觉中一项极具挑战的逆问题,其目标是从低分辨率输入中重建出合理的高频细节。传统方法依赖手工特征与稀疏编码,流程割裂且泛化能力有限。深度学习技术兴起后,卷积神经网络凭借强大的特征表示能力,为超分任务带来了端到端可训练的解决方案。SRCNN作为该领域的开山之作,用三个卷积层统一了特征提取、非线性映射与图像重建,并证明了在充足数据支撑下,网络可以学习到优于人工设计字典的图像先验。在工程实践中,SRCNN不仅在视频增强、医学影像、卫星遥感等场景具备应用价值,更因其结构简洁而成为理解超分原理与深度

weixin_29056101的博客 247

【Python】批量对文件做downsample并且以指定名称保存到文件夹中

实现了如下简单的功能 1:从一个文件夹中将现有的图片的路径做成一个list 2:根据上述做出的list,生成一个目标对象的路径以及名称并保存为list 3:通过一个统一的操作,将现有的图片做了操作后的结果保存到我定义的路径中,并根据自己的要求进行命名 · #- * - utf -8 -*- # 实现了如下简单的功能 #1:从一个文件夹中将现有的图片的路径做成一个list ...

yuanCruise 2162

BasicSR:用于超分辨率,去噪,去模糊等的开源图像和视频恢复工具箱。当前,它包括EDSR,RCAN,SRResNet,SRGAN,ESRGAN,EDVR等。还支持StyleGAN2,DFDNet

:rocket: 基本SR | | Google Colab: | :circled_M: :fast_down_button: Google云端硬盘: | :fast_down_button:百度网盘:| :file_folder: :fast_down_button: :fast_down_button:(提取码:basr) :chart_increasing: :laptop: :high_voltage: BasicSR(基本S- UPERřestoration)是基于PyTorch一个开源图像和视频恢复工具箱,如超分辨率,降噪,去模糊,JPEG伪像的去除,等等。 ( , , , ) ( , , , ) :sparkles: 新的功能 2020年11月29日。添加ESRGAN和DFDNet 。 2020年9月8日。添加盲人脸恢复推理代码: 。 2020年8月27日。添加StyleGAN2培训和测试代码: 。 更多的 2020年9月8日。添加盲人脸恢复推理代码: DFDNet 。 ECCV20:通过深度多尺度组件字典进行盲人脸恢

数字图像处理Malab/C++(一)灰度图像反色、缩放空间分辨率、降低灰度分辨率

读入任意一副灰度图片,请用Matlab程序实现以下功能:1. 读取图片,图片反色(即用:255 - 像素灰度值),存储为jpg图片;exp1_ex1.m2. 对该图片进行1/2,1/4,1/8,1/16,1/32缩放的图像空间分辨率显示(如图所示),并存储为jpg图片;exp1_ex2.m3. 实现图像的灰度分辨率图(1-8 bits),并存储为jpg图片;imratio.m(转换灰度分辨率函数)exp1_ex3.m。

lix_bo的博客 4348

超分辨率matlab代码-GFN-IJCV:GFN-IJCV

超分辨率matlab代码GFN-IJCV Wang Fei撰写的“用于降低图像超分辨率的门控融合网络” (IJCV接手,前两位作者对此做出了同等贡献) 。 [] 您可以在上找到我们以前的会议版本。 依存关系 Python 3.6 PyTorch> = 0.4.0 火炬视觉 麻木 skimage h5py 的MATLAB 超分辨不均匀的模糊图像 Git克隆此存储库。 $git clone https://github.com/BookerDeWitt/GFN-IJCV $cd GFN-IJCV/DBSR GFN_G3D_4x.pkl下载经过训练的模型GFN_G3D_4x.pkl ,然后解压缩并将GFN_G3D_4x.pkl移至GFN-IJCV/DBSR/models文件夹。 然后,您可以按照说明使用我们的最新代码和预先训练的模型来测试和训练我们的网络。 超分辨率模糊图像 测试方法: 在LR-RESIDE上测试 Git克隆此存储库。 $git clone https://github.com/BookerDeWitt/GFN-IJCV $cd GFN-IJCV/DHSR 从[Google云

matlab开发-调整图像的显示分辨率

matlab开发-调整图像的显示分辨率。与TrueSize相同,但适用于多图像图形。

[matlab数字图像处理2]对一张图像进行缩放,观察其分辨率,降低灰度分辨率两种模式,观察图像变化;

数字图像处理2

qq_46535765的博客 2969

改变图像的分辨率

数字图象处理实验一源代码 I=imread('lena.jpg'); imshow(I); for i=1:512 for j=1:512 R(i,j)=I(i,j); end end

超分辨率重建数据集制作:生成低分辨率数据集

背景 超分辨率重建任务需要高清和对应的低质图像。由于需要自己制作超分辨率重建数据集,需要将高分辨率图像按照公认的方式(DIV2k)制作为低分辨率图像,我根据网上代码进行了改造 可运行代码如下: 代码 import os import argparse import cv2 #parse args parser = argparse.ArgumentParser(description='Downsize images at 2x using bicubic interpolation') par

Alocus的博客 1万+

Ubuntu声卡检测与故障排查:从基础命令到驱动修复

本文详细介绍了在Ubuntu系统中进行声卡检测与故障排查的完整流程。从使用lspci、aplay等基础命令识别硬件,到排查驱动冲突、修复权限问题,再到调整PulseAudio高级配置,提供了一套系统性的解决方案。文章结合实战案例,帮助用户快速诊断并解决Ubuntu系统常见的“无声”问题,恢复音频功能。

g2h3i4j5的博客 228

智能驾驶域控(ADCU)方案介绍

本文主要对智能驾驶域控(ADCU)方案相关知识进行总结,以加深理解,及方便后续查漏补缺。

liuxu324的博客 1573

超分辨率重建数据集制作:高分辨率图像采集(从pdf中获取图像)

背景 嗯嗯 代码 ee 其他 ee

Alocus的博客 3223

Mooncake架构:基于KVCache解耦的LLM推理优化方案

在大语言模型推理中,KVCache是Transformer解码过程中用于缓存历史Key/Value向量的核心数据结构,它避免了序列重复计算,但会随上下文长度线性增长,成为显存占用的主要部分。其原理是在自回归生成时,将已计算过的注意力键值对存储下来,供后续Token生成时直接使用,从而提升计算效率。这项技术的核心价值在于,通过高效管理KVCache,可以显著降低长序列推理时的显存压力,提升GPU资源利用率。在实际应用场景中,尤其是在处理长上下文对话、高并发请求时,KVCache的管理策略直接决定了服务的吞吐量

weixin_35753431的博客 531

超分辨率重建数据集制作:裁剪过滤

背景 由于获取到的高分辨率图像尺寸不一,不符合公认的要求,因此我对图像进行了裁剪过滤,代码如下 代码 #coding=utf-8 from PIL import Image import random import os dirs = r'C:\Users\Administrator\Desktop\敦煌超分\数据集' result_dir = r'C:\Users\Administrator\Desktop\敦煌超分\数据集2' name= [] num = 1 list = os.listdir

Alocus的博客 2296

用Coze平台30分钟打造《花光10亿》小游戏:零代码AI开发实战

本文详细介绍了如何利用字节跳动推出的Coze平台,在30分钟内零代码开发一款名为《花光10亿》的AI小游戏。通过配置提示词、集成图像生成插件、构建自动化工作流以及使用数据库功能,即使没有编程基础的用户也能快速将创意转化为可交互的智能应用,体验AI开发的便捷与高效。

weixin_29313547的博客 206

Unity详细介绍说明限制Unity帧率的方式

在Unity开发中,帧率(FPS,Frames per Second)是一个非常重要的表现标准,它直接影响了游戏运行的流畅度。在某些应用场景里,我们可能需要手动限制帧率。限制帧率可以减少电脑的CPU和GPU负载,使运行更加稳定,同时对于移动设备来说还能有效降低电量消耗。下面就详细介绍几种限制Unity中帧率的方式。

zjw1349547081的专栏 5435

超分辨率重建双三次插值Bicubic生成高分辨率图像

目录 一背景 二代码 三注意 一背景 在超分任务中,为了做对比实验,需要双三次插值算法生成高分辨率图像。为此写了简单代码实现。 二代码 import os import argparse import cv2 # parse args parser = argparse.ArgumentParser(description='Upsize images using bicubic interpolation') parser.add_argument("-k", "--keepdi

Alocus的博客 3102

第42篇FEDGLOSS算法BEYOND LOCAL SHARPNESS:COMMUNICATION-EFFICIENT GLOBALSHARPNESS-AWARE MINIMIZATIONFOR

:用上一轮伪梯度最小化锐度,获取与全局损失最相关的几何信息,引导全局优化趋向更平坦的最小值。效果对比分析:FEDGLOss。

weixin_74009895的博客 526

ICCV2019超分辨率方向论文整理笔记

ICCV共举行了4天,在超分辨率上收录文章13篇。这里仅对单图像超分辨率相关的5篇论文作介绍。

ytao_wang的博客 3608

遗传算法(Genetic Algorithm)详解与实现

遗传算法(Genetic Algorithm, GA)是受自然进化原理启发的一系列搜索算法。通过模仿自然选择和繁殖的过程,遗传算法可以为涉及搜索、优化和学习的各种问题提供高质量的解决方案。同时,它们类似于自然进化,因此遗传算法可以克服传统搜索和优化算法遇到的一些障碍,尤其是对于具有大量参数和复杂数学表示形式的问题。

盼小辉丶的博客 24万+

Labview界面多按钮控件的一种处理方法

当界面中存在多个按钮控件时候,此时如果逐个为每个控件添加事件条件则会显得较为麻烦,此处提供了一种对多控件进行批量处理的方法

miracleis的博客 2702
上一篇: 图像超分辨率数据集制作问题总结,你需要注意什么?
下一篇: CCF推荐的A类、B类、C类中文科技期刊2022
Alocus_
Alocus_ 新星创作者: 人工智能技术领域 新星创作者: 人工智能技术领域
博客等级 码龄9年 2万+粉丝 184原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alocus_

如果我的内容帮助到你,打赏我吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值