你可以恢复模糊的图像吗?
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
有人认为恢复模糊的图像是不可能的,因为会丢失信息。但我对这个问题进行了很多思考,并认为如果输出图像的大小与输入图像的大小相同,那实际上是可能的!这样,输出就有足够的像素/信息来恢复原始像素/信息。
首先,解释一下什么是卷积以及如何使用卷积来模糊图像,以及它如何使用模糊的图像。卷积是一种数学运算,当应用于图像时,可以将其视为应用于它的过滤器。
在这个动画中,我们可以看到一个图像与过滤器/内核卷积的例子。原始图像是蓝色矩阵,内核是滑动的深蓝色矩阵,输出是蓝绿色矩阵。
卷积是通过将重叠的内核和图像相乘,然后对乘积求和来获得的。以下等式可能会有所帮助:给定图像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:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
你可以恢复模糊的图像吗?相关推荐
- 如何用技术恢复模糊的图像?在线教学…
作者 |小白 来源 |小白学视觉 有人认为恢复模糊的图像是不可能的,因为会丢失信息.但我对这个问题进行了很多思考,并认为如果输出图像的大小与输入图像的大小相同,那实际上是可能的!这样,输出就有足够的像 ...
- 恢复模糊的图像 SmartDeblur
SmartDeblur 是一个用 C++ 编写的用来恢复模糊图像的工具,基于 QT 4.8 开发. SmartDeblur 使用 FFTW 库来实现快速傅立叶算法. Y-Vladimir / Smar ...
- 运动模糊的图像修复调研
前言 1.什么是运动模糊 在用摄像机获取景物图像时,如果在相机曝光期间景物和摄像机之间存在相对运动,例如用照相机拍摄快速运动的物体,或者从行驶中的汽车上拍摄外面静止不动的景物时,拍得的照片都可能存在模 ...
- 仅模糊背景图像而不是前面的文本
正如标题所说. 如何模糊容器的背景图像而不模糊前面的文本? <div class="card"> <div class="head"> ...
- linux wget 命令_我如何使用wget Linux命令恢复丢失的图像
linux wget 命令 2004年,开放剪贴画库(OCAL)成为免费插图的来源,任何人都可以出于任何目的使用它们,而无需注明出处或提供任何回报. 这个站点是开放源代码世界对1990年代每个家庭办公 ...
- python裁剪图片边缘模糊_用cv2模糊部分图像后的锐利边缘
要在该图像上使用python和hsm来检测图像,请执行以下操作:# "org" is the original image, i convert it to HSV color a ...
- 模糊聚类 图像 matlab,matlab模糊聚类算法进行图像分割的源程序
<MATLABGUI程序设计>代码 目录 第一部分MATLAB基础 第1章MATLAB概述 1.1MATLAB软件介绍 1.1.1MATLAB语言 1.1.2MATLAB绘图功能 1.1. ...
- OpenCV图像处理——修复失焦模糊的图像
前言 这是一个图像去模糊的小demo,用OpenCV实现. 代码: #include <iostream> #include "opencv2/imgproc.hpp" ...
- 低照度图像 颜色恢复 matlab,低照度图像修复方法总结
在遇到图像曝光不足时,先前主要分为两种主流思路:基于直方图均衡和基于retinex算法(在之前的总结里分别有介绍). 这两类算法大都存在的缺点:或多或少存在图像过增强现象,使得颜色失真.所以,图像曝光 ...
最新文章
- 基于Coravel定时任务之计算总页数
- 2016计算机课程设计,2016年计算机组成原理课程设计-硬布线控制器的设计.doc
- why my employee binding does not work - important MVC debug
- 一个在线编写前端代码的好玩的工具
- Oracle在Linux平台安装时涉及的/etc/security/limits.conf
- ARM汇编杂项伪指令
- go 输入输出流(bufio)
- 表单中的日期 字符串和Javabean中的日期类型的属性自动转换
- Mac和windows哪个好
- P2 邹博机器学习logistic回归
- 计算机三级网络技术备考复习资料zhuan
- nodejs 截断字符串_JS对于字符串的切割截取
- 主页 被 2345 篡改怎么办
- 18位身份证的正则表达式并说明
- Winfrom+Devexpress 之GridControl ConvertTo TileView 制作精美的卡片式看板
- c语言double ave,[编程入门]结构体之成绩统计2-题解(C语言代码)
- oracle的视图如何使用,Oracle 视图讲解及使用实例
- 小程序源码:实用的智力测试智商提升
- U9系统报错:Enterprise[9999] 不存在
- 黑色 仿Windows 8 Metro界面 网站css3+html5模板