首先,大家来一起看下面这张图,图里面是不是有一罐平时常见的红色可口可乐?有人会说,我相信我的眼睛,千真万确,肯定有。
不过先别急,把这张图在手机或者电脑屏幕上放大之后,再回头来仔细看一下,是不是感觉到有些不对头?里面似乎只有一些黑乎乎、白花花和青幽幽的线条,唯独没有正了八经的红色,可是把图片一缩小回原形,红色可乐罐又出现了。
【资料图】
社交媒体上广为转发的“红色可乐罐”图片(右侧为局部放大) 图源:jimhejl(twitter)
这种亦真亦幻的诡异现象该如何解释?难道真的因为心中有善,见的都是光明,心中有恶,见的都是黑暗,心中有可口可乐,见的就都是红色易拉罐?
假如视觉欺骗了你,不要悲伤,不要心急,光学为你答疑解惑。一张照片展现出无中生有的颜色其实也并不是什么稀罕事,这与照片本身表示颜色信息的方式有关。
无论是相机,显示屏,还是打印机,投影仪,各种数码图像设备在表示一张图片的时候,都是以像素阵列的形式。说白了,就是整张图是由很多个小方格作为基本单元组成的,每个小方格称为一个像素,具有自己的颜色。
在二三十年前,早期电子游戏机的画质粗糙,分辨率低,每个像素尺寸大,图像总有“方格感”,像打了马赛克一样。后来随着显示技术的发展,一张图的像素数量变多,每个像素尺寸变小,整张图看起来的真实感就越来越强了,单个像素好像隐身了,不过万变不离其宗,像素阵列的形式还是一直保持着。
当然在复古潮流的驱使下,现今流行的以CryptoPunk为代表的NFT头像还是会让你产生明显的“像素感”(NFT专业名称是Non-Fungible Token,非同质化通证)。
早期电子游戏机的画面 图源:Light科普坊/VEER
NFT头像 图源:Light科普坊/VEER
我们平时常说黑白照片和彩色照片,黑白电影和彩色电影,其实“黑白”指的应该是“灰度”,里面虽然没有彩色,但是具有从全黑色、深灰色,中灰色,浅灰色一直到全白色的连续过渡(具体可以用灰度值0到255来表示),也可以带来相当程度的图像效果和表现力。
比如上世纪90年代的电影名作《辛德勒名单》的导演就有意在大部分的画面中采用没有彩色的灰度效果。但有些时候,受技术限制,真正的灰度也是做不到的,比如简易的打印机或者显示屏只能在每个像素显示全黑色(0)和全白色(255),相当于只有纯黑色和纯白色两只画笔,可以称得上是真正的“黑白”二值化显示。巧妇难为无米之炊,要想绘制出一张不同位置灰度深浅不一的照片也要动一番脑筋。
某哥们照片灰度图(左),粗暴近似获得的黑白二值图(中),像素优化获得的黑白二值图(右) 图源:Light科普坊/VEER
例如我们要显示国外某哥们的这张灰度照片,如果直接把不同像素的灰度值硬性近似为纯黑色或者纯白色,浅灰色就一律“四舍五入”为白色,深灰色就一律“四舍五入”为黑色,最后的结果就像第二张图那样惨不忍睹,整个一张“大花脸”。
而第三张图看起来就舒服了很多,似乎其中灰度深浅可变,不只有全黑全白两种颜色,但仔细一看,其实仍然只有这两种像素点,只是由于使用了一种名为“误差扩散”的算法[1],合理控制了不同区域的黑白像素比例,黑点相对密集的地方表示暗的区域,白点相对密集的地方表示亮的区域,以空间分布换取了颜色深浅表示上的精度,就像变了魔法一样,带来了完整的灰度观看体验。
而使用有限数量的画笔创造出千变万化的彩色,同样可以做到。在彩色显示中,红绿蓝是三原色,红光和绿光混合可以产生黄色光,绿光和蓝光混合可以产生青色光,红光和蓝光混合可以产生紫色光,三原色都混合到一起获得的结果则是白色光。
理想情况下,一个像素可以同时产生红绿蓝(RGB)三原色的光,并且三个通道的强度都是可以自由调节的,可以方便地混合出各种彩色。可理想是美好的,现实是骨感的,如果一个像素只能单独显示红色或者单独显示蓝色,要想搭配出紫色咋办呢?
在下面的这些棋盘格子图案中,每个方块都是红色或者蓝色,数量比例是1:1,从左到右,随着格子的逐渐变小,相当于像素变得更小更密集,似乎红色和蓝色在渐渐消失,而最终整个图案变成了紫色。
这其实是错的!
所有的图案(包括最右面的图案)中所有像素都只有红色和蓝色,紫色是人眼融合红蓝色像素产生的一种错觉,或者说凭空感知出了原本不存在的颜色。
红蓝方块尺寸逐渐减小而融合为紫色 图源:焦述铭
下面左图里,每个像素只有256种可能的颜色,在表现更丰富的色彩层次时就显得力不从心,捉襟见肘,而让像素点的位置更合理地分布之后,右边的图明显变得更加令人赏心悦目。
原本256色的图片(左)经过优化处理后的效果(右) 图源:维基共享资源
我们可以通过有限数量颜色像素位置的空间分布获得“无中生有”的新颜色,而时间维度则是另一种方式。
举个简单的例子,很多人小时候一定玩过这样的游戏,用硬纸板制作一个小圆盘,小圆盘上交替涂上红色和黄色,然后把小圆盘中间穿上一根小支柱,让小圆盘像陀螺一样快速旋转,你会看到什么?
没错,小圆盘既不是红色,也不会黄色,而是红黄两色快速“轮班”在你的眼前闪过,被“调成”了中间的橙色。显示屏在播放视频时,事实上相当于每秒钟几十张的静态画面依次快速闪过,而人眼恰好又有视觉暂留效应,把它们混叠在一起,以这种方式快速交替显示两种原色,自然也可以欺骗你的眼睛看到融合后的新颜色。
其实以上提到的这些图像处理把戏还有个专门的名称:抖动(dithering)。这要从几十年前第二次世界大战时候说起。
当时电子计算机还没有发明,美国军方的轰炸机在计算飞行方向和投弹曲线时也只能使用机械计算机,一台大箱子里面包含了大量的齿轮和杠杆零件,别看计算精度不咋地,还挺娇气,怕碰怕摔,在轰炸机驾驶舱里忽上忽下地可不像家里坐在沙发上那么舒服,人们最担心剧烈的晃动会把零件震落下来几个,让机械计算机玩不转了,飞机迷失航向,炸弹误扔到自己的阵地上就要出大麻烦了。
不过人家这种计算机还挺争气,在飞机上也并没有晃坏,而且意外的是,计算的结果反而比在地面上安安稳稳使用时更准确,让人大惑不解。既然它有这个“怪脾气”,工程师们还一度专门设计了模拟飞行状态的振动器,让机械计算机在地面上也能体验飞一般的感觉,以提升计算精确度。
这些家伙为什么在飞机上晃一晃之后更好用呢?
主要是由于早期机械零件不像现在的计算机可以精确到小数点后很多很多位,只有有限的数位,假设只能精确到十位(100,110,120,130,140,…),个位就要四舍五入了,比如123只能用120表示,而128只能用130表示,这显然是不够靠谱的,经过一步步的计算,误差会越积累越多。
与其每次都把123用“缺斤少两”的120表示,一个更聪明的办法是123有的时候用120表示,有的时候用130表示,但是因为它更接近120,用120表示的占比要稍多一些,就像用一杯滚烫的沸腾开水和一杯零度的冰水适当比例调和,可以勾兑出中间某一冷热程度的温水。
而把机械计算机晃一晃,相当于引入了误差,恰好让原本每次都能正常四舍五入的运算一部分时候失灵,四也不舍,五也不入,阴差阳错之下在不经意间实现了这种“数值勾兑”的效果。这种通过加入一些随机的小误差,化解掉计算时四舍五入时候大的误差,是一个“以毒攻毒”的绝妙主意,这是抖动技术最早来源[2]。
在二战结束后的1946年,世界上第一台现代电子数字计算机ENIAC诞生于宾夕法尼亚大学,机械计算机逐渐淡出历史舞台,不过抖动技术在另一个颜色显示技术的舞台上却大放异彩。
各类相机和显示器从发展早期阶段甚至直到今天,在忠实地记录和再现五彩斑斓的现实世界时,遇到的一个棘手的麻烦就是颜色种类不够多,这在几十年前的报纸杂志印刷和电视电脑显示屏中表现尤为突出。
类似于解决早期计算机表示数值位数不够时的抖动方法,就像画家使用调色板一样,我们可以用多种已有颜色调和出不存在的颜色。毕竟人的“眼神儿”不那么好,可以把位置很接近的微小像素或者不同时间点快速变化的像素融合到一起进行虚拟的调色。
随着技术的发展,如今最普通的手机显示屏也可以直接支持很多种颜色,往往不再需要无中生有创造新色彩,但实验室中用于特定场景的不少专业显示设备由于性能受限,还是很依赖相关的技术,比如用于全息三维显示的液晶空间光调制器和数字微镜器件[3][4][5]。
在对于颜色的感知上,人类视觉还有其他很多不可思议的奇妙现象,比如下面这张图,你第一眼印象觉着它是彩色照片吗?
颜色同化网格视错觉图片 图源:stuarthumphryes(twitter)
真相是这张图里大部分像素都是灰度的,无法区分颜色,只有覆盖在灰度照片上的网格线中的像素是彩色的。
当然这些像素颜色不是随意设置的,而是相比于照片中对应像素原本正确的颜色进行了过饱和处理,可以简单理解为网格上的像素颜色比正常情况更鲜艳很多,饱和度很高,相比较之下,背景的灰度像素完全没有彩色,饱和度为0,两种“极端”的像素在人眼的融合之下,使得整张照片看起来具有正常的彩色。
以上这种效应被称为颜色同化网格视错觉[6],当然我们也可以把网格设计的更加密集,到单个像素的尺度,“伪彩色”照片中大多数像素是灰度的事实会更难被发现。
最后让我们回到文章开头的红色可口可乐罐,这又是人眼对于颜色的另外一种误判,下面的草莓图片也有类似效果。
要产生这样的图像效果,具体做法是:
将原本正常颜色的照片分解为有很多微小的点或者细密的线条组成,以线条为例,分为相互交错的两组,其中一组中把线条像素的红色成分设成0,于是这些线中原本有红色的部分看起来偏黑色或者原本没有红色的部分看起来偏青色,另一组中保持红色成分不变,但把绿色和蓝色成分的强度值设为最大(过饱和),这些线会看起来偏白色。两种交错的线条中都相当于调高了绿色和蓝色的强度,降低了红色的强度,等效于通过一张把红光去除掉的滤光片观看原始照片,整张图片像是蒙上了一层偏青色的面纱。
由于这种情况下,即使原本实际为红色的物体也会看起来是黑的,反过来了说,对于表面看起来像是偏黑色的物体,人眼和大脑本能上更趋向于还原它们为红色,于是可乐易拉罐和草莓也就是这样被“染成了红色”,这称为颜色恒常性错觉[7]。
原始彩色图片 Light科普坊/VEER
通过两组交错线条来产生红色错觉(右侧为线条的放大:红色在哪里?)
图源:Light科普坊/VEER
通过两组交错方格来产生红色错觉(右侧为网格的放大:红色在哪里?)
图源:Light科普坊/VEER
以上的种种“骗局”足以证明人类视觉在某些时候辨别颜色的能力简直弱爆了,不过一个更加离谱的例子[8]还在下面。
我们本能地会觉着上下两个物体的颜色明显不一样,一个深灰色,一个白色。但是你只要用一根手指挡住两者之间的交界区域,会发现两个物体的颜色竟然是一摸一样的!这个结果一定会让你抓狂。
图11:一张颠覆你颜色深浅判断能力的图片
图源:American Scientist .org
读完了本文之后,你还相信自己的双眼吗?
它们确实会经常犯各种莫名其妙的错误,每次的错误“犯了就改,改了再犯”,不过也正是这种善意的欺骗,促使你“脑补”出真实物体不存在的颜色,让你感知到的世界更加绚丽多彩。
作者|焦述铭(鹏城实验室)
审核|曹良才(清华大学)
参考资料:
[1] R. W. Floyd, L. Steinberg, An adaptive algorithm for spatial grey scale. Proceedings of the Society of Information Display 17, 75–77 (1976).
[2] Ken C. Pohlmann (2005). Principles of Digital Audio. McGraw-Hill Professional.
[3] S. Jiao, D. Zhang, C. Zhang, Y. Gao, T. Lei, and X. Yuan, "Complex-amplitude holographic projection with a digital micromirror device (DMD) and error diffusion algorithm", IEEE Journal of Selected Topics in Quantum Electronics, 26(5), 2800108 (2020)
[4] X. Yang, S. Jiao, Q. Song, G.-B. Ma, and W. Cai, "Phase-only color rainbow holographic near-eye display", Optics Letters 46(21), 5445-5448 (2021)
[5] K. Liu, Z. He, and L. Cao, “Pattern-adaptive error diffusion algorithm for improved phase-only hologram generation,” Chinese Optics Letters 19(5), 050501 (2021).
[6] S. Jiao and J. Feng, "Image steganography with visual illusion," Opt. Express 29(10), 14282-14292 (2021)
[7]https://www.wired.com/story/remember-the-dress-heres-why-we-all-see-colors-differently/
[8] Purves D, Lotto RB, Nundy S. Why we see what we do: A probabilistic strategy based on past experience explains the remarkable difference between what we see and physical reality. American Scientist. 2002 May 1;90(3):236-43.
本文封面图由Light科普坊提供