如何用技术恢复模糊的图像?在线教学…
作者 |小白
来源 |小白学视觉
有人认为恢复模糊的图像是不可能的,因为会丢失信息。但我对这个问题进行了很多思考,并认为如果输出图像的大小与输入图像的大小相同,那实际上是可能的!这样,输出就有足够的像素/信息来恢复原始像素/信息。
首先,解释一下什么是卷积以及如何使用卷积来模糊图像,以及它如何使用模糊的图像。卷积是一种数学运算,当应用于图像时,可以将其视为应用于它的过滤器。
在这个动画中,我们可以看到一个图像与过滤器/内核卷积的例子。原始图像是蓝色矩阵,内核是滑动的深蓝色矩阵,输出是蓝绿色矩阵。
卷积是通过将重叠的内核和图像相乘,然后对乘积求和来获得的。以下等式可能会有所帮助:给定图像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、卷积、图像处理和线性代数的好方法。
我认为我们现在不必担心人们不会恢复模糊的图像了。
左边是模糊的图像,右边是重建的图像。
如何用技术恢复模糊的图像?在线教学…相关推荐
- 你可以恢复模糊的图像吗?
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 有人认为恢复模糊的图像是不可能的,因为会丢失信息.但我对这个问题进 ...
- 恢复模糊的图像 SmartDeblur
SmartDeblur 是一个用 C++ 编写的用来恢复模糊图像的工具,基于 QT 4.8 开发. SmartDeblur 使用 FFTW 库来实现快速傅立叶算法. Y-Vladimir / Smar ...
- net slim 分割_如何用TensorFlow和TF-Slim实现图像标注、分类与分割
原标题:如何用TensorFlow和TF-Slim实现图像标注.分类与分割 图像即可获取. 笔者将和大家分享一个结合了TensorFlow和slim库的小应用,来实现图像分类.图像标注以及图像分割的任 ...
- 运动模糊的图像修复调研
前言 1.什么是运动模糊 在用摄像机获取景物图像时,如果在相机曝光期间景物和摄像机之间存在相对运动,例如用照相机拍摄快速运动的物体,或者从行驶中的汽车上拍摄外面静止不动的景物时,拍得的照片都可能存在模 ...
- 程序员如何用技术变现
如今的中国人,不再羞于谈钱,甚至有些过度追求金钱,这是时代的进步,而程序员拥有编写代码的手艺,作为一名匠人,当然可以通过手艺来赚钱.谈到程序员的变现途径,我们通常会想到的方法有: 接项目 开发小软件 ...
- 一种输电线路视频图像在线监测装置
高压输电线路的运行情况,关乎到各行各业供电正常,关乎到万家灯火.因此对供电部门电力供应的质量要求越来越高,所以高压输电线路的电网安全显得尤其重要. 输电线路视频图像在线监测装置主要针对高压输电线路的人 ...
- 技术学院技能发展网络在线技能培训在线技能Rtaj比赛进行到一乔
技术学院技能发展网络在线技能培训在线技能Rtaj比赛进行到一乔 技能发展共同体(SDN)是专为您通过利用专有技术,使数以百万计主管人力资源的革新能力的提高.在接下来的10年中,SDN进球帮助能力5万青 ...
- ChatGPT论文写作指导01——教育技术学的研究对象如何增强在线教学交互?
文章目录 第一个问题:教育技术学的研究对象是什么? 第二个问题: 第一个问题:教育技术学的研究对象是什么? 教育技术学的研究对象是什么?! An error occurred. If this iss ...
- 如何用计算机做函数图像,用计算机画函数图像 优秀教学实录
陈芳 地区: 北京市 - 北京市 - 海淀区 学校:北京市清华育才实验学校 共1课时 信息技术应用 用计算机画函数图象">信息技术应用 用计算机- 初中数学 人教2011课 ...
最新文章
- neutron CLI is deprecated and will be removed in the future. Use openstack CLI instead
- R语言ggplot2可视化绘制一头奶牛、Linux下使用cowsay打印奶牛(cow)
- 掌握图神经网络GNN基本,看这篇文章就够了
- js escape,unescape解决中文乱码问题的方法
- dataframe.sum()函数
- javaone_替代JavaOne 2013
- 烧写linux内核的步骤,启动redboot后,向目标机烧写一个linux内核的全过程
- 【SIGIR 2021 最佳学生论文】图像文本检索的动态模态交互建模
- 分布式应用中的一致性协议
- java 强类型 弱类型_强类型,弱类型,静态类型,动态类型的区别
- zuul源码分析之Request生命周期管理
- document.readyState 属性
- react-native之react-native-vector-icons
- 第一次滑雪经过——教你如何省钱
- [资源分享][Unity][人物模型][动作]一些人物模型以及动作的分享
- UE4 材质学习 (02-利用UV来调整纹理)
- Burpsuite破解用户名和密码
- 失业下的深圳中年:没有人活的容易,生活仍得继续...
- 【个推CTO谈数据智能】之数据安全计算体系
- java基础数据类型和运算符
热门文章
- 计算机网络分为两大阶段,【多选题】计算机网络的发展分为哪些阶段?()
A. 远程终端联机阶段 B. 计算机网络阶段 C. 计算机网络互联阶段 D. 信息高速公路阶段...
- 安卓x86_Android:虚拟机体验基于安卓10的BlissOS V12.2 Android X86版
- OpenCV学习系列教程第五篇:测试和提高代码的效率
- Windows10安装Mysql5.7.19.0 msi 版本报错
- k8s入门系列之介绍篇
- java 基础知识八 正则表达式
- CentOS6.3编译安装Nginx1.4.7 + MySQL5.5.25a + PHP5.3.28
- 01 http协议概念及工作流程
- 命令行查看电脑WIFI密码
- android显示温湿度设计与实现,基于Android平台蝴蝶兰大棚温湿度测控系统的设计与实现...