代码是作者页面上下载的matlab版。香港中文大学汤晓鸥教授。Learning a Deep Convolutional Network for Image Super-Resolution。

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


  • demo_SR.m为运行主文件。
up_scale = ;
model = 'model\9-5-5(ImageNet)\x3.mat';
  • .mat文件存储数据。三个卷积层的权重和偏置。y=wx+b中的w和b。

%% work on illuminance only
if size(im,)>
im = rgb2ycbcr(im);
im = im(:, :, );
end
im_gnd = modcrop(im, up_scale);
im_gnd = single(im_gnd)/;

彩色图像的话,RGB转为YCbCr。并只对Y通道处理。

若为灰度图像,直接处理。

其中,modcrop函数:将图片裁剪为能够调整的大小(与放大率匹配)。裁剪舍掉余数行和列。

function imgs = modcrop(imgs, modulo)
if size(imgs,)==
sz = size(imgs);
sz = sz - mod(sz, modulo);
imgs = imgs(:sz(), :sz());
else
tmpsz = size(imgs);
sz = tmpsz(:);
sz = sz - mod(sz, modulo);
imgs = imgs(:sz(), :sz(),:);
end

mod取余,crop修剪的意思。

double数据类型占8个字节,single类型占4个字节。Single(单精度浮点型)对图像归一化处理。得到im_gnd

%% bicubic interpolation
im_l = imresize(im_gnd, /up_scale, 'bicubic');
im_b = imresize(im_l, up_scale, 'bicubic');

im_l :将im_gnd 双三次插值缩小后的图像。

im_b : 将im_gnd 双三次插值缩小后再进行同比例放大的图像。

现在,LR是85*85的,放大三倍后是Bicubic,大小为255*255。

经过边界修剪,shave.m。四周各去边框-3。大小变为249*249。

function I = shave(I, border)
I = I(+border():end-border(), ...
+border():end-border(), :, :);

function I = shave(I, border)
I = I(+border():end-border(),+border():end-border());

结果是灰度图像:

想要生成彩色图像:可以见别人改过的代码。

【转载自】

SRCNN(一) - 刘一好 - 博客园 https://www.cnblogs.com/howtoloveyou/p/9691233.html

超分辨率重建SRCNN--Matlab 7.0中运行 - juebai123的博客 - CSDN博客 https://blog.csdn.net/juebai123/article/details/80532577

SRCNN.m

function im_h = SRCNN(model, im_b)

%% load CNN model parameters
load(model);
[conv1_patchsize2,conv1_filters] = size(weights_conv1);
conv1_patchsize = sqrt(conv1_patchsize2);
[conv2_channels,conv2_patchsize2,conv2_filters] = size(weights_conv2);
conv2_patchsize = sqrt(conv2_patchsize2);
[conv3_channels,conv3_patchsize2] = size(weights_conv3);
conv3_patchsize = sqrt(conv3_patchsize2);
[hei, wid] = size(im_b); %% conv1
weights_conv1 = reshape(weights_conv1, conv1_patchsize, conv1_patchsize, conv1_filters);
conv1_data = zeros(hei, wid, conv1_filters);
for i = : conv1_filters
conv1_data(:,:,i) = imfilter(im_b, weights_conv1(:,:,i), 'same', 'replicate');
conv1_data(:,:,i) = max(conv1_data(:,:,i) + biases_conv1(i), );
end %% conv2
conv2_data = zeros(hei, wid, conv2_filters);
for i = : conv2_filters
for j = : conv2_channels
conv2_subfilter = reshape(weights_conv2(j,:,i), conv2_patchsize, conv2_patchsize);
conv2_data(:,:,i) = conv2_data(:,:,i) + imfilter(conv1_data(:,:,j), conv2_subfilter, 'same', 'replicate');
end
conv2_data(:,:,i) = max(conv2_data(:,:,i) + biases_conv2(i), );
end %% conv3
conv3_data = zeros(hei, wid);
for i = : conv3_channels
conv3_subfilter = reshape(weights_conv3(i,:), conv3_patchsize, conv3_patchsize);
conv3_data(:,:) = conv3_data(:,:) + imfilter(conv2_data(:,:,i), conv3_subfilter, 'same', 'replicate');
end %% SRCNN reconstruction
im_h = conv3_data(:,:) + biases_conv3;
  • l  Conv1: f1 = 9 *9 activation = ‘relu’
  • l  Conv2: f2 = 1 *1 activation = ‘relu’  #为了非线性映射 增强非线性
  • l  Conv3: f3 = 5 * 5 activation = ‘lienar’

【转载自】

SRCNN流程细节 - Python少年 - 博客园 https://www.cnblogs.com/echoboy/p/10289741.html

SRCNN代码分析的更多相关文章

  1. Android代码分析工具lint学习

    1 lint简介 1.1 概述 lint是随Android SDK自带的一个静态代码分析工具.它用来对Android工程的源文件进行检查,找出在正确性.安全.性能.可使用性.可访问性及国际化等方面可能 ...

  2. pmd静态代码分析

    在正式进入测试之前,进行一定的静态代码分析及code review对代码质量及系统提高是有帮助的,以上为数据证明 Pmd 它是一个基于静态规则集的Java源码分析器,它可以识别出潜在的如下问题:– 可 ...

  3. [Asp.net 5] DependencyInjection项目代码分析-目录

    微软DI文章系列如下所示: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Autofac [ ...

  4. [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(5)(IEnumerable<>补充)

    Asp.net 5的依赖注入注入系列可以参考链接: [Asp.net 5] DependencyInjection项目代码分析-目录 我们在之前讲微软的实现时,对于OpenIEnumerableSer ...

  5. 完整全面的Java资源库(包括构建、操作、代码分析、编译器、数据库、社区等等)

    构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化 ...

  6. STM32启动代码分析 IAR 比较好

    stm32启动代码分析 (2012-06-12 09:43:31) 转载▼     最近开始使用ST的stm32w108芯片(也是一款zigbee芯片).开始看他的启动代码看的晕晕呼呼呼的. 还好在c ...

  7. 常用 Java 静态代码分析工具的分析与比较

    常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...

  8. SonarQube-5.6.3 代码分析平台搭建使用

    python代码分析 官网主页: http://docs.sonarqube.org/display/PLUG/Python+Plugin Windows下安装使用: 快速使用: 1.下载jdk ht ...

  9. angular代码分析之异常日志设计

    angular代码分析之异常日志设计 错误异常是面向对象开发中的记录提示程序执行问题的一种重要机制,在程序执行发生问题的条件下,异常会在中断程序执行,同时会沿着代码的执行路径一步一步的向上抛出异常,最 ...

随机推荐

  1. You are using the runtime-only build of Vue where the template compiler is not available.

    使用vue-cli搭建的项目,启动报错 You are using the runtime-only build of Vue where the template compiler is not a ...

  2. 【转】Delphi货币类型转中文大写金额

    unit TU2.Helper.Currency; interface ): string; ): string; implementation uses System.SysUtils, Syste ...

  3. IPhone中H5页面用on绑定click无效的解决方法

    首先声明本人资质尚浅,本文只用于个人总结.如有错误,欢迎指正.共同提高. --------------------------------------------------------------- ...

  4. 记录一次ABP下载模板的坑

    1.拉取ABP官网的模板的最新代码,我的代码结构是这样的 https://aspnetboilerplate.com/Templates 环境安装的部分我就不说明了.node.js  npm 等等部分 ...

  5. 【leetcode】617. Merge Two Binary Trees

    原题 Given two binary trees and imagine that when you put one of them to cover the other, some nodes o ...

  6. 智能指针原理及实现(2)unique_ptr

    只允许基础指针的一个所有者. 可以移到新所有者(具有移动语义),但不会复制或共享(即我们无法得到指向同一个对象的两个unique_ptr). 替换已弃用的 auto_ptr. 相较于 boost::s ...

  7. 《浏览器工作原理与实践》<05>渲染流程(上):HTML、CSS和JavaScript,是如何变成页面的?

    在上一篇文章中我们介绍了导航相关的流程,那导航被提交后又会怎么样呢?就进入了渲染阶段.这个阶段很重要,了解其相关流程能让你“看透”页面是如何工作的,有了这些知识,你可以解决一系列相关的问题,比如能熟练 ...

  8. win10下 switchhost权限修改问题

    switchhost提示没有切换权限:C:\WINDOWS\system32\drivers\etc\host 文件无法修改   1.找到host文件 C:\Windows\System32\driv ...

  9. 鼠标点击自定义文字展现特效JS代码

    JS特效使用方法 只需将如下JS代码放到</body>之前就好了 var a_idx = 0; jQuery(document).ready(function($) { $("b ...

  10. log4j2 日志打两遍的问题

    在使用log4j2的时候,一般都需要不同的日志分类打印不同的日志等级,如下面的配置 <!-- 用于指定log4j自动重新配置的监测间隔时间,单位是秒 --> <configurati ...