基于深度学习的图像超分辨率应用

news2024/11/28 2:52:04

引言

在使用图片浏览软件显示图片时,为了凸显某个部位,你会放大图片,为了显示整体,你会缩小图片。

你的原始图片大小是固定的,但图像浏览软件既可以最大化到整个屏幕,也可以只占一个区域,这些操作是怎么实现的呢?

传统图像插值方法

在深度学习还没有涉猎图像超分之前,图像插值方法是图像放大,缩小,旋转以及形变过程中使用的主要手段。

图片

根据插值算法的不同,即使对相同的图像进行调整大小或重新映射,结果也可能会有显著差异。插值只是一种近似,因此每次进行插值时,图像都会损失一些质量。

插值的概念

插值通过使用已知数据来估计未知点的值。例如:如果想知道中午的温度,但只在上午11点和下午1点测量了温度,可以通过执行线性插值来估计它的值:

图片

如果在上午11:30有额外的测量值,并根据常识温度上升的大部分发生在中午之前,则可以使用这个额外的数据点来执行二次插值:

图片

靠近中午的温度测量值越多,插值算法就可以越复杂(更准确)。

举个图形缩放的例子

图像插值在两个方向上基于周围像素的值来计算最佳近似。下图说明了图像缩放的工作原理:

图片

与上面温度的例子不同的是,两个连续的像素之间可能发生剧烈变化,例如,边缘。与温度例子相同的是,知道周围像素的信息越多,插值效果越好。总而言之,图像的拉伸程度越大,效果越差,因为插值没有对细节的想象能力。

图像旋转的例子

旋转或扭曲图像时,也会发生插值。前面图像缩放的例子是插值器特别擅长的一种情况。下面的例子显示了图像细节如何迅速地丢失:

图片

以上结果使用了所谓的“双三次”算法,只有90度旋转是无损的,其余都显示了明显的恶化。

不同的插值算法

常见的插值算法可以分为两类:自适应和非自适应。自适应方法会根据插值的内容(锐利的边缘或平滑的纹理)而变化,而非自适应方法则会将所有像素都视为相等。

非自适应算法包括:最近邻、双线性、双三次、样条、sinc、lanczos 等。根据它们的复杂性,这些算法在插值时使用的相邻像素数量从0到256(或更多)不等。它们包含的相邻像素越多,就越能变得更准确,但这会以更长的处理时间为代价。这些算法可以用于扭曲和调整照片的大小。

图片

自适应算法在很多受版权保护的软件中都有应用,如 Qimage、PhotoZoom Pro、Genuine Fractals 。当检测到边缘存在时,会在像素级别上应用不同算法,以最大程度地减少插值伪影的出现。

最近邻插值

最近邻是最基本的插值算法,需要的处理时间最少,因为它只考虑一个像素—也就是最接近插值点的像素。这会使每个像素变大,从而简单地实现了放大的效果。

双线性插值

双线性插值考虑到了未知像素周围最近的2x2邻域像素值。然后对这4个像素进行加权平均,以得到最终的插值值。这会比最近邻插值产生更平滑的图像。

下图所示是未知像素与所有已知像素距离相等的情况,所以插值值仅为它们的总和除以4。

图片

高阶插值方法:样条和SINC

这类插值器考虑了更多的周围像素,因此计算成本也更高。这些算法包括样条和sinc,插值后会保留更多的图像信息。因此,在需要对图像进行多次旋转/扭曲累加处理时,它们非常有用。但是,在单步放大或旋转的情况下,可能会出现卡顿的现象。

插值伪影

所有的非自适应插值算法都试图在三种不良效果(边缘光晕、模糊和混叠)之间找到最佳平衡点。

图片

即使是最先进的非自适应插值算法,也不能同时消除上述三种不良效果,必须通过牺牲其中的一种或者两种来改善另一种。

图片

锯齿

图片

抗锯齿技术可以消除这些锯齿,并给出更平滑的边缘和更高的分辨率外观。它的工作原理是考虑理想边缘与相邻像素的重叠程度。锯齿状的边缘只能四舍五入到最接近的像素值,而抗锯齿会为边缘所占像素根据所占比例计算一个颜色值。

锯齿:

图片

抗锯齿:

图片

基于深度学习的图像插值算法

基于深度学习的图像插值算法也被称为图像超分辨率,就是指将图像缩放而不失真。

深度学习发展到今天,无论是在自然语言处理,还是计算机视觉,都已经积累了大量的经验,接下来它会不断渗入到各个细分领域,去解决传统算法的效率和精度等性能问题。这也就是为什么已经有了传统插值算法,还会出现图像超分的原因。

传统算法的缺点前面已经说了,概括一下就是:不能完全消除伪影,锯齿和混叠,导致图像失真。

那为什么深度学习能改善这些缺点?

从传统的算法演化历程来看,越复杂的算法,考虑未知点周边像素数越多,效果就越好,非线性要比线性效果好,而深度学习正好能拟合非常非常复杂的映射。

举个基于阈值图像分割的例子,对于一个二值图像,选择一个阈值就能完成分割,一个阈值也就对应一个if判断语句,但现实中的图像都很复杂,即使使用多个阈值,分割结果也是散乱的,因为没有考虑空间因素,深度学习不仅能模拟非常多的判断语句,还能考虑空间因素。

再举个例子,会想起很早之前用过的机器翻译,效果很一般,它就是将输入的源句子分词,然后将词翻译成目标语言词汇,最后将词汇拼在一起。

I am a student -> 我是一个学生

但如果一个句子中出现了很多像where,that这些关系代词和关系副词时,翻译出来的句子就不通顺了。所以改进版加了目标语言语法知识。

I bought an apple for my girlfriend as a birthday present, it's full of technology

对于上面的句子,机器翻译并不知道it指代的是啥,直到Transformer的出现,它的注意力机制很大程度提升了翻译效果。

但当我认为这就是翻译的天花板时,直到我最近使用ChatGPT,我发现它不光懂语法,不光有注意力机制,它还有专业领域知识,它能识别一个词在不同上下文中有不同的涵义。他不会把一篇有关古董文章中的china翻译成中国,而是翻译成陶瓷。

而基于深度学习的图像超分就是如此,它不再是简单的像素加权求和,而是像一个非常复杂的非线性函数,它清楚的知道边缘的地方应该怎么插值,平坦的纹理区域应该怎么插值。

基于深度学习的插值与传统插值方法相比有如下优势:

  • 学习复杂和非线性映射的能力:传统的插值方法,如双三次或双线性插值,使用数学公式来估计缺失的数据点或像素。这些公式基于对底层数据或图像的假设,例如平滑度或连续性。另一方面,基于深度学习的插值可以学习低分辨率和高分辨率图像之间复杂的非线性映射,使其更加灵活,适应不同类型的数据和图像。
  • 更好地处理纹理和精细细节:传统的插值方法很难保留图像中的纹理和精细细节,尤其是在放大时。另一方面,基于深度学习的插值可以学习保留这些细节并产生更美观的结果。
  • 处理异构数据的能力:传统的插值方法假设底层数据或图像是平滑的或连续的。然而,许多现实世界的数据和图像是异构的,具有复杂的结构和模式。基于深度学习的插值可以学习处理这些结构和模式,从而产生更准确和视觉上令人愉悦的结果。
  • 改进的性能:基于深度学习的插值在多个基准数据集上取得了最先进的结果,证明了其与传统插值方法相比的卓越性能。

以下是一些著名的图像插值深度学习模型,以及每个模型的摘要:

  • 超分辨率卷积神经网络 (SRCNN)

SRCNN 是一种开创性的深度学习模型,专为单幅图像超分辨率任务而设计。它以低分辨率图像作为输入,并学习低分辨率图像和高分辨率图像之间的端到端映射。该网络由三个卷积层组成,每个卷积层负责一个特定的任务:补丁提取、非线性映射和重建。

概括:单幅图像超分辨率的端到端学习,三层架构。

  • 生成对抗网络 (GAN)

GAN 由一个生成器和一个鉴别器网络组成,它们在两人极小极大游戏中竞争。生成器创建合成图像,而鉴别器则试图区分真实图像和生成图像。GAN 已应用于各种图像合成任务,包括图像插值。

概括:对抗训练,适用于图像合成和插值。

  • 用于单幅图像超分辨率 (EDSR) 的增强型深度残差网络

EDSR 是残差网络 (ResNet) 架构的改进版本,专为超分辨率任务而设计。它删除了不必要的组件,如批量归一化,并采用了更广泛的残差缩放策略。EDSR 在各种单幅图像超分辨率基准测试中表现出色。

概括:改进的 ResNet 架构,专为超分辨率任务量身定制。

  • 深拉普拉斯金字塔超分辨率网络 (LapSRN)

LapSRN 是一种深度学习模型,它使用拉普拉斯金字塔框架逐步重建高分辨率图像。它以从粗到精的方式在多个尺度上执行图像插值。与其他超分辨率方法相比,LapSRN 在速度和准确性方面都表现出了出色的性能。

概括:渐进重建,拉普拉斯金字塔框架,由粗到细的插值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1256978.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【云平台】STM32微信小程序阿里云平台学习板

【云平台】STM32微信小程序阿里云平台学习板 文章目录 前言一、立创EDA(硬件设计)1.主控STM32F103C8T62.ESP8266模块3.温湿度模块4.光照强度模块5.OLED显示模块6.PCB正面7.PCB反面8.3D视角正面9.3D视角反面 二、【云平台】STM32微信小程序阿里云平台学习…

Linux7设置ssh秘钥登录并关闭密码登录

说明:场景为windows使用WinScp远程登录linux服务 winscp安装教程:winscp安装及关联putty使用_putty.exe没有找到_cherishSpring的博客-CSDN博客 1.在window上生成公钥和秘钥,操作方式参考以下文章第3点: git关联云效使用教程_云…

爬取极简壁纸

js反编译的代码需要解密之类的,直接给我干蒙圈了,借助selenium可以直接获取到调式工具中的源码,可以获取渲染后的链接,然后将链接交给下载函数(使用异步提高效率)即可。 后续学习完js反编译的话&#xff0…

项目实战——苍穹外卖(DAY10)

如果之前有改过端口号造成WebSocket无法连接的,可以看本篇文章“来单提醒”前的内容进行解决。 课程内容 Spring Task 订单状态定时处理 WebSocket 来单提醒 客户催单 功能实现:订单状态定时处理、来单提醒和客户催单 订单状态定时处理&#xff1a…

Spring Boot 项目配置文件出现乱码的解决方法

如下图,我们 Spring Boot 项目的配置文件 application.properties 可能会出现如下的乱码问题: 我们写注解的时候是正常的,但是下次启动项目就出现了乱码,这个是字符集设置的问题 解决方法 1.点击 File 选择 Settings 2.搜索 enco…

C#学习-8课时

P10 输入输出程序编写 相同类型的可以直接相加; cwtabtabconsole.Writeline(); using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace C_8_1 { class Program { s…

基于xml配置的AOP

目录 xml方式AOP快速入门 xml方式AOP配置详解 xml方式AOP快速入门 xml方式配置AOP的步骤 导入AOP相关坐标 <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.13</version></de…

树状数组专题

折叠 区间修改&#xff0c;区间查询&#xff0c;这一类题通常都可以使用线段树解决&#xff0c;但对于此题&#xff0c;树状数组同样可以&#xff0c;而且常数较小&#xff0c;代码简单。 思路&#xff1a; 考虑使用树状数组去维护差分数组&#xff0c;即对于 a i a_i ai​,我们…

C语言WFC实现矩形旋转

前言&#xff1a;结合上一篇的博客进行对矩形的创建和旋转操作 代码实现&#xff1a; //旋转矩阵 void CCGDrawingView::RotateRectangle(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, double angle, CDC* pDC) {//绘制旋转前的矩形Rectangle(x1, y1, x…

阿里云MQTT: 子设备上线流程

0. 背景 阿里云网关子设备上平台的资料很少。有些厂家直接配置每个子设备的DeviceSecret到网关里&#xff0c;显然太麻烦了&#xff01;我经过阅读阿里文档&#xff0c;发现有些简化的方法&#xff0c;更便于客户使用&#xff0c;因此分享给大家。 1. 主要信息片段 子设备 $…

Java之API(上):Boolean

一、前言&#xff1a; 上次我们将到了 java.lang.* 下的包装类&#xff1a;Integer。这次我讲一下基本数据类型中的&#xff1a;布尔型&#xff08;boolean&#xff09;对应的包装类&#xff08;Boolean&#xff09;。注意&#xff1a;还有对包装类&#xff1a;Integer进行一些…

爬楼梯(力扣LeetCode)动态规划

爬楼梯 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1 阶 1 阶2 阶 示…

kubernetes架构及核心组件简单介绍

目录 整体架构控制面kube-apiserver访问控制通知 kube-scheduler概述默认调度策略 kube-controller-manageretcd架构Raft协议日志复制 数据面kubeletkube-proxy 整体架构 集群架构图 控制面 控制面是kubernetes的核心组件&#xff0c;负责管理和控制集群的整体行为&#xf…

java: nio之DirectByteBuffer

package nio;import java.nio.ByteBuffer; import java.nio.IntBuffer;public class DirectTest {public static void main(String[] args) {ByteBuffer byteBuffer ByteBuffer.allocateDirect(1024);} }

【计算机视觉】【图像处理综合应用】路沿检测

实验内容&#xff1a;针对给定的视频&#xff0c;利用图像处理基本方法实现道路路沿的检测&#xff1b; 提示&#xff1a;可利用Hough变换进行线检测&#xff0c;融合路沿的结构信息实现路沿边界定位&#xff08;图中红色的点位置&#xff09;。 处理视频文件 处理视频文件的主…

[原创](免改BIOS)使用Clover升级旧电脑-(骨灰级)修改Clover的config.plist文件

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi…

AIGC ChatGPT 4 快速整理不规则数据

从业务系统中采集到的数据如下: 序号 省份 英文 2022年销售额 2021年销售额 增量 1 广东guangDOng129068.58 124319.67 4748.91 2 江苏 JiangSu 122825.6 116314.2 6511.4 3 山东ShAnDong 87385 83045.9 4339.1 4 浙江…

云匣子 FastJson反序列化RCE漏洞复现

0x01 产品简介 云匣子是租户连接云资源的安全管理工具&#xff0c;帮助云租户更加安全、精细的管理云上的虚拟机、数据库等资源。 云安宝结合多年的运维和安全实践&#xff0c;将云上的运维和安全有机结合&#xff0c;实现对运维过程的事前规划、事中控制和 事后审计。在此之上…

部署Jenkins

一、介绍 Jenkins 、Jenkins概念 Jenkins是一个功能强大的应用程序&#xff0c;允许持续集成和持续交付项目&#xff0c;无论用的是什么平台。这是一个免费的源代码&#xff0c;可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。Jenkins是一种软件允…

大语言模型损失函数详解

我们可以把语言模型分为两类&#xff1a; 自动回归式语言模型&#xff1a;自动回归式语言模型在本质上是单向的&#xff0c;也就是说&#xff0c;它只沿着一个方向阅读句子。正向&#xff08;从左到右&#xff09;预测&#xff1b;反向&#xff08;从右到左&#xff09;预测。…