文件

裸眼 3D 图片转换

把一张普通照片变成能看出立体感的画面。深度模型读出画面里什么近什么远,据此合成出另一只眼睛看到的那一路画面,再输出成四种东西:靠自由融合看的左右并排(SBS)立体对、配红蓝眼镜看的立体图、什么都不用戴就能看的摇摆动图,或者深度图本身。全程在浏览器标签页里跑,照片不上传。

  • 一次深度估计,四种输出——左右并排、红蓝立体、摇摆动图、深度图,而且每个参数都是拖着就能看到效果
  • 摇摆动图既不用戴眼镜,也不需要练会自由融合,是唯一一种对看的人零要求的输出

把照片拖到这里

文件留在你自己机器上,不会上传

支持 JPEG、PNG、WebP、AVIF、GIF、BMP;动态 GIF 只取第一帧。会读取相机记录的旋转方向,竖着拍的照片进来就是正的。

先添加一张照片任意普通的 2D 照片都行。深度是从画面本身推出来的,不需要特殊相机。

3D

功能简介

这个工具拿一张平面照片做了什么,以及每一步为什么在那里。

  1. 01

    从一张照片里读出深度

    神经网络深度模型看着这张图,估计出每个像素的相对远近——不是测量距离,而是排出谁在谁前面的顺序。它读的是人看照片时读的那些线索:遮挡、透视、纹理疏密、相对大小。正因为如此,随手拍的一张照片就能当素材,不必是立体相机拍的。

  2. 02

    合成出第二个视角

    深度图驱动一次横向位移:近的像素挪得比远的多,这正是现实中你两只眼睛收到的两幅画面之间的差别。左右两路各挪总量的一半、而不是固定一只眼睛挪全量,所以构图仍然居中,而且每一路只需要补开一半的遮挡区。

  3. 03

    一次深度估计,四种输出

    模型每张照片只跑一次,之后全是算术,所以左右并排、红蓝立体、摇摆动图、深度图都出自同一份估计,不用额外付一遍代价。这也是每根滑块拖着就有反应的原因——不需要重新跑一遍再等。

  4. 04

    认真做的红蓝立体

    七种算法,红蓝和绿品两套都包含杜布瓦(Dubois)最小二乘投影。它不是把通道分派给两只眼睛,而是把每片滤色片的漏光算进去,解出「透过眼镜看上去最接近原图」的那一对画面,红色因此不再变成黑洞。另外配了色彩强度和左右对调两个开关,正好对应最常出岔子的两件事。

  5. 05

    什么都不用戴的摇摆动图

    动画在两个视角之间摆动,用画面的移动替代了两只眼睛提供的视差。不用眼镜、不用练技巧,而且发到哪里都还能播。循环是特意做成两端不重复的,朴素的来回扫描会在两端各重复一次,一个循环里就顿两下;最外侧视角只能靠猜补出来的边缘条也一并裁掉了。

  6. 06

    把深度边界对回画面上

    模型工作在 518 像素左右,它给出的深度边界是软的、而且略微偏离物体轮廓,人像周围那圈背景光晕就是这么来的。这里用一次边缘敏感的滤波,拿照片自己的边缘当参照重新平均深度,深度就不会再越过画面早就画清楚的那条界。

  7. 07

    从远端补空洞

    像素横向挪开会露出相机从未拍到的区域,而且总是出现在较近物体的边缘。每个空洞都从更远的那一侧补,因为缺掉的内容本来就属于那边;补的时候把背景镜像折进去,纹理能接着延续,而不是拉成一条死板的横杠。

  8. 08

    把「多大才看得见」直接摆在屏幕上

    一对平行法图像能不能融合,取决于它画出来有多宽、跟像素尺寸没关系,而这一点几乎绊倒了每一个人。预览区带一个显示尺寸控制,并给出每半张的实际宽度估计,还有一个按钮直接把它压进大约 63 毫米的限制里。

如何使用

从一张平面照片到能看出立体的画面。

  1. 01

    添加照片。任意普通的 2D 图片都行——手机随手拍的、扫描件、下载的都可以。文件不离开浏览器。

  2. 02

    点「生成 3D」。第一次会先下载深度模型,然后读这张照片,需要几秒。

  3. 03

    选要做成什么。想直接分享就选摇摆动图;有红蓝眼镜就选红蓝立体;要自由融合就选左右并排;要进头显也选左右并排,但要用平行法;要给别的程序用就选深度图。

  4. 04

    调立体强度,调到景深清楚、物体边缘又没有明显拖影为止。预览是拖着就变的。

  5. 05

    设屏幕平面。左右并排保持 0,让画面整体往前浮;红蓝立体和摇摆动图则把它放在主体上。

  6. 06

    结果不理想就切到深度图看看。亮的近、暗的远。模型读错场景的话,这里比在成品上要明显得多。

  7. 07

    左右并排的话,用预览下面的显示尺寸把画面缩到每半张 63 毫米左右,再放松或者对眼。

  8. 08

    点下载。静态输出可存 PNG、JPEG 或 WebP;摇摆动图会在这一步编码成 GIF。

功能说明

决定结果是不是真的看得见的那些细节。

  • 直接对照片做单目深度估计,随手拍的一张就是合格素材,全程不涉及立体相机
  • 左右并排输出可选平行法或交叉法排列;VR 图片浏览器通常需要平行法排列
  • 七种红蓝立体算法,红蓝和绿品两套都含杜布瓦最小二乘投影
  • 色彩强度调节与左右对调,正好覆盖红蓝立体融不了的两个最常见原因
  • 摇摆动图以 GIF 输出,既不用眼镜、也不需要任何自由融合的功底
  • 摇摆动图的帧数、速度、运动曲线可调,循环的两个折返点不重复,所以不会一秒一顿
  • 摇摆模式自动裁掉靠猜补出来的边缘条,那块补丁每帧都在变、最招眼
  • 深度图可导出灰度或三种彩色映射,并带一个反转开关给要求「近的暗」的软件
  • 以照片自身边缘为参照的深度精修,消掉主体周围绝大部分光晕
  • 左右两路各挪一半位移,构图保持居中,每一路只补开一半的遮挡区
  • 空洞从每条边更远的那一侧补,并把背景镜像折进去,而不是从前景拉出来抹平
  • 实时预览:深度模型每张照片只跑一次,之后每一项参数改动都立刻重绘
  • 带实际宽度估计的显示尺寸控制,这才是「为什么我看不出来」的真正答案
  • 静态输出可选 PNG、JPEG 或 WebP 并带质量调节,摇摆动图输出为动态 GIF
  • 全程在浏览器标签页里运行:不上传、不排队、不用注册、没有水印

适合哪些场景

为什么有人想把一张平面照片变成立体图。

  1. 做一张能发出去的摇摆图

    摇摆图是最容易在信息流里分享的 3D 格式:不用眼镜,也没有要学的东西。过去只有多镜头胶片相机能拍,而且得提前把镜头安排好。这里是用你手里已经有的一张照片做出来。

  2. 老照片和扫描件

    家庭旧照、档案照片,以及一切拍摄于立体相机之前的影像,天生就是平面的,而且再也补拍不了。深度估计是给它们造出第二个视角的唯一路子,做完还不用买任何设备就能看。

  3. 给一屋子人看的红蓝立体图

    自由融合是个人技能,不是每个人都会。一包纸质红蓝眼镜几乎不要钱,却能让一屋子人同时看同一张图,这也是红蓝立体到今天仍然是课堂、讲座和印刷品首选格式的原因。

  4. 给别的软件用的深度图

    网页视差效果、三维软件里的置换、合成软件里的景深与重打光、以及按深度做条件的图像生成,都要一张深度图,而且往往没有现成的。很多人打开这个工具就是为了把它导出来。

  5. 给 VR 头显准备的照片

    头显图片浏览器通常支持左右并排。先在这里选平行法;文件里不带立体元数据,所以播放器如果询问,再手动选「左右并排」和左右眼顺序。这个文件在手机上也可以用自由融合看。

  6. 风景、人像和产品图

    前景清楚、背景真实的画面比又平又乱的画面转得好太多。层次分明的风景、房间里的一个人、素色台面上的单个物件,都接近理想情况:深度结构没有歧义、边缘干净、背后要补的东西也少。

  7. 讲清楚立体视觉是怎么回事

    把一张照片转出来、再把深度图摆在旁边,这种展示方式是图解做不到的。失败的例子和成功的例子一样有教学价值,而在红蓝立体、左右并排和摇摆动图之间来回切,就是同一个问题的三种不同答案。

  8. 不能离开本机的照片

    家人照片、客户素材,以及任何签过保密的东西,都不该为了试一下效果就跑到别人的服务器上。处理都在标签页里:网络只会下载深度模型,照片本身不会离开你的设备。

延伸阅读

深度模型看到什么构图就按什么构图算,所以裁切和摆正要放在转换之前而不是之后,这件事该交给 图片裁剪。特别大的照片只是白白吃解码内存、并不会让深度估计变好,先把它缩到合适尺寸则是 图片尺寸调整的活。把同样的转换用在整段视频而不是单帧上、分段处理并把原音轨带过去的,是 裸眼 3D 视频转换

裸眼 3D 到底是怎么回事

每种输出背后的原理,以及决定你能不能看见的那几条约束。

  1. 两幅画面,一只眼睛一幅

    所有立体 3D 的原理都一样:让两只眼睛各看到同一场景略有差别的一幅画面,大脑就会把它们融合成景深。影院靠偏振眼镜分开这两幅,头显靠两块屏幕,红蓝立体靠颜色。自由融合则干脆跳过硬件,靠你自己控制眼球朝向,让每只眼睛正好落在左右并排画面的其中一半上。

  2. 平行法和交叉法的区别

    这是两种瞄准方式。平行法是双眼向外放松、像是望向屏幕后方,左眼画面应该放在左边。交叉法是双眼向内、聚焦在屏幕前方,所以两半要对调。同一个文件没法两种通吃——用错方式看,景深会反转,画面整个里外翻过来,而且看上去仍然相当立体,所以不容易察觉。

  3. 为什么平行法对尺寸这么敏感

    要融合平行法图像对,双眼向外转的角度不能超过正前方,因为人眼没法发散。这就给对应点之间的间距划了一条硬上限:大约 63 毫米,也就是瞳距。手机上轻而易举;大显示器上满屏显示时,每半张画面有几十厘米宽,分辨率再高也融不了。

  4. 红蓝立体换掉了什么

    滤色片能分开两幅画面,是因为一片透过的正好是另一片挡掉的——但真实的滤色片做不到完美,总有一部分漏到错误的那只眼睛里,形成重影。更麻烦的是,饱和的红色对一只眼睛很亮、对另一只是黑的,大脑拒绝把它们融合,这就是视网膜竞争,也是廉价红蓝图看着难受的主因。这里的每一种算法都是对这笔账的一个不同答案,从全部保留颜色到全部放弃。

  5. 摇摆动图为什么什么都不用戴

    立体视差并不是你唯一的深度线索。运动视差——近的东西掠过视野比远的快——闭上一只眼睛照样成立,这也是你侧身晃一下就知道谁在前面的原因。在两个视角之间摆动的动画等于把这条线索直接递给你,所以哪怕不会自由融合、身上什么都没戴,摇摆图照样读得出景深。

  6. 瑕疵是从哪来的

    任何基于深度的转换都受两件事限制。一是模型可能读错场景——把海报读成窗户,把倒影读成纵深——这种情况任何参数都救不回来,所以深度图值得看一眼。二是像素横向挪开会露出从未被拍下来的背景,只能凭空补出来。两者都随强度上升而变糟,这就是为什么保守一点的设置通常更好看。

使用建议

让结果真的值得一看的一些习惯。

  • 要给别人看就先做摇摆动图,因为它是唯一一种对对方零要求的输出
  • 立体强度先保守,调到景深清楚就停——瑕疵涨得比效果快
  • 结果不理想先看深度图,模型读错场景是任何滑块都救不回来的,看一眼就知道该换张照片
  • 红蓝立体和摇摆动图把屏幕平面放在主体上,平行法自由融合则留在 0
  • 红蓝立体先试杜布瓦;强烈的红色在闪的时候,先动色彩强度而不是换算法
  • 红蓝立体「明明立体但就是别扭」就点左右对调,眼镜戴反的频率比大家承认的高
  • 平行法看不出来别急着当成坏了,先用显示尺寸调一调——屏幕上有多宽才是能不能融合的决定因素
  • 第一次接触自由融合就先从交叉法开始,能稳定融合之后再转平行法
  • 优先挑前景清楚、背景真实的照片——又平的场景、贴脸特写、大量运动模糊,都让模型无从下手
  • 摇摆动图的尺寸要克制:GIF 每一帧都是完整存一份,宽度在这里比在静态图上贵得多
  • 深度图存 PNG,因为深度图里的压缩瑕疵一旦被别的程序读进去就直接变成错误的几何
  • 裁切和摆正放在转换之前而不是之后,好让深度模型看到的就是你最终要用的构图

边界与注意事项

这个工具做不到什么,以及哪些情况下结果会让你失望。

  • 第二个视角是推断出来的,不是拍出来的。深度是从单张图估计的,估计错的地方几何就跟着错——这和立体相机实拍不是一回事。
  • 有些场景模型会读错。倒影、玻璃、画面里印着的照片、纹理很强的平面、大量运动模糊,都读得不可靠。深度图视图存在的意义就是让你看见,而不是猜。
  • 物体背后被挡住的区域只能凭空补。没有任何设备拍到过那里,所以补的是邻近背景的镜像。强度保守时不显眼,强度高时很明显,细长物体和头发是最难的。
  • 自由融合是需要练的。相当一部分人一开始做不到,也有人始终觉得不舒服。交叉法对多数人更容易;红蓝立体和摇摆动图则彻底绕开了这个问题。
  • 平行法受画面在屏幕上的宽度限制,而不是像素尺寸。在手机上能融合的图像对,在显示器上满屏显示可能根本融不了,这里任何设置都改不了这一点——只有显示多大能改。
  • 红蓝立体一定会损失颜色准确度,也没有哪种算法能彻底消掉重影。强烈的红和绿最难处理,整幅画面几乎都是同一种饱和色调的照片,可能在任何算法下都不好看。
  • 摇摆动图是 GIF,只有 256 色,而且体积涨得很快。抖动能盖住色带,但会带来每帧都不同的噪点,两个选择都不是白拿的。
  • 深度是相对的,不是测量值。数值只说明在这一张画面之内谁在谁前面,没有绝对尺度,同一场景的两张照片给出的数字也不会一致。
  • 深度图是 8 位的,只有 256 个可区分的层级。做视差和抠图绰绰有余,做精细置换不够。
  • 它不是户外弧形 LED 大屏上那种出框特效。那种效果是为一块特定几何的屏幕和一个特定站位做的,从平面照片里推不出来,不管某个 App 怎么宣传。
  • 元数据不会保留。输出是在画布上重绘出来的,EXIF、颜色配置文件和 GPS 信息都会留在原图里——这对隐私是好事,如果你要保留它们就是损失。
  • 广色域和 HDR 照片走的是浏览器普通画布,所以输出是标准动态范围的 sRGB。
  • 深度模型首次使用要下载 26 到 47 MB,取决于你的浏览器有没有 WebGPU。之后走缓存,但换一个全新的浏览器配置就要重新下一次。
  • 一次只处理一张。没有批量模式——决定成品好坏的那些设置是针对某一张具体照片的判断,不是能对着一个文件夹闭眼套用的东西。

常见问题

把照片做成立体图时常遇到的问题。

怎么把 2D 照片转成 3D 图片?

添加照片,点「生成 3D」。深度模型会读出画面里什么近什么远,再按深度把像素横向错开,合成出另一个视角。接着选要做成什么:靠控制眼球朝向来看的左右并排立体对、配红蓝眼镜看的立体图、什么都不用戴的摇摆动图,或者深度图本身。模型只跑一次,所以之后每一项参数都是拖着就能看到效果,四种输出可以随便试,不用重新等。

一定要戴 3D 眼镜吗?

只有红蓝立体需要。摇摆动图什么都不用——它在两个视角之间来回摆动,这个移动给大脑的深度线索和你侧身晃一下时得到的是同一种,所以对只有一只眼睛有视力的人,它照样读得出景深。左右并排也不需要硬件,但需要会自由融合,这是个有人几分钟就上手、有人始终觉得别扭的技巧。如果你想把一张立体照片递给别人、还不用附带说明书,就用摇摆动图。

怎么用照片做摇摆 3D 动图(wigglegram)?

生成深度之后选「摇摆动图」。摇摆图是在同一场景的几个略有差别的视角之间来回摆的动画,原本需要一台并排装了好几个镜头的胶片相机。这里那些额外视角是从深度图合成出来的,所以一张普通照片就够了。设好帧数——2 帧是最经典的硬切,多一些动作更顺——速度选 10 到 14 帧每秒,然后下载动态 GIF。预览会按你当前的设置实时播放,所以在编码任何东西之前就能判断效果。

红蓝眼镜用哪种算法效果最好?

基本上都选杜布瓦(Dubois)。最直觉的做法是把红通道给一只眼睛、绿蓝给另一只,但真实滤色片会漏光,饱和的红色于是对一只眼睛很亮、对另一只是黑的——大脑拒绝融合这种画面,廉价红蓝图看着难受就是这么来的。杜布瓦换了个思路:解出一对「透过真实滤色片看上去最接近原图」的画面,所以红色留得住、重影也基本消失。如果某张图还是在闪,先调低色彩强度再考虑换算法;灰度和单色能彻底解决问题,代价是全部颜色。

我的照片会被上传吗?

不会。深度模型通过 WebGPU 或 WebAssembly 在你的浏览器标签页里运行,之后的每一步都只是画布上的算术。照片从磁盘读进标签页的内存,成品再作为下载写回去。首次使用时会从网络下载深度模型;你的照片和生成结果始终不会上传。

为什么立体效果看起来是反的、或者不对劲?

常见原因有三个,按可能性排序。第一,眼镜戴反了,或者左右并排的图用错了看法——两者都会让景深反转,而反转过来的画面看上去仍然很立体,所以很容易忽略。红蓝立体用左右对调开关,左右并排则在平行法和交叉法之间换一下。第二,模型读错了场景,切到深度图视图立刻就能看出来:倒影、玻璃、画面里印着的照片是常见元凶,深度图错了任何参数都救不回来。第三,强度单纯调得太高了,那看起来是物体周围在拖影,而不是有景深。

能从照片生成深度图吗?

可以——选「深度图」输出再下载。要交给别的软件时,选灰度和 PNG:它会按你选定的输出尺寸生成一张 8 位深度图,和缩到同一尺寸的照片逐像素对齐,默认亮的表示近,也能反转给要求相反约定的软件。JPEG、WebP 和三种彩色映射适合分享或检查,不适合拿来做几何。它是相对深度:只说明这一张画面里谁在谁前面,不代表任何东西离你多少米。视差效果、置换、按距离抠图,以及以深度为条件的图像生成,要的正是这个。

平行法和交叉法有什么区别?

这是两种瞄准眼睛的方式,各自要求两半画面的顺序不同。平行法像是望向屏幕后方,左眼画面要放在左边。交叉法是双眼向内、聚焦在屏幕前方,所以两半要对调。多数人觉得交叉法更容易上手。它避开了平行法的发散上限,但画面适中时依然更舒服。平行法一旦学会通常更放松,但有一条硬性的尺寸上限,因为你的眼睛向外转不过正前方。

为什么我在显示器上看不出左右并排的立体效果?

几乎可以肯定是画得太大了,这一点在平行法上绊倒了几乎所有人。融合平行法图像对要求双眼向外转的角度不超过正前方,因为人眼没法发散,这就把对应点之间的间距卡在大约 63 毫米——也就是瞳距。大显示器上满屏的一对图像,每半张有几十厘米宽,分辨率再高也融不了。预览下面的显示尺寸就是为这件事准备的:把它缩到每半张 63 毫米左右,或者直接点「适合平行法」。交叉法避开这条发散限制,但画面适中时依然更舒服。

哪些照片转出来效果最好?

前景清楚、中景分明、背景真实的照片——层次分明的风景、房间里的一个人、素色台面上的单个物件。这类画面给模型的线索没有歧义,边缘背后要补的内容也少。转不好的是一切又平又含糊的东西:翻拍的照片、一整面文字、大量运动模糊、大片倒影、玻璃,以及主体和背景亮度纹理都差不多的画面。贴得很近的特写本身就没什么深度结构,所以不管强度调多大效果都很微弱。

物体周围的光晕和拖影是怎么回事?

这是两件事。像素横向挪开来构造第二个视角时,会露出原本被较近物体挡住的区域,那些地方从来没被拍到过,只能补出来——每个空洞都从边缘的背景那一侧补、并把背景镜像折进去,但补丁终归是补丁,而且随强度增大。另外,模型的工作分辨率比你的照片低得多,它给出的深度边界是软的、还略微偏离物体,于是头肩周围会出现一圈处在错误深度上的背景。「边缘对齐」这个设置针对的正是第二件事。

手机上能用吗?

能,而且手机是看结果最合适的屏幕:它是唯一一种能让平行法左右并排图像轻松落在宽度限制之内的显示设备,所以在手机上自由融合比在桌面显示器上容易得多。手机上生成深度比带 WebGPU 的桌面机慢,但这是一张照片、不是成千上万帧,所以仍然是几秒钟的事。移动端把输出宽度放小一点——生成之前显示的内存估计会告诉你什么时候设置要得太多了。

更多相关工具

更多在浏览器本地处理图片的工具。