超分辨率重建SRCNN–Matlab 7.0中运行

终于找到一个可以在自己电脑中运行的超分辨率重建程序了,Matlab7.0真的是太老了(实际上是自己的笔记本太老了,哈哈)demo_SR.m%=========================================================================%超分辨率卷积神经网络(SRCNN)的测试码%%参考文献%ChaoDong,C…

大家好,又见面了,我是你们的朋友全栈君。

终于找到一个可以在自己电脑中运行的超分辨率重建程序了,Matlab 7.0真的是太老了(实际上是自己的笔记本太老了,哈哈)

demo_SR.m

% =========================================================================
% 超分辨率卷积神经网络(SRCNN)的测试码
%
% 参考文献
%   Chao Dong, Chen Change Loy, Kaiming He, Xiaoou Tang. 
%   学习深度卷积网络的图像超分辨率,欧洲计算机视觉会议记录,2014年
%
% Chao Dong
% 香港中文大学工业工程系
% 如有任何问题,请发电子邮件至 ndc.forward@gmail.com
% =========================================================================

close all;
clear all;

%% 读取真实图像
im  = imread('Set5\butterfly_GT.bmp');
%im  = imread('Set14\zebra.bmp');

%% 设定参数
up_scale = 3;
model = 'model\x3.mat';
% up_scale = 2;
% model = 'model\x2.mat'; 
% up_scale = 4;
% model = 'model\x4.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;%single 这里换成double Matlab 7.0就可以运行了

%% 双三次插值
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']);

这个演示先把图像缩小了再来超分辨率重建放大只能说明某种对比效果,

用自己的图像重建才有趣:

% 超分辨率重建(卷积神经网络(SRCNN))单色
%
% 设定参数:文件名、放大倍数

close all;clear all;
% 文件名
name='6b.jpg';%'7b.png'; 

% 放大倍率 2,3 或 4 倍
up_scale = 3;

%% 读取一个图像
im  = imread(name);


if up_scale == 3
	model = 'model\x3.mat';
else 
    if up_scale == 4
        model = 'model\x4.mat';
    else
        up_scale = 2;
        model = 'model\x2.mat'; 
    end
end

%% 仅在照度方面工作
% 对YCrCb颜色空间中的Y通道进行重建
if size(im,3)>1
    im = rgb2ycbcr(im);
    im = im(:, :, 1);
end
%调整图像大小(与放大率匹配的)
%im_gnd = modcrop(im, up_scale);
im_gnd = double(im_gnd)/255;%single

%% 双三次插值
% 先将低分辨率图像使用双三次差值放大至目标尺寸(如放大至2倍、3倍、4倍)
im_b = imresize(im_gnd, up_scale, 'bicubic');

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

im_h=uint8(im_h * 255);


figure, imshow(im_h); title('SRCNN 重建');

%保存结果
imwrite(im_h, ['SRCNN 重建' '.jpg']);

输入图:

超分辨率重建SRCNN--Matlab 7.0中运行

重建图(分别是 2、3、4倍):

超分辨率重建SRCNN--Matlab 7.0中运行超分辨率重建SRCNN--Matlab 7.0中运行超分辨率重建SRCNN--Matlab 7.0中运行

这是单色。

再把颜色加上去(颜色部分只是双三次放大,毕竟重建速度慢)

% 超分辨率重建(卷积神经网络(SRCNN))
%
% 设定参数:文件名、放大倍数

close all;clear all;
% 文件名
name='6b.jpg';%'7b.png'; 

% 放大倍率 2,3 或 4 倍
up_scale = 3;

%% 读取一个图像
im  = imread(name);


if up_scale == 3
	model = 'model\x3.mat';
else 
    if up_scale == 4
        model = 'model\x4.mat';
    else
        up_scale = 2;
        model = 'model\x2.mat'; 
    end
end

%调整图像大小(与放大率匹配的)
%im = modcrop(im, up_scale);
im = double(im)/255;%single

%% 双三次插值
% 先将低分辨率图像使用双三次差值放大至目标尺寸(如放大至2倍、3倍、4倍)
im = imresize(im, up_scale, 'bicubic');

%% 仅在照度方面工作
if size(im,3)>1
    im = rgb2ycbcr(im);
    im_b = im(:, :, 1);%1、2、3分别是Y、Cr、Cb
    im2 = im(:, :, 2);
    im3 = im(:, :, 3);
else
    im_b=im;
end

%% SRCNN
im_h = SRCNN(model, im_b);% 对YCrCb颜色空间中的Y通道进行重建

if size(im,3)>1
    [m,n]=size(im_h);
    im_h1=zeros(m,n,3);%三通道合回
    im_h1(:,:,1)=im_h;
    im_h1(:,:,2)=im2;
    im_h1(:,:,3)=im3;
    im_h1 = uint8(im_h1 * 255);%转回uint8
    im_h1 = ycbcr2rgb(im_h1);%转回rgb
else
    im_h1=uint8(im_h * 255);
end

%% 删除边框
%im_h1 = shave(im_h1, [up_scale, up_scale]);

figure, imshow(im_h1); title('SRCNN 重建');%显示

%保存结果
imwrite(im_h1, ['SRCNN 重建' '.jpg']);

超分辨率重建SRCNN--Matlab 7.0中运行超分辨率重建SRCNN--Matlab 7.0中运行超分辨率重建SRCNN--Matlab 7.0中运行

重复3倍试试 3×3=9倍:

超分辨率重建SRCNN--Matlab 7.0中运行

听说这个SRCNN是最简单的,效果还是很不错的。

如要运行,先去

http://mmlab.ie.cuhk.edu.hk/projects/SRCNN.html

下matlab包。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125931.html原文链接:https://javaforall.net

(1)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大数据治理包括哪几个方面

    大数据治理包括哪几个方面在数据治理中 涉及到了前端业务系统 后端业务数据库系统再到业务终端的数据分析 从源头到终端再回到源头 形成的一个闭环负反馈系统 同样地 在数据治理中 我们也需要一套标准化的规范来指导数据的采集 传输 储存以及应用 数据治理包括数据规划 数据采集 数据储存管理 数据应用四个方面 根据每一个方面的特点 我们可以将数据治理总结为四个字 即 理 采 存 用 01 理 梳理业务流程 规划数据资源 对于企业来说 每天的实时数据都会超过 TB 级别 需要采集用户的哪些数据 这么多的数据放

    2025年6月2日
    5
  • superagent 模块

    superagent 模块SuperAgentsuperagent是一个轻量的,渐进式的ajaxapi,可读性好,学习曲线低,内部依赖nodejs原生的请求api,适用于nodejs环境下.一个简单的post请求,并设置请求头信息的例子request.post(‘/api/pet’).send({name:’Manny’,species:’cat’})…

    2025年7月7日
    4
  • DatagramPacket和DatagramSocket[通俗易懂]

    DatagramPacket和DatagramSocket[通俗易懂]DatagramPacket在码头发送和接收货物时都需要使用集装箱来装载货物,UDP通信也是一样,发送和接收的数据也需要使用“集装箱”进行打包,为此JDK中提供了一个DatagramPacket类,该类的实例对象就相当于一个集装箱,用于封装UDP通信中发送或者接收的数据。在创建发送端和接收端的DatagramPacket对象时,使用的构造方法有所不同,接收端的构造方法只需要接收…

    2022年4月28日
    93
  • Python写入Excel文件-多种实现方式(测试成功,附代码)

    目录xlsxwriter库储存数据到excel简介示例:写入excel更多添加工作表样式:写入单元格数据插入图片写入超链接插入图表pandas库储存数据到excel简介示例:写入excelopenpyxl库储存数据到excel示例:写入excel更多打开已有文件根据数字得到字母,根据字母得到数字删除工作表查看表名和选择表(sheet)设置单元格风格xlsxwriter库储存数据到excel简介功能比较强:支..

    2022年4月3日
    421
  • Linux远程桌面连接黑屏

    Linux远程桌面连接黑屏本地 Win7 远程 linux 问题 使用 Win7 自带的远程桌面工具 连接后突然黑屏 本来用的好好的就不行了 重启可能解决问题 不重启重新进入还是黑屏 歪门邪道 网上有说清除位图缓存的 试了没用 名门正派 使用 XShell

    2025年11月5日
    4
  • 安装linux的基本步骤_linux安装oracle

    安装linux的基本步骤_linux安装oracle文章目录一、下载Python包二、安装依赖环境三、安装Python3四、建立Python3和pip3的软链五、检查是否安装成功点我获取更多教程、面试经验、Python分享(PS:个人在用的人工智能学习网站推荐给需要的小伙伴:captainai)一、下载Python包网上教程大多是通过官方地址进行下载Python的,但由于国内网络环境问题,会导致下载很慢,所以这里建议通过国内镜像进行下载例如:淘宝镜像http://npm.taobao.org/mirrors/python/大部分版本和

    2022年10月2日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号