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

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万+

学习笔记——神经科学的数学基础

m%3D2X_%7Bi%7DiNy%3DAxW%3DABx_%7Bj%7Dy_%7Bi%7Dy%3DWxt=N7T8卷积神经网络(CNN)详细介绍及其原理详解_IronmanJay的博客-优快云博客https://blog.youkuaiyun.com/IronmanJay/article/details/128689946?

zxyopenstar的博客 1374

【AI编程】用AI开发STM32软件(1):环境配置+AI编写LED闪烁

现在AI编程这么火,不拿来开发嵌软也太可惜了。笔者最近刚好有个2学分的实践课,要自己做项目,这不,机会就来了。笔者特意记录下来其过程,以供大家学习和参考。使用:VSCode+Copilot+EIDE+STM32CubeMX,单片机用最经典的stm32f103c8t6+STLink。

qq_23220445的博客 4572

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

背景 嗯嗯 代码 ee 其他 ee

Alocus的博客 3223

用朴素贝叶斯分类模型判断病人是否感染幽门螺杆菌(Python实现)

朴素贝叶斯,Python

weixin_56529327的博客 1160

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

背景 由于获取到的高分辨率图像尺寸不一,不符合公认的要求,因此我对图像进行了裁剪过滤,代码如下 代码 #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

排查单片机不工作的‘玄学’故障:从LDO选型、复位电路到焊接不良的完整避坑指南

本文深入剖析单片机不工作的常见硬件故障,从LDO选型、复位电路设计到PCB布局和焊接工艺,提供系统性排查方法。重点分析3.3V电源稳定性、LDO动态响应特性及复位电路设计要点,帮助工程师快速定位和解决嵌入式系统中的'玄学'故障,提升产品可靠性。

weixin_30655569的博客 387

Tushare Pro的安装使用——“抱歉,您没有访问该接口的权限,权限的具体详情访问:https://tushare.pro/document/1?doc_id=108”问题

最近做毕设关于量化交易的, 因此一直使用tushare作数据源,但是过程中到一些问题,因此这里写篇文章,供大家一起交流下。 Tushare简介 Tushare是一个免费、开源的python财经数据接口包。拥有如股票、基金、期货等行情数据,公司财务、基金经理等基本面数据,以及债券、外汇、行业、大数据、区块链。Tushare返回的绝大部分的数据格式都是pandas DataFrame类型,因此非常方便...

sinat_40875078的博客 1万+

超分辨率重建双三次插值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

【C# + HALCON 机器视觉】HALCON经典算子:光流法运动分析(optical_flow_mg)

摘要:本文面向智能监控人流统计需求,研究C#与HALCON集成开发中optical_flow_mg算子的应用。通过RTSP获取视频流,利用光流法计算运动矢量,结合形态学操作与区域筛选实现行人区域分割,最终完成人流量统计与热力图可视化。详细阐述ROI局部处理等性能优化策略、try-catch异常捕获机制及跨平台集成方案。实验表明,该系统检测准确率达93.6%,单帧处理时间42ms,为公共场所人流量统计提供了完整可行的技术方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1441

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

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

ytao_wang的博客 3608

MTK AWB 色温曲线的进一步猜想

平均距离来判断是否对该色温下白平衡进行全部收白处理,还是保留一些光源的本身的颜色。比如占据图像一大半左右的纯色背景,纵坐标值相对横坐标的距离应该会比较大,大于一般场景下的正常白点分布。反之,位于Plank_curve下方位置的点具有偏洋红色的倾向。此时拟合各个色温下的白点,拟合曲线大致是以X= 0.85)平行于横轴的一条直线。对原始坐标系中的点取对数后的Log坐标系空间。此时拟合各个色温下的白点,拟合曲线大致呈现的是一条直线。,可以认为是各种色温下白点分布所呈现的走向。的算法利用某个色温点的偏离。

大熊 722
上一篇: 图像超分辨率数据集制作问题总结,你需要注意什么?
下一篇: 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、付费专栏及课程。

余额充值