首页 >> 计算机科学 >> 文章

话说二战的时候,美国轰炸机每次执行任务,除了满载着威力强大的炸弹以外,还常常要装配一台计算机,飞机飞行方向和投弹的抛物线的计算都离不开这台机器。可是世界上第一台电子计算机在二战结束后才发明,轰炸机上当时携带着的“计算机”其实就是个装有一大堆齿轮的大箱子,这台笨重的箱子计算能力还远远比不上今天的手里拿着的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除了可以在图像中欺骗你的眼睛以外,在声音中也可以欺骗你的耳朵。如果一段音乐每个时间点的幅度都被四舍五入处理,原来的音乐里就会掺杂进其他频率的杂音,影响效果。如果我们让各个时间点的幅度加上一点小的误差,这种四舍五入产生的杂音就会被削弱和平均化,表面上降低声音质量的方法反而让声音效果更好。

参考资料

1、http://en.wikipedia.org/wiki/Dither

0
为您推荐

77 Responses to “计算机原来要晃一晃才好用”

  1. 吧错吧错~

  2. gentboy说道:

    关于机械计算机那个,感觉解释晃动减少误差那个有点问题。如果晃动只是创造误差的话,那么最终产生的误差应当更大才对。根据‘齿轮’这个关键字,我感觉误差减小的真正原因是震动导致齿轮传动中齿的空隙偏差变小。考虑一系列齿轮传动,如果没有震动的话,那么首尾的误差正好就是所有齿轮空隙的和。比如齿轮1,2,3,4的误差分别是+/- 3 +/-2 +/-4 +/-1,没有震动时误差很稳定,那么最终误差只能是+10或者-10。但是如果有震动,误差就会以一定几率出现,就会导致齿轮的齿有更大的几率呆在齿轮正负空隙的中间。最终导致最终的误差大大变小。
    [评论不能画图好痛苦]

  3. 好几个图片打不开。。。扫兴。。。

  4. 三叶虫说道:

    很好,有趣

  5. megadeath说道:

    不错,不过图有点太小了。

  6. Skydark说道:

    “蒙娜丽莎图”……蒙娜丽莎可没上过playboy……
    http://en.wikipedia.org/wiki/Lenna

  7. gildor说道:

    知道图像处理里的dithering,不知道摇晃计算机的dithering,长见识了!

  8. paul说道:

    高频抖动

  9. sweetrryy说道:

    怎么成蒙娜丽莎了~

  10. jingyis说道:

    那是lena lena~

  11. 汉尼拔说道:

    可以理解为“移动电话要移动着打” :mrgreen:

  12. 写的还是很不错的。过来支持下
    霸王防脱洗发水
    http;//www.zhangtoufa.com

  13. 六如说道:

    长见识了

  14. dolphincat333说道:

    很奇妙,呵呵

  15. FutureBoy说道:

    几乎是本计算机图像处理/图形学教材里都会有的Lena

  16. FutureBoy说道:

    "虽然晃动的误差完全是随机的,但是5.4还是更接近于5,所以最后变成5的可能性更大" 这句是不是有问题啊?按理说误差为正和为负的概率是相等的,那么5.4变成5.3的概率跟变成5.5的概率没什么差别啊

    • beiang说道:

      我觉得这个意思是,本来按照机器本身的设定,5.4应该通通变成5才对;但是偶尔抖动过头了,它就变成6了。由于它本来理论上该变成5,只是偶尔变成6,所以它实际上变成5的可能性比6更大。

    • 另類人说道:

      对于需要四舍五入的计算机来说,5.4和5.3是没有区别的,都是5,但是5.4和5.5是有区别的,一个是5,一个是6,所以就造成了文中所述的差别。

    • taying32说道:

      我觉得也是 5.4晃成5.3或5.5 的概率是一样的,并不存在最后变成5的可能性更大。

      • cloverforce说道:

        5.4晃成5.5和5.3的概率是一样的,但是如果算上5.4本身,那变成5的概率就比变成6的概率大了吧

        • fre说道:

          对的,如果误差在0.3之内的话,5.4可以抖成5.1,5.2,5.3,5.4,5.5,5.6,5.7,很显然抖成5的概率有7分之4,6的概率只有7分之3.

  17. 游客说道:

    那几张图片怎么可能是dithering出来的呢?

    • pig_10说道:

      Dither之后缩小,那图一眼就能看出不是原始尺寸的
      Dither的效果有的时候可以非常惊人
      有些公司专门靠开发这种图像Dithering技术赚钱,比如webtech的OPTPiX ImageStudio,几乎所有的PS2游戏都用这个软件Dither,256色不仔细看根本和16bit色没差别的程度
      音频Dither也有一些做得好的,比如POW-R,卖硬件Dither装置赚钱= =

  18. MeoG说道:

    我是进来拜一下图片及压缩行业的保护神lena的

  19. directus说道:

    没有人类的视觉暂留,恐怕也没有用了。

  20. 文赋说道:

    是不是电子管的功放-胆机,也是这个原因呢?听歌的时候用胆机说有胆味,也是因为电子管对电流造成抖动?

    • 希望の未来说道:

      这个问题较为主流的看法是电子管更易产生偶次谐波,晶体管更易产生奇次谐波,人耳更喜欢偶次谐波(这个的原因我就不知道鸟)

    • 春雨折柳蟹说道:

      楼下正解。
      如果一段音乐每个时间点的幅度都被四舍五入处理,原来的音乐里就会掺杂进其他频率的杂音,影响效果。如果我们让各个时间点的幅度加上一点小的误差,这种四舍五入产生的杂音就会被削弱和平均化,表面上降低声音质量的方法反而让声音效果更好。
      发烧友里有人尤其喜欢黑胶,认为其音色远过CD。

  21. illusiwind说道:

    怎么光一个头啊,上lena的全身照吧!

  22. 桃木仙说道:

    这个好玩,。

  23. Roach说道:

    看了此文,无比怀念DOS游戏时代,貌似画面精美的三国志英杰传,只有16色;无比怀念Win98下,星际争霸只有256色,画面却依然精美。

    • pig_10说道:

      那个和Dither无关……点绘是直接用像素点绘制出来的,跟抖动技术没关系
      纯粹是艺术家牛逼……

  24. harrell说道:

    这个作为网页图像压缩的方法很给力

    • pig_10说道:

      当年的GIF就是256色,当然大量应用了抖动技术
      现在偶尔也有256色的png,不过jpg早已成为主流,256色抖动不怎么吃香了……

  25. zyxwct9091说道:

    有意思

  26. 按播放键说道:

    这个技巧好像取像的时候也会用:如果想达到比望远镜的自身图像传感器分辨率还要高一点的精度,可以通过把镜头“晃一晃”——对焦对偏一点点——来达到。

  27. 露琪诺说道:

    碉堡了啊............= =

  28. zjudafo说道:

    挺有意思,今天知道了lena

  29. 若惊鸿说道:

    计算那个是因为振动时已经相当于范围模糊计算,像概率云一样
    比单纯的四舍五入作为判断条件要准确的多

  30. Freehv说道:

    所以我们也不知道世界是连续的还是间断的?

    • 若惊鸿说道:

      量子力学现在显示世界是不连续的,我们的真实世界也存在分辨率的问题,分辨率和普朗克常数相关

  31. 陈大葱说道:

    ADC过采样原理...

  32. haha说道:

    昨天老板不在,我在办公室玩游戏,卧槽,瞄到一女同事既然在偷偷的上这种网站 http://www.sosok.tk 如果被她老公知道了肯定被气死.......

  33. 1. 系统的误差只可能是累加, 指望两个误差刚好抵销掉, 那是不可想像的.
    2. 此抖动非彼抖动, 完全是不相及的东西,

  34. gxsheng说道:

    我们的显示器不就是 dithering 的吗?
    只有3原色,只不过每种颜色可以调节亮度,多了强度因素而已。

  35. 裴瑞雪说道:

    长知识了

  36. aaa说道:

    照片那个抖动貌似和计算机那个抖动不是一个性质啊....照片那个抖动应该就是计算深浅的程度四舍五入成黑或白,这个不纯在概率,就是说同一照片处理结果具有无数次准确的可还原性,而计算机那个如果正确结果是99这次抖出来是99,下次可能是98,不具有结果的准确可还原性,明显是因为概率在参与。。。

  37. haha说道:

    一是增加分辨率,二是通过点数控制深浅,其实就是更平均更平滑嘛...

  38. pl说道:

    原来如此,红蓝紫那个是有亲身体验的

  39. 林达祺说道:

    真TM有趣

  40. gongkui说道:

    机械计算机的原理没有相关介绍,所以震动造成更精确的解释让人存疑

  41. 山远水济说道:

    关于讨论说 “计算机的抖动和图像的抖动” 不是一回事,我认为应该这样理解:

    (1)=》计算机的抖动。默认情况下5.4一定会被认为是5。而通过抖动后,增加了超过5.5进入6的概率。画一个以5.4为平均数的正态分布曲线,超过5.5的小于6.5的面积是四舍五入为6的概率、超过4.5小于5.5的面积是四舍五入为5的概率。通过调整标准差,使成为5的概率和成为6的概率刚好能平均为5.4是最有结果。(这是粗略分析,严谨点应该不仅仅是5和6,把小概率时间的其他数也加入进去,但影响不大。)个人粗略1000次的蒙地卡罗模拟算了下,方差为0是必定为5,标准差0.1时平均5.16,标准差为1时平均5.41,标准差10时平均5.42。优化求解为标准差8.07时平均值5.40。可见此时的最有标准差已经非常大了。完全可以“狠狠地震动”——比如飞机抖。

    (2)=》图像的抖动。图像的抖动和计算机的抖动是一回事。计算机是一维抖动,每一单一变量通过人工增加不确定性的变量,在计算机的四舍五入过程中实现许多变量计算结果的平均数接近。图像的抖动是多维抖动(RGB 或者RGBahpla),通过人眼解析度不足实现2维图像(9格9变量)的平均数接近。这里可能不太严谨,大致就是这么个意思。

    • 山远水济说道:

      注释。关于计算机抖动的模拟。由于只是粗略的模拟,次数1000次,仅用于说明,并不具备实际操作意义。

    • cloverforce说道:

      这位兄弟的说法很有见地,关于计算机抖动的说明很棒,不过话说抖动还是不能太厉害,如果抖得太厉害,那些机械计算机很可能都散架了啦……

  42. Astron说道:

    dithering这个关键词解释得非常好,谢谢!

  43. 蘑菇布衣说道:

    手表中的陀飞轮貌似也是这个原理,利用不停转动的陀飞轮抵消地球引力对手表走时引起的误差。

  44. 000说道:

    "虽然晃动的误差完全是随机的,但是5.4还是更接近于5,所以最后变成5的可能性更大" 这句是不是有问题啊?按理说误差为正和为负的概率是相等的,那么5.4变成5.3的概率跟变成5.5的概率没什么差别啊http://www.xinour.com/ 信商食品网 http://www.tltesoft.com/ 太航软件网

  45. etherdream说道:

    记得以前玩魂斗罗的时候,靠近电视机仔细看,发现那一大坨散弹其实只有1个,不停的变换位置,让人产生有很多个的错觉。(那个年代的红白机硬件很有限吧。只能靠这方法视觉欺骗了)

Leave a Reply