基于CNN的图像超分辨率示例

描述

单图像超分辨率 (Single image super resolution,SR) 是计算机视觉中的一个经典问题, 其目的是从单个低分辨率图像中恢复高分辨率图像。这个问题本质上是不适定的,因为对于任何给定的低分辨率像素都存在解决方案的多重性。换句话说,这是一个不确定的问题,其解决方案不是唯一的。这样的问题通常通过由强先验信息约束解空间来缓解。

目的是从单幅低分辨率图像中恢复出高分辨率图像。

项目介绍

本项目基于(https://arxiv.org/abs/1501.00092v3)论文对超分辨率卷积神经网络 (SRCNN) 的三种实现方式。

整体的思路:

考虑单个低分辨率图像,首先使用双三次插值将其放大到所需的大小,这是执行的唯一预处理。将插值图像表示为Y。我们的目标是从Y中恢复与真实高分辨率图像X尽可能相似的图像F (Y) 。为了便于演示,我们仍然将Y称为 “低分辨率” 图像,尽管它的大小与X相同。我们希望学习一个映射F ,它在概念上包括三个操作:

补丁提取和表示: 该操作从低分辨率图像Y中提取 (重叠) 补丁,并将每个补丁表示为高维向量。这些向量包括一组特征图,其数量等于向量的维数。

非线性映射: 将每个高维向量非线性映射到另一个高维向量。每个映射向量在概念上是高分辨率补丁的表示。这些向量包括另一组特征图。

重建: 聚合上述高分辨率分片表示以生成最终的高分辨率图像。该图像预期与地面实况X相似。

所有这些操作形成一个卷积神经网络。下图描述了网络的概况。

cnn

 

cnn

三种实现方式

Torch:用于训练网络、提取权重和升级

Numpy:用于升级

Cython:用于升级(能够在ZedBoard上运行)

纯 CPU 运行或在 ZedBoard 的 FPGA 上运行 2D 卷积

用法

有关使用说明和先决条件,请参阅项目中文件夹中相应实现的 README.md 文件:

Torch

https://github.com/Fivefold/SRCNN/blob/main/Torch

Numpy

https://github.com/Fivefold/SRCNN/blob/main/Numpy

Cython

https://github.com/Fivefold/SRCNN/blob/main/Cython

指标/性能

Set5 数据集每个指标的平均值。

cnn

实例

地面真相是用于与放大版本进行比较的原始(理想)图像。

双三次是使用简单双三次插值将地面实况缩小 3 倍并放大 3 倍。

SRCNN与 Bicubic 相同,但使用经过训练的卷积神经网络。

审核编辑:黄飞

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分