作者 |小白

来源 |小白学视觉

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

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

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

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

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

等价于矩阵方程

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. 你可以恢复模糊的图像吗?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 有人认为恢复模糊的图像是不可能的,因为会丢失信息.但我对这个问题进 ...

  2. 恢复模糊的图像 SmartDeblur

    SmartDeblur 是一个用 C++ 编写的用来恢复模糊图像的工具,基于 QT 4.8 开发. SmartDeblur 使用 FFTW 库来实现快速傅立叶算法. Y-Vladimir / Smar ...

  3. net slim 分割_如何用TensorFlow和TF-Slim实现图像标注、分类与分割

    原标题:如何用TensorFlow和TF-Slim实现图像标注.分类与分割 图像即可获取. 笔者将和大家分享一个结合了TensorFlow和slim库的小应用,来实现图像分类.图像标注以及图像分割的任 ...

  4. 运动模糊的图像修复调研

    前言 1.什么是运动模糊 在用摄像机获取景物图像时,如果在相机曝光期间景物和摄像机之间存在相对运动,例如用照相机拍摄快速运动的物体,或者从行驶中的汽车上拍摄外面静止不动的景物时,拍得的照片都可能存在模 ...

  5. 程序员如何用技术变现

    如今的中国人,不再羞于谈钱,甚至有些过度追求金钱,这是时代的进步,而程序员拥有编写代码的手艺,作为一名匠人,当然可以通过手艺来赚钱.谈到程序员的变现途径,我们通常会想到的方法有: 接项目 开发小软件 ...

  6. 一种输电线路视频图像在线监测装置

    高压输电线路的运行情况,关乎到各行各业供电正常,关乎到万家灯火.因此对供电部门电力供应的质量要求越来越高,所以高压输电线路的电网安全显得尤其重要. 输电线路视频图像在线监测装置主要针对高压输电线路的人 ...

  7. 技术学院技能发展网络在线技能培训在线技能Rtaj比赛进行到一乔

    技术学院技能发展网络在线技能培训在线技能Rtaj比赛进行到一乔 技能发展共同体(SDN)是专为您通过利用专有技术,使数以百万计主管人力资源的革新能力的提高.在接下来的10年中,SDN进球帮助能力5万青 ...

  8. ChatGPT论文写作指导01——教育技术学的研究对象如何增强在线教学交互?

    文章目录 第一个问题:教育技术学的研究对象是什么? 第二个问题: 第一个问题:教育技术学的研究对象是什么? 教育技术学的研究对象是什么?! An error occurred. If this iss ...

  9. 如何用计算机做函数图像,用计算机画函数图像 优秀教学实录

    陈芳 地区: 北京市 - 北京市 - 海淀区 学校:北京市清华育才实验学校 共1课时 信息技术应用 用计算机画函数图象">信息技术应用 用计算机- 初中数学       人教2011课 ...

最新文章

  1. neutron CLI is deprecated and will be removed in the future. Use openstack CLI instead
  2. R语言ggplot2可视化绘制一头奶牛、Linux下使用cowsay打印奶牛(cow)
  3. 掌握图神经网络GNN基本,看这篇文章就够了
  4. js escape,unescape解决中文乱码问题的方法
  5. dataframe.sum()函数
  6. javaone_替代JavaOne 2013
  7. 烧写linux内核的步骤,启动redboot后,向目标机烧写一个linux内核的全过程
  8. 【SIGIR 2021 最佳学生论文】图像文本检索的动态模态交互建模
  9. 分布式应用中的一致性协议
  10. java 强类型 弱类型_强类型,弱类型,静态类型,动态类型的区别
  11. zuul源码分析之Request生命周期管理
  12. document.readyState 属性
  13. react-native之react-native-vector-icons
  14. 第一次滑雪经过——教你如何省钱
  15. [资源分享][Unity][人物模型][动作]一些人物模型以及动作的分享
  16. UE4 材质学习 (02-利用UV来调整纹理)
  17. Burpsuite破解用户名和密码
  18. 失业下的深圳中年:没有人活的容易,生活仍得继续...
  19. 【个推CTO谈数据智能】之数据安全计算体系
  20. java基础数据类型和运算符

热门文章

  1. 计算机网络分为两大阶段,【多选题】计算机网络的发展分为哪些阶段?() A. 远程终端联机阶段 B. 计算机网络阶段 C. 计算机网络互联阶段 D. 信息高速公路阶段...
  2. 安卓x86_Android:虚拟机体验基于安卓10的BlissOS V12.2 Android X86版
  3. OpenCV学习系列教程第五篇:测试和提高代码的效率
  4. Windows10安装Mysql5.7.19.0 msi 版本报错
  5. k8s入门系列之介绍篇
  6. java 基础知识八 正则表达式
  7. CentOS6.3编译安装Nginx1.4.7 + MySQL5.5.25a + PHP5.3.28
  8. 01 http协议概念及工作流程
  9. 命令行查看电脑WIFI密码
  10. android显示温湿度设计与实现,基于Android平台蝴蝶兰大棚温湿度测控系统的设计与实现...