随机三维图像中可以找到多少动物和阿尔普物形?

█ 本文译自 Wolfram 首席科学家 Michael Trott 2017年2月23日的 Wolfram 博客文章:How Many Animals and Arp-imals Can One Find in a Random 3D Image?

在二维投影中究竟有多少动物、兽头、人脸、外星人和鬼怪?

引言

在最近的一篇 Wolfram 社区文章 "How many animals can one find in a random image(随机图像中可以找到多少动物)?" 中,我根据随机 (二维) 黑白图像中的像素集群视点研究了空想性错视(pareidolia )现象。下图是我从随机选择的、不相关黑白像素的单个800*800图像中连接的黑色像素簇中发现、提取、旋转、平滑和着色的一些形状:

人类大脑能迅速从这些形状中识别出人脸、动物、动物头和鬼怪。 人类的视觉系统在进化过程中不断优化的结果使我们能识别捕食者和食物。 我们对上述形状中的眼睛(或一双眼睛)的认知速度是惊人的。

一个很自然的问题:我们的这种视觉特征是仅针对二维侧影形状么?对三维形状也能迅速识别吗?我们将在本文中观察三维图像中的随机形状和这些三维形状的二维投影。Wolfram 语言最新版新增的各种与区域相关的函数使得这一切成为可能并且很有趣。

文章标题中的阿尔普物形(Arp-nimal)指的是法国雕塑家让·阿尔普(Jean Arp)雕塑风格的对象,是一种平滑、圆形、随机卷曲的生物形态。下面是些例子:

这些形态经常隐含在由随机黑白体素制作的三维图像中。我们快速预览一下将从随机图像中提取的形状:

这里我们还会涉及到 Henry Moore 的雕塑作品。

充分发挥想象力,你可能在下面的二维图像中看到外星人。

和二维情况一样,我们从一个随机图像开始:这时,三维图像的体素值是0和1. 为了可重复性,我们对伪随机数生成器播种。阿尔普物形相当普遍,任何种子都可以生成它们。我们从一个相对较小的图像开始。图像越大,包含的阿尔普物形越多。

随机三维图像的形状

乍一看很难相信,上面三维形状的蓝图存在于最后一个3D方块中。下面,我们把它们提取出来,使它们看起来更明显。

和二维情况一样,我们使用 ImageMesh 提取白单元的连接区域。这些区域看上去仍然像连接多面体的随机集合。平滑边界后,会出现更好看的形状。

下面是使用函数 ConnectedMeshComponents 分离的区域。函数 makeShapes3D 综合了图像创建、寻找相连的体素区域和区域分离等三个步骤。

出于演示的目的,在下面的例子中,我们使用相对低密度的白色体素,以避免出现单个大连接区域跨越整个立方体的情况出现。

这里是从三维图像中找到的区域,在原始位置分别着色。

为了平滑外边界,使形状更像动物、阿尔普物形或外星人,自定义函数 smooth3D 是循环细分算法的快速粗糙应用。(由于三维形状可能有更高的属类,我们不能直接使用内置函数 BSplineSurface,其直接等同于二维情形。)下面是上述第三个提取区域的连续平滑。

使用函数 BoundaryMeshRegion 的区域绘图主题 "SmoothShading" , 我们可以添加法线来获得一个真正平滑边界的感觉。

而只要不到320美元,就可以获得这款阿尔普风格的纯铜雕塑。 一个完美、独特、令人惊叹的后情人节礼物。下面有数百个可供打印的形状。我们使用 ShellRegion 制作中空区域从而节省材料降低造价。

以下是上面另一个区域的平滑过程。

这是另外三个。

现在许多三维形状可以从随机和非随机三维图像中提取。下一个输入计算对应于带有互质坐标的栅格点的区域。

粗光栅化和平滑的重要性

在上面的例子中,我们是从粗三维区域开始,由于明显的三角边界面,感觉上像多面体。只有经过平滑处理后,我们可以获得"外观有趣"的三维形状。平滑过程的细节并不重要,只要尖锐的边角被软化即可。

人类善于感知平滑的形状,因为自然界中大多数植物和动物都有平滑的边界。这也是为什么我们对三维图像应用 ImageMesh 后,并没有从所返回的区域中看见什么有趣的东西。这与二维的情况很相似。在下面的二维可视化情形中,我们从随机选择的点集开始,通过曲线连接这些点。填充曲线产生变形的棋盘似模式,不会让我们发现生命体的存在。以粗粒度方式对填充的曲线进行光栅化,仍然不能提醒我们任何有机形状。但连接的区域尤其是平滑后的区域,却提示了生命个体的存在。

以下的 Manipulate (笔记本中有此代码)允许我们探索互动会话中涉及的步骤和参数。

这里是对应的三维示例。

三维形状的阴影

Marina Shchitova 女士在对我的社区文章回复中,借助手影展示了一些人脸和动物。 这里显示了 Cassel1896 (https://archive.org/stream/cassellscomplet00longoog#page/n447/mode/2up)一书中的经典例子。

那么,上述两种三维形状的投影/阴影是什么样的?(有关在阿尔普年轻时代使用阴影进行艺术创作的概述,请参阅 Forgione1999, http://caa.tandfonline.com/doi/abs/10.1080/00043079.1999.10786899)。

这些三维形状的投影正是我在连接二维图像的平滑部件中所遇到的类型。 函数 projectTo2D 采用三维图形复合体,并将其投影到与三个坐标平面平行的薄切片中。 结果仍然是一个 Graphics3D 对象。

以下是上面两个二维形状的 2x3 投影。大多数人可以辨认出投影中的动物形状。

如果我们保持视点和方向与坐标轴平行,从更远的距离观察三维形状,就可以得到这些投影。

为了便于比较,下面是第一个对象在很远处的三个视图,有效地显示了投影。

通过旋转三维形状,我们可以在二维投影中产生大量的不同形状。下面的 Manipulate 允许我们交互式探索投影形状的空间。

因为我们需要实际旋转的坐标,让我们来定义函数 rotate,而不是使用内置函数 Rotate

下面是三维形状随机方向的16个投影到 x-z 平面的阵列:

初始三维图像不一定是完全随机的。 在下一个例子中,如果圆圈与体素相交,我们随机将圆圈放在三维空间,并使体素为白色。 结果是对应于连接的体素区域的三维形状具有更多网络形状。

双侧对称的三维形状

三维动物的二维投影通常没有对称性。 即使动物具有对称性,从给定的视点和给定的动物姿势观察,可视形状也不具有对称性。 但是大多数动物具有双侧对称性。 我现在将使用具有双侧对称性的随机图像。 结果,所得到的许多形状也将具有双侧对称性。 之所以不是所有的形状,是因为一些区域不与对称平面相交。罗夏(Rorschach) (Schott2013,http://jnnp.bmj.com/content/85/6/699)指出,双侧对称性对于经典的罗夏墨迹测试很重要:"中线似乎以一种神奇的力量吸引患者的注意力"。 函数 makeSymmetricShapes3D 将生成具有双侧对称性的区域。

下面是一些例子:

下面是对这些区域进行平滑并着色的版本。这里选择的视点是为了让双侧对称更明显。

为了更好地感受到三维图像的像素值与所得到的平滑形状之间的连接,下一个 Manipulate 允许我们为小尺寸三维图像指定每个像素值。 复选框的网格/矩阵表示具有双侧对称性的三维图像的一半的体素值。

随机独立地选择三维图像的体素值使得不太可能形成非常大的连接组件而没有孔。 而使用随机函数和从这些随机连续函数导出的体素值会产生在体素范围上具有更大均匀性的不同类型的三维形状。 这样,体素值不再完全不相关。

下面是由此得到的一些区域,以及它们被平滑的版本。

三维形状的精选示例

我们的笔记本初始化部分包含 400 多个精选的具有"有趣"形状的区域,分为五种类型(大部分是任意的,但是基于人的反馈)。

我们来看一些例子。 这是一个选定区域的列表。 在随机三维图像中发现的许多形状可能是第8代神奇宝贝(Pokémon)候选人,甚至是一些新的生物,暂时称为它们 Mathtubbies。

许多形状让人联想到动物,即使腿和头的数量并不总是预期的数字。

要从初始化单元中查看所有400多个形状,可以执行以下操作。

Do[Print[Framed[Style[t, Bold, Gray], FrameStyle -> Gray]]; Do[Print[Rasterize @ makeRegion @ r], {r, types[t]}], {t,Keys[types]}]

上面列表中的形状是手动选择的。 现在可以使用机器学习技术来实现部分自动化,来寻找有趣的动物形状和"自然"朝向。 对于最简单的情形,我们可以使用 ImageIdentify

这貌似一个龙虾与狮子狗的杂交物种。 这当然不是现在我们要讨论的,我们关心的是二维投影。(有关使用软件在建筑和通用设备中找到面孔的信息,请参阅 Hong2014, http://ieeexplore.ieee.org/document/6882207/)。

修改三维形状

在回到二维投影之前,我们先来对生成的三维形状进行修改,构成不同的视觉外观。

例如,我们可以对这些区域进行四面体化,并用球体填充四面体。

或使用更小的四面体填充。

或添加一些尖刺。

或用立方体进行填充。

或加厚或打薄形状。

或者加厚并添加薄片。

或只是添加一些条纹作为掩饰。

或通过圆柱体的线框来构造内部。

或构建一个棍子图。

或用管子填充曲面。

或是开尔文倒转。

所选示例的阴影

我们来看看这些三维形状的二维投影。如果稍微发挥一点想像力,我们可以再次看到相当数量的人脸、女巫、地精、小鸟和其他动物。下面选出一些示例,我们显示原始方向和随机取向的三维形状,以及随机旋转的三维形状的三个坐标平面投影。

不出所料,其中有些是可识别的三维形状,像这些看上去像鸟头一样的投影。

还有一些让人脑洞大开,就像下面这些长着两条腿和一对鳍的青蛙海豚合体的投影中的两个头。

三维形状的不同朝向可能产生十分不同的投影。

娱乐一下,这里有更多的投影。

四维图像的形状

到此为止,我们已经了解了三维形状的二维投影。下一步我们来看一下四维形状的三维投影。目前尚不存在内置函数 Image4D,但是找到白色四维体素的连接分量并不难。我们通过应用图论函数 ConnectedComponents 来实现。如果两个四维体素共享同一个三维立方体面,我们把这两个四维体素看作由一条边连接。举例来说,我们使用一个 10*10*10*10 体素的四维图像。自定义函数 makeVoxels4D 生成四维图像数据,whitePositionQ 标记白色体素的位置以便快速查询。

四维图像包含相当多的连接分量。

下面是四维复合体的4个典型投影。

我们把查找连接分量打包成一个函数 getConnected4DVoxels

我们同时定义一个函数 rotationMatrix4D 以便在四维空间的6个二维平面上旋转。

一旦有了三维投影,我们可以再次使用上面的函数来平滑对应的三维形状。

在没有 Tralfamadorian 视觉的情况下,我们可以将四维连接体素复合体进行可视化,在四维中旋转该复合体,然后投影到三维空间,再平滑形状后投影到 二维平面。 对于单个四维形状,这产生了大量可能的二维投影。 函数 projectionGrid3DAnd2D 将四个三维投影规范地投影到二维平面。 这意味着我们得到12个投影。根据个体的形状,有些可能是相同的。

我们将三维形状在单独的图形分别显示,以免投影互相遮盖。 再次,许多二维投影,还有一些三维投影,看上去像动物形状。

下面的 Manipulate 可以对四维形状进行旋转。人们可以看出许多动物形状和人脸。

下面的例子中有一些怪兽的头。

我们还可以接着看看五维图像,但基本就是这个思路了。 总结一下观察结果:旋转和平滑后,随机三维图像中黑色体素连接区域的一小部分具有类似动物的形状或动物形状的艺术渲染。 这些三维形状的大部分(~10%)二维投影明显呈现了空想性错视现象,也就是说我们认为从投影中可以发现动物和人脸。四维图像,由于体素数量随着维数呈指数级增加,会产生数量更多的动物和人脸形状。

原文发布于微信公众号 - WOLFRAM(WolframChina)

原文发表时间:2017-07-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT派

入门 | 关于神经网络:你需要知道这些

我们简单回顾一下神经网络的发展历程,如果你想了解更多关于其发展历程的信息,请看这篇维基百科的文章(https://en.wikipedia.org/wiki/A...

11620

如何在Python中规范化和标准化时间序列数据

如果您的时间序列数据具有连续的尺度或分布,则在某些机器学习算法将获得更好的性能。

59190
来自专栏专知

【干货】计算机视觉实战系列08——用Python做图像处理

25620
来自专栏计算机视觉战队

CVPR 2018 笔记

知乎号:https://www.zhihu.com/people/chang-you-li-92/activities

9210
来自专栏梦里茶室

TensorFlow 深度学习笔记 从线性分类器到深度神经网络

Limit of Linear Model 实际要调整的参数很多 ? 如果有N个Class,K个Label,需要调整的参数就有(N+1)K个 Linear...

30090
来自专栏Coding迪斯尼

详解神经网络中的神经元和激活函数

12830
来自专栏大数据文摘

手把手 | OpenAI开发可拓展元学习算法Reptile,能快速学习(附代码)

15130
来自专栏Coding迪斯尼

使用矩阵运算加速实现神经网络误差的反向传播

16630
来自专栏算法channel

高斯混合模型:不掉包实现多维数据聚类分析

《实例》阐述算法,通俗易懂,助您对算法的理解达到一个新高度。包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战。期待您的到来...

41260
来自专栏郭耀华‘s Blog

DSSM:深度语义匹配模型(及其变体CLSM、LSTM-DSSM)

2.3K50

扫码关注云+社区

领取腾讯云代金券