梵高眼里的《星空》究竟有多美

36氪  •  扫码分享
我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  

编者按:原文作者 Piotr Wendykier ,专注于 mathematica 算法编程及研发。根据本地阅读习惯略有删改,英文好的同学建议 阅读原文

梵高有一幅油画叫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方法生成最优的临近图像纹理,修补并扩展图像的全景。

![]( http://a.36krcnd.com/photo/2014/af49cb7becde5475afb571

[本文编译自: blog.wolfram.com ]

随意打赏

提交建议
微信扫一扫,分享给好友吧。