当前位置: 首页 > 编程日记 > 正文

如何用技术恢复模糊的图像?在线教学…

9fa2695577c4277b589da764149c53e5.gif

作者 |小白

来源 |小白学视觉

有人认为恢复模糊的图像是不可能的,因为会丢失信息。但我对这个问题进行了很多思考,并认为如果输出图像的大小与输入图像的大小相同,那实际上是可能的!这样,输出就有足够的像素/信息来恢复原始像素/信息。

首先,解释一下什么是卷积以及如何使用卷积来模糊图像,以及它如何使用模糊的图像。卷积是一种数学运算,当应用于图像时,可以将其视为应用于它的过滤器。

494bcff9c127cb848b6db3699fe1d38d.gif

在这个动画中,我们可以看到一个图像与过滤器/内核卷积的例子。原始图像是蓝色矩阵,内核是滑动的深蓝色矩阵,输出是蓝绿色矩阵。

卷积是通过将重叠的内核和图像相乘,然后对乘积求和来获得的。以下等式可能会有所帮助:给定图像x和内核k,卷积的结果将为y。

706dfdf56a9806c7236d989f8a02c074.png

efc31a20269eb595c0d3c60cc99622b3.png

如果我们已经知道图像上的卷积是如何工作的,也许这个方程组并不太可怕;如果我们不知道,别担心,我们不必记住它,这就是程序的工作!一个有用的表示形式是将卷积解释为矩阵乘法,从上面的等式中可以很容易的写出来:

b12522033ec9286148d2c56572b094d2.png

等价于矩阵方程

b4c259aab0861331f3ae9a97aede0cf2.png

通过这种表示,似乎知道A和y,那么x可以通过求解上面的方程来计算。但是,由于A 的列数多于行数,因此该系统尚未确定,这意味着我们不能只获得一个解。

首先说,为了能够反转卷积,输入和输出大小必须相同。在矩阵形式中,这将对应于 A 是正方形(行和列的书面相同),从而我们可以将其求逆并将x计算为:

68014bb9e13221fec866b445abffa076.png

现在,我们的输入是 4x4,输出是 2x2。我们如何获得与输入相同大小的输出?一种方法是向输入图像中添加填充,例如 0 填充:

fa0811211793df048bc1b2e2165eec6a.png

这样,输出将像原始输入一样是 4x4。详细地说,对于这种带有填充的卷积的简单情况,输出尺寸可以计算为:

8f6f06ff43d6a8c3116024a8603b4a38.png

如果我们希望输入和输出具有相同的大小,那么填充必须是:

8d8cf3119b5984a937a271a55bd49a41.png

这产生了一个重要条件:内核大小必须是奇数,因为填充是一个整数值。

这种卷积也可以表示为上述矩阵的乘积,但是我不会不厌其烦地阅读它,因为尺寸会大得多。可以写出与 y 的每个项相关联的卷积方程,然后将其构造为如上所述矩阵乘法。

8d102b97de327c09ccefb6227714f263.png

请注意,尽管填充的输入是 6x6,对应于 36 个元素,但这些元素中只有 4x4 是唯一且未知的变量。因此,方程中的 x 只能是 16x1,而不是 36x1。

要求解 x 并反转卷积,只需知道 A 和 y 。要构造 A ,需要知道用于卷积的内核和所使用的填充类型。

现在,如何使用?可以通过卷积来模糊图像。例如,高斯模糊是通过将图像与内核/滤波器卷积来获得的,该内核/滤波器的中心具有高斯分布,最大值在中心,其值总和为 1。

b532ff270a99124f3af07c7f9706bb62.png

我首先使用高斯模糊对图像进行模糊处理。我用高斯核对原始图像进行了卷积,并使用了复制填充(原始图像之外的值设置为最接近的边界值,而不是 0)。

86aa408ecaba2ee41ab95e7200ca58cc.png

左边是原图,右边是模糊图像。

因为我们知道使用的内核,所以我们能够构造矩阵 A 然后求解 x 。结果如预期:重建的图像与原始图像完全相同。

6f6109bbc8c427385d3d76d1087bc644.png

左边是模糊的图像,右边是重建的图像。

现在,这种 100% 重建是可能的,因为使用的内核和填充是已知的。如果我们使用的内核与用于模糊原始图像的内核不完全相同,会发生什么?

a4867f3876e8063d441cc4495091f078.png

不使用精确内核时,左侧图像模糊,右侧重建图像。

如果假设使用复制填充时填充为 0 ,该怎么办呢?

b80fc21480e367bd5255406a0499e3ee.png

在不假设精确填充的情况下,左侧图像模糊,右侧重建图像。

正如我们所见,如果我们不知道使用的内核和填充,那么我们就无法重建原始图像。从这个意义上说,它几乎可以看作是一个加密问题:如果我们知道“密钥”,那么我们便能够重建原始消息而不回造成任何损失或额外的噪音。

重建原始图像也是一项非常艰巨的任务,因为矩阵 A 会根据原始图像的大小增长非常快。如果原始图像是 4x4,那么 A 将是 16x16 ——元素数量以 N² 缩放。

希望小伙伴们喜欢这个简短的解释并发现它很有趣。我确实做到了,这是了解更多关于 Julia、卷积、图像处理和线性代数的好方法。

我认为我们现在不必担心人们不会恢复模糊的图像了。

3eca9ffbf83b9f1d486ccee0af04ca22.png

左边是模糊的图像,右边是重建的图像。

6be53e1c5b30dc3726feed2a9beb55cf.png

相关文章:

数据库创建索引的原则

数据库建立索引的原则 铁律一:天下没有免费的午餐,使用索引是需要付出代价的 索引的优点有目共睹,但是,却很少有人关心过采用索引所需要付出的成本。若数据库管理员能够对索引所需要付出的代价有一个充分的认识,也就不…

Linux上实现ssh免密码登陆远程服务器

平常使用ssh登陆远程服务器时,都需要使用输入密码,希望可以实现通过密钥登陆而免除输入密码,从而可以为以后实现批量自动部署主机做好准备。 环境如下: IP地址操作系统服务器端10.0.0.10CentOS 6.5 x86客户端10.0.0.61CentOS 6.5 …

分享memcache和memcached安装过程

Memcache是什么? Memcache是一个自由和开放源代码、高性能、分配的内存对象缓存系统。用于加速动态web应用程序,减轻数据库负载。 它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一…

导入导出Android手机文件

1、获得root权限:adb root; 如提示adbd cannot run as root in production builds,参见我的另一篇文章:http://www.cnblogs.com/hdk1993/p/4770388.html 2、设置/system为可读写:adb remount; 3、将文件复制…

GPT-3 不够 Open,BigScience 构建开放语言模型,规模小 16 倍

编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 大约一年前,总部位于纽约布鲁克林的自然语言处理初创公司 Hugging Face 推出了 BigScience。这是一个拥有 900 多名研究人员的国际项目,旨在更好地理解自然语言模型原理和提高大…

华为云微服务引擎CSE大量新特性上线,诚邀您免费体验

1、提供GO语言微服务开发框架SDK 支持插件化注册中心、多RPC协议(已默认实现http和highway,可扩展) 提供熔断降级、容错、路由管理、限流、错误注入、灰度发布等治理能力 2、提供Service Mesh商业版 支持.NET、Node.js、PHP等多语言应用…

memcache和memcached安装

首先要明确 memcache不是memcached第一步安装libevent #wget https://github.com/downloads/libevent/libevent/libevent-2.0.15-stable.tar.gz #tar libevent-2.0.15-stable.tar.gz #tar xzvf libevent-2.0.15-stable.tar.gz #cd libevent-2.0.15-stable #./configure --h…

点击按钮下载文件

RequestMapping("/download.do")public void download(HttpServletRequest request,HttpServletResponse response)throws Exception {String filePath "文件路径";FileInputStream fis null;OutputStream os null;try {fis new FileInputStream(fileP…

开源社区的危机:拒绝被“白嫖”?2大著名项目遭作者破坏

作者 | 林檎来源 | 数据实战派近日,一位开源开发者的故意破坏,再次引发了机构依赖开源库的争议。这一类开源库往往由维护者义务工作而支撑。被破坏的开源库是 Marak Squires 开发的 color.js 库和 faker.js 库。这两个库被广泛使用,其中不乏企…

状态和面向对象编程——1.定位步骤

定位 所有无人驾驶车要安全畅游全球,都必须经过一系列相同的步骤。 你一直在学习第一步:定位。在车辆能够安全驾驶之前,它们首先要使用传感器和收集的其他数据对它们所处的位置做出最佳估计。 卡尔曼滤波器 让我们来回顾一下卡尔曼滤波器对汽…

ldconfig命令详解,linux动态链接库

动态链接库管理命令 为了让动态链接库为系统所共享,还需运行动态链接库的管理命令--ldconfig.此执行程序存放在/sbin目录下. ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍…

用于自动驾驶的实时 YUV 多任务 CNN

作者 | AI 修炼之路来源 | AI 修炼之路摘要本文提出了一种针对低功耗车用SoC优化的多任务卷积神经网络(CNN)结构。我们介绍了一个基于统一架构的网络,其中编码器由检测和分割两个任务共享。该网络以25FPS运行,分辨率为1280800。简要讨论了直接利用原生YU…

博客5:文件,目录以及用户的权限管理

linux用户与组的相关内容简介: 1.Linux用户:Username/UID管理员:root,0普通用户:1-65535系统用户:1-499(在centos7上为1-999)作用:对守护进程获取资源进行权限分配登录…

以太坊代币空投合约的实现

2019独角兽企业重金招聘Python工程师标准>>> 本文将介绍如何在以太坊智能合约中实现代币的空投。区块链以太坊世界中所谓空投(airdrop),就是免费给你的区块链地址(公钥)发送代币。 代币空投的方式层出不穷&…

linux命令:ln 使用方法

命令:ln 使用方法指令名称 : ln使用权限 : 所有使用者使用方式 : ln [options] source dist,其中 option 的格式为 :[-bdfinsvF] [-S backup-suffix] [-V {numbered, existing, simple}][--help] [--version] [--] 说明 : Linux/Unix 档案系统中&#xf…

10 个案例分享几个 Python 可视化小技巧,助你绘制高质量图表

作者 | 俊欣来源 | 关于数据分析与可视化一般在Python当中,我们用于绘制图表的模块最基础的可能就是matplotlib了,今天小编分享几个用该模块进行可视化制作的技巧,帮助你绘制出更加高质量的图表。同时本篇文章的第二部分是用Python来制作可视…

(转) 地区赛获胜策略,赛前默念!

1. 比赛中评测会有些慢,偶尔还会碰到隔10分钟以上才返回结果的情况,这段时间不能等结果,必须开工其他题,如果WA,两道题同时做。交完每道题都要先打印。2. 比赛时发的饭不是让你当时就吃的,那是给你赛后吃的…

USG防火墙telnet实验

实验使用USG5500防火墙 &#xff0c;<SRG>system-view [SRG]interface g0/0/0       [SRG-GigabitEthernet0/0/0]ip address 192.168.1.1 24          接口配置地址[SRG-GigabitEthernet0/0/0]display this&#xff08;显示当前配置&#xff09; [SRG-G…

如何营造专属你的企业技术影响力氛围感?我不允许你还不知道

CSDN 推出《开发者研究与洞察》服务。基于3200万开发者的资源&#xff0c;从开发者视角出发&#xff0c;聚焦开发者“关注”、“使用”、“体验”三方面&#xff0c;帮助技术推广者打造技术品牌、优化技术产品的市场投放策略、提升技术产品的开发者使用体验&#xff0c;直接聆听…

php报错Permission denied

去apache的log下看error_log文件 #cd /usr/local/apache2/logs/ (13)Permission denied: exec of ....index.php failed加权限就可以 #chmod x index.php路径

Spring笔记——8.基于XML Schema的简化配置

我们可以使用XML Schema的配置方式来简化xml文件的配置。p&#xff1a;简化设值注入p&#xff1a;与property子元素作用相同&#xff0c;用于设值注入。若想使用p&#xff0c;则xml文件中需要引入对p的说明&#xff0c;一般自动生成的xml都会自带。xmlns:p"http://www.spr…

测试服务命名和动态注册路由的方式@Xan

2019独角兽企业重金招聘Python工程师标准>>> 1、测试服务命名&#xff1a;如不需要网关进行权限和登录验证时&#xff0c;服务名称命名后面加“tests”&#xff0c;例如&#xff1a; sysadmintests 2、动态注册路由地址&#xff1a; http://192.168.2.164:55551/sys…

POJ1386 Play on Words

题意&#xff1a;判断一些单词能不能首尾连成一体 #include <iostream> #include <algorithm> #include <cstring> #include <cmath> #include <cstdio> using namespace std; int n,father[30],range[30],save[100010],in[30],out[30]; bool us…

Linux tail 命令详解

用途从指定点开始将文件写到标准输出。使用tail命令的-f选项可以方便的查阅正在改变的日志文件&#xff0c;tail -f filename会把filename里最尾部的内容显示在屏幕上&#xff0c;并且不但刷新&#xff0c;使你看到最新的文件内容。 语法标准语法tail [ -f ] [ -c Number | …

万粉博主推荐,微信小程序 +Flask 后端调用 AnimeGanV2

作者 | Yunlord博客 | Yunlord做一个小程序&#xff0c;直接在手机端就能一键生成专属于自己的动漫头像&#xff0c;下面是展示效果&#xff01;&#xff01;&#xff01;核心功能设计该小程序想要实现的是将微信头像或者选择相册中的照片动漫化&#xff0c;所以拆解需求后&…

第十周课下作业

第十周课下作业&#xff08;补做课堂测试&#xff09; 一、知识点总结 1、单链表 创建单链表链表中数据的插入list.add("**");链表中数据的排序Collections.sort();链表中数据的删除lsit.remove("");2、排序 树集概念树映射 TreeMap<K,V>**适合用于数…

IE6的bug

内部系统 公司6楼正常&#xff0c;7楼不正常&#xff0c;一查系统没问题&#xff0c;7楼IE6&#xff0c;6楼是IE8 原因是系统接入第三方一个富客户端的程序&#xff0c;这个IE6不支持所以一直卡着。卡多了就挂了。 因为表象是还在卡着的网页浏览器一关重开就好了。。。。 而如…

python-sendcmd主动模式访问ftp——修改port中IP地址信息

用python访问ftp站点&#xff0c;主动模式发送port时&#xff0c;修改了IP地址&#xff0c;抓包分析网络会话信息。activesocket.py 1 #python for socket active mode 2 #!/usr/bin/python 3 # -*- coding: utf-8 -*- 4 import ftplib5 import os 6 import socket 7 impor…

「CSDN 2021年度 IT 技术影响力之星评选」活动报名倒计时!

“CSDN 2021年度IT技术影响力之星评选”活动自2021年12月6日启动以来受到了行业各界的关注以及企业和个人的积极响应&#xff0c;截止目前&#xff0c;已收到上千份参评报名。本次评选活动的第一阶段——企业/个人参与提名将于2022年1月30日结束&#xff0c;以真实数据为基础&a…

Spring Cloud入门教程 - Zuul实现API网关和请求过滤

简介 Zuul是Spring Cloud提供的api网关和过滤组件&#xff0c;它提供如下功能&#xff1a; 认证过滤压力测试Canary测试动态路由服务迁移负载均衡安全静态请求处理动态流量管理在本教程中&#xff0c;我们将用zuul&#xff0c;把web端的请求/product转发到对应的产品服务上&…