话说二战的时候,美国轰炸机每次执行任务,除了满载着威力强大的炸弹以外,还常常要装配一台计算机,飞机飞行方向和投弹的抛物线的计算都离不开这台机器。可是世界上第一台电子计算机在二战结束后才发明,轰炸机上当时携带着的“计算机”其实就是个装有一大堆齿轮的大箱子,这台笨重的箱子计算能力还远远比不上今天的手里拿着的casio计算器,用起来也就比算盘好一些吧。这些机械计算机设计者最为担心的问题是里面的一大堆齿轮零件哪天不高兴掉下来一两个,整台机器或许就玩不转了,飞机迷失航向,炸弹误扔到自己的阵地上就要出大麻烦了。在轰炸机飞来飞去的时候,不断的晃动会不会让机器失灵成了很多人心头的忧虑。可这家伙真上了飞机,人们却意外发现它们不仅没有出问题,计算的结果反而比在地面用的时候更准确,令人疑惑不解,难道这些机器对于过山车的感觉情有独钟?人们知道了机器的这个“怪毛病”之后,干脆在地面的机器里安装上了振动器,让它们一边轻轻晃,一边工作,体验一下地面飞行的感觉,它们不仅不会进入梦乡,还会工作得更好。
这些计算机究竟为什么会喜欢坐灰机而不晕呢?经过研究发现,在精度上,这些机械玩意肯定没法跟现在的电脑比,计算不可能算到小数点之后很多位,常常要四舍五入。举个例子,假设计算机在完成一个任务的时候,一个参数先后被乘了五次,这个参数的精确值是5.4,但是计算机只能用整数,5.4只好每次都被四舍五入成了5,正确的结果应该是5.4*5.4*5.4*5.4*5.4=4591.65,可是计算的结果只有5*5*5*5*5=3125,两者有不小的误差,因为每次四舍五入之后的值都比正确的值“矮了一小截”,几次误差叠加在一起就变得越来越大。机器在晃动的时候,会再额外产生一些的小误差,但并不会雪上加霜,5.4可能被晃成5.5,5.6,四舍五入就是6了,当然也可能被晃成5.3,5.2。虽然晃动的误差完全是随机的,但是5.4还是更接近于5,所以最后变成5的可能性更大,假设五次里5.4三次变成成了5,两次被化成了6,这样计算的结果是5*5*5*6*6=4500,比起3125精确了好多。当然“晃动”一定要轻微,不能太厉害,如果5.4最后变成了10就完全不靠谱了。
在这些机器里,通过加一些随机晃动的小误差,化解掉计算机四舍五入时候大的误差,这一招称为dithering(抖动)技术,是一个“以毒攻毒”的绝妙主意。
虽然机械计算机在几年后就被淘汰了,可是dithering技术却一直被沿用着,近日各种数码产品上显示的图片,视频,声音也时不时需要“抖动”一下。
很多人小时候一定玩过这样的游戏,用硬纸板制作一个小圆盘,小圆盘上交替涂上红色和黄色,然后把小圆盘中间穿上一根小支柱,让小圆盘像陀螺一样快速旋转,你会看到什么?没错,小圆盘既不是红色,也不会黄色,而是红黄两色快速“轮班”在你的眼前闪过,被“调成”了中间的橙色。
如果一段视频播放的时候可以显示的颜色有限,比如只能显示红色和黄色,不能显示橙色(当然今天一定不会有那么落后的设备了,不过几百种、几千种颜色还是可能有不够用的时候),视频画面里橙色部分只能像5.4被四舍五入成5一样,看更接近哪一个,或者被算成红色,或者被算成黄色。视频每秒钟要快速播放24张画面,眼睛反应不过来,觉着看到的是连续的图像。我们也可以加一些”抖动“,让画面的颜色红色和黄色交替出现,该显示黄色时候也闪两下红色,该显示红色的时候也闪两下黄色,每次随机的发生。如果我们想展示“深橙色”,就让画面显示红色的概率大一点,每秒平均多显示一些次,如果想展示浅橙色,就让画面显示黄色的概率大一点,以这样的方式“调色”。像小圆盘一样,这样快速变换画面的dithering就可以欺骗住你的眼睛,“无中生有”创造出画面中本来没有的深橙色、橙色、浅橙色各种额外颜色。
一段视频里可以调出新的颜色,那么一张静止的图片又怎么办呢?dithering同样可以发挥作用。首先拿黑白图片来说,这是一张正常的黑白照片,里面有黑色,有白色,也有各种深浅不同的灰色元素。
现在如果只给你两种画笔,纯黑色和纯白色,没有灰色的画笔。你还能画出这幅图的效果吗?如果只是把图片里比较浅的灰色将就着用白色表示,把图片里比较深的灰色“四舍五入”成黑色,图片就会不幸变成下面的样子:
效果惨不忍睹。
再看一下下面这张图片
貌似ok呀!里面颜色深浅可变,咋看起来不只有黑白两种颜色。可是仔细一看,里面并没有灰色的元素,和上一幅图完全一样,只有黑点和白点。
相比于第二幅图,我们在第三幅图里进行了dithering,在黑色的区域加了一些白点,在白色的区域加了一些黑点,黑点比例比较多的区域可以表示深灰色,白点比较多的区域可以表示浅灰色,我们神奇的变了个魔术,只用黑点白点就可以画出深浅变化的图片。
下面还有一张质量更好的dithering图片,中间的那一个Lena小姐图里其实只有白色和黑色,没有任何中间的颜色,不论你相不相信。
看完了黑白、灰度的照片,我们再来看一下彩色的照片
这里有六张图片,最左上角的那张图片是神马颜色的?红色和蓝色。最右下角的那张图片是神马颜色的?紫色。错了!最右下角的那一张图片也只有红色和蓝色,这六张图片里红色小方格和蓝色小方格依次变小,到最后很小的时候,红色和蓝色都会消失,相当于我们把红色和蓝色小点”勾兑“成了紫色,在动态视频里,通过不同时间点显示不同颜色,dithering可以在你的眼前变出不存在的颜色;在静态的图片里,dithering则是在不同的位置洒下密密麻麻不同颜色的小点来让你产生颜色错觉。
在下面三张图里,第一张图是正常的图片,在第二张图里,可以用的颜色数量大大减少,这只猫成了“大花脸”,图片变得模糊。在第三张图里我们用了dithering技术,虽然颜色的种类和第二张一样多,但是看起来却舒服了好多。
dithering除了可以在图像中欺骗你的眼睛以外,在声音中也可以欺骗你的耳朵。如果一段音乐每个时间点的幅度都被四舍五入处理,原来的音乐里就会掺杂进其他频率的杂音,影响效果。如果我们让各个时间点的幅度加上一点小的误差,这种四舍五入产生的杂音就会被削弱和平均化,表面上降低声音质量的方法反而让声音效果更好。