当前位置: 首页 > news >正文

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

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

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

1. 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) > 1im = 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函数实现
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. 辅助函数
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);
endfunction im = shave(im, border)% 删除边框im = im(border(1)+1:end-border(1), border(2)+1:end-border(2));
endfunction psnr = compute_psnr(im1, im2)% 计算PSNRmse = mean((im1(:) - im2(:)).^2);psnr = 10 * log10(255^2 / mse);
end

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

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

http://www.dtcms.com/a/308157.html

相关文章:

  • toFixed()方法的报错注意
  • C++11原子操作实现公平自旋锁
  • 【IQA技术专题】DISTS代码讲解
  • 深入剖析:C++ 手写实现 unordered_map 与 unordered_set 全流程指南
  • Qt 如何从 .ts 文件提取所有源文
  • 2024年SEVC SCI2区,一致性虚拟领航者跟踪群集算法GDRRT*-PSO+多无人机路径规划,深度解析+性能实测
  • TDengine 中 TDgp 中添加算法模型(异常检测)
  • 【生活篇】Ubuntu22.04安装网易云客户端
  • 河南萌新联赛2025第(三)场:河南理工大学(补题)
  • .NET 10 中的新增功能系列文章3—— .NET MAUI 中的新增功能
  • gen_compile_commands.sh
  • elk部署加日志收集
  • 网络爬虫(python)入门
  • webpack-babel
  • 开发避坑短篇(11):Oracle DATE(7)到MySQL时间类型精度冲突解决方案
  • uniapp x swiper/image组件mode=“aspectFit“ 图片有的闪现后黑屏
  • Vue多请求并行处理实战指南
  • 【qiankun】基于vite的qiankun微前端框架下,子应用的静态资源无法加载的问题
  • [硬件电路-111]:滤波的分类:模拟滤波与数字滤波; 无源滤波与有源滤波;低通、带通、带阻、高通滤波;时域滤波与频域滤波;低价滤波与高阶滤波。
  • 2025做美业还有前景吗?博弈美业系统带来美业市场分析
  • rustdesk 1.4.1版本全解析:新增功能、性能优化与多平台支持详解
  • 【机器学习】KNN算法与模型评估调优
  • 深度学习批量矩阵乘法实战解析:torch.bmm
  • 【科普】在STM32中有哪些定时器?
  • 【Golang】用官方rate包构造简单IP限流器
  • 【STM32】HAL库中的实现(二):串口(USART)/看门狗(IWDG/WWDG)/定时器(TIM)
  • 三格——环网式CAN光纤中继器进行光纤冗余环网组网测试
  • 工业绝缘监测仪:保障工业电气安全的关键防线
  • C# 枚举器和迭代器(常见迭代器模式)
  • 26考研|数学分析:重积分