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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

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_的博客-CSDN博客_图像超分辨率数据集

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实现,以及详细信息,我还是想建议大家参考这边文章,总结的很不错,感谢稳扎那股作者以及参考文献中的作者们的贡献。!

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

<think>好的,用户想了解低分辨率图像与空间耦合相关的概念或技术,特别是“低分辨率图像 空间耦合 技术 方法”。首先,我需要明确“空间耦合”在这里的具体含义。根据提供的引用资料,可能涉及超分辨率重建中的空间变异处理、多模态数据融合,或者特征空间中的跨分辨率关联。 首先,查看引用[1]提到的SSR方法,使用空间变异的模糊核和深度信息,这说明空间耦合可能指不同空间区域的退化模型不同,需要局部处理。这可能涉及到空间变化的退化模型,而不是传统的全局统一核。 然后,引用[2]讨论高光谱图像超分辨率中的融合方法,提到需要与辅助图像配准,但实际中配准困难。这可能涉及到空间耦合技术中的多源数据协同,比如如何将不同分辨率的图像在空间上对齐并融合,提升分辨率。 引用[3]提到异构低分辨率人脸识别,利用高分辨率锚点指导特征提取,这可能是在特征空间中进行耦合,将低分辨率图像的特征与高分辨率信息关联,提升识别性能。 接下来需要将这些点组织起来,解释空间耦合在低分辨率图像处理中的不同技术方法。可能需要分几个方面:空间变异退化模型、多模态数据融合、特征空间耦合。 另外,用户提到的技术可能包括基于深度学习的空间注意力机制、空间-光谱先验的结合、或者利用空间变化的核进行超分重建。例如,引用[1]中的SSR方法就是通过空间变异模糊核来约束解空间,这属于空间耦合的一种技术。 还要考虑是否涉及空间域和频域的结合,或者不同空间位置的不同处理策略。例如,在超分辨率中,某些区域可能需要更强的纹理恢复,而其他区域可能更注重边缘锐化,这种空间自适应的处理也是空间耦合的表现。 需要确保回答中提到的每个技术点都有引用支持,并正确标注引用来源。例如,空间变异模糊核对应引用[1],高光谱的融合方法对应引用[2],特征空间锚点对应引用[3]。 最后,生成相关问题时要围绕用户的问题,可能涉及具体应用场景、技术挑战、不同方法的比较等。例如,如何解决多模态数据配准问题,或者空间变异模型的实际应用案例。 总结回答结构: 1. 空间耦合的定义和背景 2. 主要技术方向(分点说明,每个点结合引用) 3. 典型方法举例 4. 技术挑战 5. 相关应用 需要确保使用正确的LaTeX格式,行内公式用$...$,独立公式用$$...$$,并检查引用标注的位置是否自然。</think>### 低分辨率图像与空间耦合技术方法分析 #### 1. 空间耦合的定义与核心思想 空间耦合(Spatial Coupling)指在低分辨率图像处理中,通过建模不同空间区域之间的关联性或引入外部空间约束来提升重建/识别效果。其核心在于**利用空间维度的先验知识或跨模态信息**,解决低分辨率图像因信息缺失导致的模糊、噪声或结构失真问题[^1][^2][^3]。 #### 2. 主要技术方向 **(a) 空间变异退化建模** 传统超分辨率方法假设图像退化是全局均匀的(如统一模糊核),而空间耦合技术通过**局部退化模型**处理不同区域的退化差异。例如: $$ y = (k_i \otimes x_i) \downarrow_s + n $$ 其中$k_i$表示第$i$个局部区域的模糊核,$\otimes$为卷积操作,$\downarrow_s$为下采样,$n$为噪声。该方法通过深度信息约束解空间(如SSR方法[^1]),显著提升纹理重建精度。 **(b) 多模态空间对齐融合** 在高光谱图像超分辨率中,通过**空间-光谱耦合**实现分辨率提升: - 将低分辨率高光谱图像($LR-HSI$)与高分辨率多光谱图像($HR-MSI$)在空间域配准 - 构建联合优化模型: $$\min_{X} \|Y_h - X \cdot S\|^2 + \|Y_m - R \cdot X\|^2 + \lambda \Phi(X)$$ 其中$S$为光谱响应函数,$R$为空间采样矩阵,$\Phi(X)$为空间平滑约束 **(c) 特征空间锚定耦合** 在低分辨率人脸识别中,通过**高分辨率特征锚点**建立跨分辨率关联: - 设计损失函数$L_{anchor} = \|f_{LR}(I_{lr}) - f_{HR}(I_{hr})\|_2$ - 通过梯度传播将高分辨率识别特征反向引导低分辨率特征提取 #### 3. 典型方法对比 | 方法类型 | 关键技术 | 应用场景 | 优势 | |---------|----------|----------|------| | 局部退化建模 | 空间变异模糊核、深度约束[^1] | 自然图像超分 | 保留边缘细节 | | 空谱融合 | 矩阵分解+深度学习 | 遥感图像增强 | 提升光谱保真度 | | 特征锚定 | 跨分辨率特征对齐 | 人脸识别 | 突破分辨率限制 | #### 4. 技术挑战 - **多尺度配准难题**:引用[2]指出,当辅助图像与目标图像存在未对齐时,融合性能急剧下 - **计算复杂度**:空间变异模型需逐区域优化,时间复杂度增加$O(n^2)$ - **先验知识依赖**:深度信息或高分辨率锚点的获取成本较高[^3] #### 5. 应用案例 - **医疗影像增强**:结合CT/MRI多模态数据的空间耦合超分 - **卫星图像处理**:利用时序影像的空间相关性提升分辨率 - **视频监控分析**:通过运动轨迹耦合实现低分辨率目标识别
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Alocus_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值