百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

讨厌马赛克?Google 表示你可以「修复」它了

bigegpt 2024-08-12 14:19 2 浏览

1982 年上映的科幻电影《银翼杀手》构想了一个充满赛博朋克科技的 2019 年:漫天都是飞行汽车,人类可以使用一种大屏幕机器(Esper)完成许多不可思议的工作。

主角里克·戴卡德在追查复制人行踪时,就用了 Esper 来挖掘一些被肉眼忽略掉的线索。

里克将现场找到的一张可疑的照片塞进了 Esper 里面, 一遍又一遍地无损放大照片上的一角,最后在镜子的倒影找到了人造人朱拉。

科幻作品的想象力有时候确实会被当时的科技所局限,1982 年 PC 才刚开始流行,《银翼杀手》没有想象到互联网的出现改变了人类生活的方式,也没能想像出模拟技术会有一天被数字技术取代。

不过它对无损放大图像技术的想象却十分超前,这是一个至今都难以解决的难题。

你可能也遇到过这样的情境:聚会过后朋友们一起拍了一张合照,回去后放大合照想看看老同学的脸,或者当晚喝的饮料品牌,结果看到的却是模糊不清的马赛克。

这是因为当我们将照片放大到一定程度时,局部分辨率已经非常低,看到的都是像素点组成的图像。

我们有可能像 30 年前的幻想那样,从微不足道的「马赛克」提炼出额外的图像信息吗?

Google 的 AI 团队近日的发布的一篇博客里提到了一个新的图片算法,非常接近《银翼杀手》的设想。

不可思议的分辨率提升

▲ 64 x 64 的皮卡丘

一张 64 X 64 像素的照片有多大?以 iPhone 拍摄的 1200 万像素的照片为模版,大约只有其三千分之一的大小,显示在一块高清的屏幕上时,你只会看到满满的「马赛克」。

▲ 超高分辨率的照片

在数字时代,我们在屏幕里看到的每一个图像都是由密密麻麻的像素组成,单位面积组成图像的像素越多,分辨率就越高,图像也就相应得越清晰。

Google 的 AI 研究人员便在思考,有没有可能从低分辨率提取到足够多的图片信息,用机器学习尽可能还原图片的原貌,提高图片的分辨率,得到一张清晰的图片呢?

▲ 图片来自:Google

在其最近发表的博客 ,Google 展现了其最新的研究成果,从效果来看十分震撼——通过两种不同的算法,能将 64 X 64 像素的照片还原成 1024 X 1024 像素分辨率,并且细节效果非常逼真。

需要指出的是,Google 通过机器学习用算法还原出来的照片与原照片势必会存在一些偏差,但当我们无法获得原始景象(例如过去的老照片)时,一张尽可能贴近真实的「还原」照片确实难能可贵。

▲ 图片来自:Google

根据 Google 的介绍,修复一张「马赛克」照片由两个过程组成——「破坏」与「重组」。

首先,为了尽可能挖掘「马赛克」像素方块的图形细节,Google 的研究人员会先用高斯噪声算法处理试验样本,得到一张完全由噪点组成的「雪花图」,看起来有点像以前模拟电视无信号的画面。

▲ 第三行是 Google 的修复算法,第四行是原图参考 图片来自:Google

接着,研究人员再利用神经网络算法,逆转高斯噪声的破坏过程,通过反向复原的过程合成新的图像数据,将从纯噪声图尽可能地降噪,得到一张清晰的图片。

▲ 图片来自:Google

图片修复的原理并不复杂,但是其中涉及到的算法并不简单,为了修复出「一比一还原」的高清大图,Google 的研究人员提出了超分辨率算法 SR3 和级联扩散模型 CDM,通过大规模的图片比对学习提高还原的准确性。

值得一提的是,虽然我们一直用「马赛克」来称呼低分辨率的大像素低清图片,但这和真正经过打码的照片有着本质上的差异。

▲ 图片来自:Google

Google 的还原算法之所以能够将低清图片变清晰,本质上是根据图片本身所包含的正确图像信息,通过庞大的数据库里的无数图像进行比对、匹配,最后得到模拟出的近似像素填充。

而当照片被涂抹上马赛克时,图片所包含的图像信息就会发生变化。

马赛克算法简单来说去在一个区域内,按照固定间隔,随机选择像素点的颜色,然后把区域内所有像素的颜色取得平均值,变成新的颜色填在方格里。

经过打码后,原本的像素信息都以丢失,得到的只是随机算出的错误信息,这时再让机器学习去还原,就像是要求它对着一道题目完全出错的试卷做出正确答案,几乎不可能答得出来。

所以如果有人想用 Google 算法挖掘一些被抹掉的隐私信息,可以打消这个念头了。

你已经迈入了未来

▲ 图片来自:Google

Google 的高清修复算法最终很有可能应用到 Google 照片、Snapseed 等 Google 图像处理软件中,像 HDR、视角矫正等算法一样成为我们的修图工具之一。

回到《银翼杀手》电影上, Esper 其实是台很有趣的机器,它有点是模拟技术与数字技术的融合。

一方面它很先进,人们可以用语音控制它,并且实现无损放大;另一方面它又很老套,有着清晰的大屏幕却还是 CRT 结构,导入照片的过程还是从实体照片扫描。

根据电影的效果,Esper 有可能是定点照片的某一处坐标后,通过精密的镜片结构(显微镜)放大照片观察。现在来看,无损放大的想法很超前,但模拟技术显然不是属于现实的未来。

对于现代人来说,拿在手里的手机和电脑就是每个人的「Esper」。

▲ 图片来自:Adobe

如今照片早已完成了全数字化工作流的演变,用数字技术放大照片已经不是难事。换句话说,其实你已经迈入了《银翼杀手》所描绘的「未来」。

▲ 图片来自:Adobe

图像超分辨率一直是计算机视觉领域一个热门的研究主题,Adobe 等公司都在开拓相关的图像处理技术,在 Photoshop、Lightroom 等图形处理软件已经有所应用。

以 Photoshop 为例,在导入了 RAW 格式图片后,可以选择「增强」功能的「超分辨率」功能,软件会根据相似内容参照,丰富图片的纹理,将图片的分辨率放大 4 倍,整个过程大概需要一分钟。

▲ 图片来自:Adobe

对比增强前后的照片可以看到,分辨率提高后照片的锐度有了明显的提高,一些模糊不可辨认的细节也变得清晰。

Adobe 在今年 3 月发布的一篇技术博客中提到,其采用的超分辨率算法也是通过了大量的机器学习训练,不断地在完善和改进。

▲ 图片来自:Adobe

让图片分辨率爆炸式地提高有什么意义吗?也许在拍摄完照片后,你不会将之放大深究每一个细节,但是当你需要将这张照片打印出来时,照片成像的分辨率直接决定了打印的最大尺寸。

这对摄影师来说显得尤为重要,有时候在用广角镜头拍摄风光时天边飞过一只老鹰,用广角镜头抓拍往往不能拍摄到鹰身上的羽毛细节,这时用超分辨率放大后再裁切,很可能就能得到想要的画面。

▲ 先裁剪,再用超像素放大得到 1000 万像素的照片 图片来自:Adobe

Adobe 在博客里用了一张 250 万像素的照片作为例子,用超分辨率功能放大到了 1000 万像素,使之可以打印成「像样」的照片,Adobe 将这个过程形容为「数字变焦」。

对比 Adobe 和 Google 的算法,两者存在着一些差异,Adobe 需要保留了大量图片原始信息的 RAW 格式照片进行计算,而 Google 的算法可以基于一些非常粗糙的信息来还原照片。

▲ Adobe 的算法经过大量机器学习不断进步的过程 图片来自:Adobe

目前来看,两种算法都仍未完全成熟,还需要大量的机器学习提高计算还原的准确度。

不过可以肯定的是,超分辨率技术会在不久的将来成为最流行的图像技术之一,帮助人们摆脱长焦镜头等器材的限制,记录下生活的每一个细节瞬间。为了看到更清晰的世界,我们仍未停止探索。

相关推荐

为3D手游打造, Visual Studio Unity扩展下载

IT之家(www.ithome.com):为3D手游打造,VisualStudioUnity扩展下载7月30日消息,微软正式发布升级版VisualStudioToolsforUnity扩...

由ArcMap属性字段自增引出字段计算器使用Python的技巧

1.前言前些日子有人问我ArcMap中要让某个字段的值实现自增有什么方法?我首先想到像SQLServer中对于数值型字段可以设置自增。所以我打开ArcCatalog查看发现只提供默认值,没办法只能看...

微软首次回答 HoloLens 相关问题,终于爆料了

fengo2015/04/2115:11注:本文作者张静是NVIDIAGPU架构师,微信公众号“黑客与画家”(HackerAndPainter),知乎专栏地址。欢迎各位童鞋与他交流探讨。...

C#指针的应用(c#指针类型)

C#在有限的范围内支持指针。C#的指针只不过是一个持有另一类型内存地址的变量。但是在C#中,指针只能被声明为持有值类型和数组的内存地址。与引用类型不同,指针类型不被默认的垃圾收集机制所跟踪。出于同...

C# 堆栈(Stack)(c# 堆栈中定位调用messagebox 的地方)

C#集合在C#中,堆栈(Stack)是一种后进先出(LIFO,LastInFirstOut)的数据结构。堆栈(Stack)适用于存储和按顺序处理数据,其中最新添加的元素会最先被移除。堆...

欢迎回来:Fortran意外重回流行编程语言20强榜单

TIOBE指数是用来确定一种编程语言受欢迎程度的指标之一。它并不表明哪种编程语言是最好的,也不表明哪种编程语言写的代码行数最多,而是利用在谷歌、维基百科、必应、亚马逊、YouTube等各种引擎和网站上...

C#+NET MAUI实现跨平台/终端(linux,win,ios等)解决方案

简介.NETMulti-platformAppUI(.NETMAUI)是一个跨平台的框架,用于使用C#和XAML创建移动和桌面应用程序。使用.NETMAUI,您可以用一套代码库开发可以在A...

C#代码安全红线:SQL注入防护终极方案,让你的系统固若金汤

在数字化时代,应用系统的安全性至关重要。而SQL注入攻击,长期盘踞在OWASP(OpenWebApplicationSecurityProject)漏洞榜单的前列,成为众多基于数据库的应用系统...

C# (一)状态机模式(状态机代码实现)

最近空闲,炒炒隔夜饭,以前这些模式在自己项目种应用过不少,但一直没有像别人那样写一个系列,最近年纪大了,很多东西都忘记了,特别AI的兴起,更少写代码了,反正没什么事情,自己在重写一遍吧。创建型模式(5...

C# 中 Predicate 详解(c#中的replace)

Predicate泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法。此委托由Array和List类的几种方法使用,用于在集合中搜索元素。Predicate<T>...

C#中$的用法?(c#中&&什么意思)

文章来自AI问答。在C#中,$符号用于字符串插值(StringInterpolation)。字符串插值是C#6.0引入的一种特性,它允许你在字符串中直接嵌入表达式,而不需要使用string.For...

C#并行编程:Parallel类(c# 并行处理)

在Parallel类中提供了三个静态方法作为结构化并行的基本形式:Parallel.Invoke方法:并行执行一组委托。Parallel.For方法:执行与C#for循环等价的并行方法。Parall...

颠覆认知!用Span重构foreach循环竟让数据处理快如闪电

在C#编程的世界里,数据处理效率始终是开发者们关注的焦点。随着项目规模的扩大和数据量的激增,哪怕是细微的性能提升,都可能对整个应用的响应速度和用户体验产生深远影响。近年来,C#引入的Span<T...

Unity3D手游开发实践《腾讯桌球》客户端开发经验总结

本次分享总结,起源于腾讯桌球项目,但是不仅仅限于项目本身。虽然基于Unity3D,很多东西同样适用于Cocos。本文从以下10大点进行阐述:1.架构设计2.原生插件/平台交互3.版本与补丁4.用脚本,...

.NET 7 AOT 的使用以及 .NET 与 Go 互相调用

目录背景C#部分环境要求创建一个控制台项目体验AOT编译C#调用库函数减少体积C#导出函数C#调用C#生成的AOTGolang部分安装GCCGolang导出函数.NETC#...