算法让你看到梵高"星空"之外的星空

简介:

梵高有一幅油画叫 Starry Night,也就是《星空》。我常常想,梵高在精神病院完成这幅名作时,他眼里看到(或者脑海中)的星空浩瀚的全局究竟该有多美,或者究竟该有多悲伤。可惜我们永远都只能看到画框中那一小方天地。


最近剑桥大学工程系办了个年度摄影大赛“工程的艺术:来自科技前沿的图像”。大赛的二等奖最后被来自机器学习小组的 Yarin Gal 博士生获得,而他做的事情很有意思:利用机器学习算法扩展梵高的名画 Starry Night,如下图。

Gal 还建了一个专门的网站,用来展示这种 Extrapolated Art,即利用机器学习+图像处理来扩展整幅画的全局景象,因为画往往只提供了一个局部影像。


数字修补技术(digital inpainting)第一次被提出是在 2000 年SIGGRAPH大会上,一篇名为图像修补(Image Inpainting)的文章里。这一技术主要是为了修补那些年代久远的名古画,但在其他图像领域也有广泛的应用。还有一种图像修补算法叫 PatchMatch,是专门用来创作机器艺术(machine art)的。


接下来我们不妨来看一个实现这种名作扩展的编程例子,这个例子将使用Wolfram语言。在 Wolfram 语言里,inpaint 是一个内建函数,需要修补的图像区域可以被三种对象赋值:图像、图形对象、矩阵。

inpaint 里有 5 种不同的方法(method)选项,用来实现不同的图像处理算法:“Diffusion,” “TotalVariation,” “FastMarching,” “NavierStokes,” 以及 “TextureSynthesis”。其中最后一种方法 TextureSynthesis 是系统默认的,TextureSynthesis 跟其他算法不同的点在于,它不会单独操控每个色彩通道,并且它不会增加新的像素值。也就是说,每一个修补像素值都是从输入图像的某些部分里直接获得的,在下面这张图里,你可以很清楚的看到,利用 TextureSynthesis 可以让图像中的比较大的物体直接“消失”。


TextureSynthesis 这种方法是基于一种改良后的最优解算法,该算法在 P. Harrison 的博士论文Image Texture Tools里曾被介绍过。TextureSynthesis 有两个参数,第一个参数是用来做比较的临近像素的数量(NeighborCount),第二个参数是用来寻找最优图像纹理的采样率大小(MaxSamples)。


回到梵高的画来。首先我们导入梵高的 Starry Night,去掉边框。

然后,我们需要先用白色的像素来扩充图像,扩展出后面可以用来修补的空白区域。

然后就可以使用 TextureSynthesis 方法生成最优的临近图像纹理,修补并扩展图像的全景。

效果还不错吧。通过调整 NeighborCount 和 MaxSamples 的值,还可以有不同的扩展效果。有安装 Wolfram 语言开发软件的同学可以下载工程文件(http://blog.wolfram.com/data/uploads/2014/12/ExtendingVanGoghStarryNightInpainting.cdf),没有安装软件的同学还可以在http://www.wolfram.com/programming-cloud/ 里试试。




原文发布时间为:2014-12-07

本文来自云栖社区合作伙伴“大数据文摘”,了解相关信息可以关注“BigDataDigest”微信公众号

相关文章
|
3月前
|
数据采集 监控 API
淘宝商品信息批量获取接口技术详解
本文介绍批量获取淘宝商品信息的两种方法:官方API与Python爬虫。涵盖应用场景、技术实现、代码示例及合规注意事项,助您高效采集标题、价格、销量等数据,用于市场分析与竞品监控,兼顾可行性与风险控制。(238字)
492 0
|
缓存 5G 开发者
【提效】docker镜像构建优化-提速10倍
本文主要记录了自己通过查阅相关资料,一步步排查问题,最后通过优化Docerfile文件将docker镜像构建从十几分钟降低到1分钟左右,效率提高了10倍左右。
1080 122
|
消息中间件 运维 Cloud Native
UU 跑腿云原生化,突围同城配送赛道
UU跑腿自2015年上线以来,已覆盖全国200余座城市,拥有超过850万“跑男”,成为同城即时生活服务行业的头部企业。面对激烈竞争,UU跑腿通过创新获客方式和数字化业务平台建设,实现了波浪式用户增长。为应对快速增长的业务需求,UU跑腿积极推进云原生化,优化IT基础设施,实现了80%的微服务无缝迁移、1分钟内弹性伸缩、80%的运维成本降低及80%的变更稳定性提升,显著提高了系统的稳定性和效率,成为行业内的黑马。
645 16
|
编解码 人工智能 文件存储
卷积神经网络架构:EfficientNet结构的特点
EfficientNet是一种高效的卷积神经网络架构,它通过系统化的方法来提升模型的性能和效率。
590 1
|
Linux Shell
Linux中的realpath命令:深入解析与实用指南
**Linux的`realpath`命令详解** `realpath`用于获取文件或目录的规范化绝对路径,解析相对路径、符号链接及冗余元素。它接受路径输入,返回最短、唯一的绝对路径。支持 `-e`(确保路径存在)、`-m`(允许缺失组件)、`-s`(删除多余斜杠)和`-q`(静默模式)等参数。在脚本中使用能确保路径一致性,但需注意权限和路径检查。了解`pwd`、`find`和`readlink`等命令的用法也有助于选择合适的路径处理工具。
|
算法
海明码详解
本文详细介绍了海明码(Hamming Code)的概念、原理和应用,包括信息位与校验位的关系、校验位的计算方法、错误检测与纠正过程,并通过实例展示了如何使用海明码进行编码,突出了海明码在提高数据传输可靠性方面的重要性。
1751 0
海明码详解
|
存储 Linux BI
Linux 三剑客 grep、sed、awk
Linux三剑客`grep`、`sed`和`awk`是强大的文本处理工具。`grep`用正则表达式搜索匹配行;`sed`是流式编辑器,处理文本流而不直接修改原文件;`awk`则用于灵活的文本分析和报告生成。例如,`grep`可查找匹配模式,`sed`可以删除文件内容,而`awk`能提取特定字段。通过组合使用,它们能高效解决复杂文本任务。
426 1
|
安全 Java API
【本地与Java无缝对接】JDK 22外部函数和内存API:JNI终结者,性能与安全双提升!
【9月更文挑战第6天】JDK 22的外部函数和内存API无疑是Java编程语言发展史上的一个重要里程碑。它不仅解决了JNI的诸多局限和挑战,还为Java与本地代码的互操作提供了更加高效、安全和简洁的解决方案。随着FFM API的逐渐成熟和完善,我们有理由相信,Java将在更多领域展现出其强大的生命力和竞争力。让我们共同期待Java编程新纪元的到来!
669 11
|
Kubernetes 应用服务中间件 nginx
搭建Kubernetes v1.31.1服务器集群,采用Calico网络技术
在阿里云服务器上部署k8s集群,一、3台k8s服务器,1个Master节点,2个工作节点,采用Calico网络技术。二、部署nginx服务到k8s集群,并验证nginx服务运行状态。
3972 2
|
机器学习/深度学习
R语言多元Logistic逻辑回归 应用案例
R语言多元Logistic逻辑回归 应用案例