計算機原來要晃一晃才好用

話說二戰的時候,美國轟炸機每次執行任務,除了滿載著威力強大的炸彈以外,還常常要裝配一台計算機,飛機飛行方向和投彈的拋物線的計算都離不開這台機器。可是世界上第一台電子計算機在二戰結束後才發明,轟炸機上當時攜帶著的「計算機」其實就是個裝有一大堆齒輪的大箱子,這台笨重的箱子計算能力還遠遠比不上今天的手裡拿著的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除了可以在圖像中欺騙你的眼睛以外,在聲音中也可以欺騙你的耳朵。如果一段音樂每個時間點的幅度都被四捨五入處理,原來的音樂里就會摻雜進其他頻率的雜音,影響效果。如果我們讓各個時間點的幅度加上一點小的誤差,這種四捨五入產生的雜音就會被削弱和平均化,表面上降低聲音質量的方法反而讓聲音效果更好
推薦閱讀:

演算法中的工具抽取和演算法重構
最近的旁路攻擊二連錘修復情況收錄(系統&固件)
VB6.0目前到底處於什麼樣的位置?個人使用已經超過10年,基本上99%的應用場景都可滿足,為何還處於淘汰邊緣?
DP-動態規劃問題心得
近幾年人工智慧的進步算大嗎?

TAG:計算機 | 計算 | 好用 |