MATLAB 实现 SRCNN 图像超分辨率重建

MATLAB 实现 SRCNN 图像超分辨率重建

MATLAB代码实现,用于基于三层卷积神经网络的图像超分辨率重建。代码参考了多个来源,结合了SRCNN的典型实现步骤。

1. MATLAB代码实现
matlab 复制代码
% 超分辨率卷积神经网络(SRCNN)的测试代码
% 参考文献:Chao Dong, Chen Change Loy, Kaiming He, Xiaoou Tang.
% 学习深度卷积网络的图像超分辨率,欧洲计算机视觉会议记录,2014年

% 清理环境
close all;
clear all;

% 读取真实图像
im = imread('Set5\butterfly_GT.bmp'); % 替换为你的图像路径
% im = imread('Set14\zebra.bmp');

% 设定参数
up_scale = 3; % 放大倍数
model = 'model\x3.mat'; % 替换为你的模型路径

% 仅在照度方面工作
if size(im, 3) > 1
    im = rgb2ycbcr(im);
    im = im(:, :, 1);
end
im_gnd = modcrop(im, up_scale); % 裁剪图像以匹配放大倍数
im_gnd = double(im_gnd) / 255; % 归一化到[0, 1]

% 双三次插值
im_l = imresize(im_gnd, 1 / up_scale, 'bicubic'); % 缩小
im_b = imresize(im_l, up_scale, 'bicubic'); % 再放大

% SRCNN重建
im_h = SRCNN(model, im_b);

% 删除边框
im_h = shave(uint8(im_h * 255), [up_scale, up_scale]);
im_gnd = shave(uint8(im_gnd * 255), [up_scale, up_scale]);
im_b = shave(uint8(im_b * 255), [up_scale, up_scale]);

% 计算PSNR
psnr_bic = compute_psnr(im_gnd, im_b);
psnr_srcnn = compute_psnr(im_gnd, im_h);

% 显示结果
fprintf('双三次插值的峰值信噪比: %f dB\n', psnr_bic);
fprintf('SRCNN重建的峰值信噪比: %f dB\n', psnr_srcnn);

figure, imshow(im_b); title('双三次插值');
figure, imshow(im_h); title('SRCNN重建');

% 保存结果
imwrite(im_b, ['双三次插值' '.bmp']);
imwrite(im_h, ['SRCNN重建' '.bmp']);
2. SRCNN函数实现
matlab 复制代码
function im_h = SRCNN(model, im_b)
    % 加载预训练模型
    load(model);
    
    % 提取特征
    F1 = conv2(im_b, W1, 'same') + B1;
    F1 = max(0, F1); % ReLU激活函数
    
    % 非线性映射
    F2 = conv2(F1, W2, 'same') + B2;
    F2 = max(0, F2); % ReLU激活函数
    
    % 重建
    im_h = conv2(F2, W3, 'same') + B3;
end
3. 辅助函数
matlab 复制代码
function im = modcrop(im, scale)
    % 裁剪图像以匹配放大倍数
    [h, w] = size(im);
    h = h - mod(h, scale);
    w = w - mod(w, scale);
    im = im(1:h, 1:w);
end

function im = shave(im, border)
    % 删除边框
    im = im(border(1)+1:end-border(1), border(2)+1:end-border(2));
end

function psnr = compute_psnr(im1, im2)
    % 计算PSNR
    mse = mean((im1(:) - im2(:)).^2);
    psnr = 10 * log10(255^2 / mse);
end

参考代码 MATLAB 实现 SRCNN 图像超分辨率重建 youwenfan.com/contentcsb/50734.html

代码可以在MATLAB中实现基于SRCNN的图像超分辨率重建。该代码包括图像预处理、双三次插值、SRCNN重建以及结果评估等步骤。

相关推荐
学逆向的23 分钟前
C 枚举变量
c语言·开发语言·网络安全
Sakura_j_h_34 分钟前
Python 在定时任务里输出 emoji,UnicodeEncodeError 从哪来
开发语言·字符编码·windows·python·定时任务
小成202303202656 小时前
C++~07补充
开发语言·c++
2401_885885049 小时前
国际语音C#接口怎么写?.NET环境下实现国际语音验证码批量下发
开发语言·c#·.net
程序猿乐锅9 小时前
【从0-1学习Python | 第七篇】Python 面向对象基础
开发语言·笔记·后端·python·学习·1024程序员节
Wang's Blog9 小时前
Java 项目实战: 交友项目 - 查询圈子个人动态:查询我的动态需求分析
java·开发语言·交友
凯瑟琳.奥古斯特9 小时前
力扣1016高效解法:剪枝优化技巧
开发语言·c++·算法·leetcode·职场和发展
坤坤子吖10 小时前
C++继承:友元、静态成员、多继承与组合
开发语言·c++·笔记·学习·1024程序员节
技术小甜甜10 小时前
【Cursor】Skill 被标黄色警告,怎么改成合格的 SKILL.md
开发语言·javascript·ai编程·cursor·1024程序员节·ai agent·skills