人眼在世界中需要對焦才能看清楚相應的東西,看半米的距離需要對焦到半米,看五百米的距離需要對焦到五百米,那麼能否在一個半米距離的平面上製造一個圖像,使人眼對焦到半米的時候模糊,人眼對焦到五百米的時候清晰呢?

長時間看電腦會近視,因為總是對焦到屏幕上,那麼能不能在屏幕上模擬出對焦五百米或其他距離後才能看清的圖像,從而讓眼睛在對焦上有運動,用這個原理開發個緩解近視的軟體之類的?

從另一個角度說,能不能在顯示器上顯示這樣的圖像,讓近視的人可以摘掉眼鏡也能看清原本清晰的圖像呢?


鴨哥 @grapeot 已經寫了一個很好的答案了,不過對背後的原理講得還不夠詳細,我這裡補充一下。

有幾個問題是有助於思考背後的原理的,也是原先鴨哥的答案裏沒有詳細解釋的,我先放到前面:

  1. 有比梯度下降來迭代求解更好的解法嗎?
  2. 為什麼會有 ringing 現象?為什麼要加 regularizer?為什麼這樣加?
  3. 為什麼特殊設計的小孔是那種樣子的?怎麼設計出來的?

正如鴨哥答案裏寫的,成像的過程可以近似成一個【原始圖像】與【點擴散函數】卷積的過程,比如我這麼表示一下:

原圖 ? 點擴散函數 = 新圖

如果這裡【原圖】是一張清晰的圖,點擴散函數是離焦彌散圓,那麼【新圖】就是一張虛焦的模糊不清的圖——這就是通常的虛焦成像的過程。

而這裡我們要做的事情,其實是反過來的,【原圖】暫時未知,但我們知道它經過這樣的卷積過程,得到了一張【清晰的新圖】,這個過程我們可以這麼來表示一下:

?? ? 點擴散函數 = 清晰的圖

我們要把上面這個 ?? 給求出來。

如果這是一個傳統的乘法,比如 ?? × 5 = 12,那麼我們只要做一個對應的「逆運算」——也就是做一下除法,就能算出 ?? 的值了:?? = 12 ÷ 5 = 2.4;當然我們可以用更高級的說法,叫「求取 5 的乘法逆元」,5 的乘法逆元是 1/5,於是又可以寫成:?? = 12 × 1/5 = 2.4

如果卷積也有逆運算,那麼我們只要求出「點擴散函數的卷積逆元」,那麼就可以求出 ?? 代表的原始圖像:

?? = 清晰的圖 ? 點擴散函數的卷積逆元

如果數學功底紮實一點就會知道,空域上的卷積等價於頻域上的乘法,於是上面這個運算過程,可以通過傅裏葉變換,轉換成乘除法操作。這個「點擴散函數的卷積逆元」,也無非就是在傅裏葉頻率域做一個除法操作了。

所以第一個問題的答案就很直接了:用傅裏葉變換就可以了,快好幾個數量級。


如果你真的試一試就會發現,不論是鴨哥原先的梯度下降迭代求解,還是通過傅裏葉變換來直接求解,最後都會有 ringing 現象。不僅有 ringing,甚至如果中間計算過程不多加小心,結果會變成一片隨機雜訊。

為什麼?

因為【直接算卷積的逆運算】這個過程,是不穩定的。

舉例來說,如果有一個計算過程,輸入數據由於雜訊的影響,波動了 0.1,輸出數據也波動了 0.1,那就是穩定的;如果輸出數據時而波動 0.1,時而波動 100,那就是不穩定的。【直接算卷積的逆運算】這個過程,就是不穩定的,會有機會極大放大雜訊。

為什麼會不穩定?

我以一維的信號為例來簡單說明一下問題,這是一個一維的卷積核,來模擬相機的離焦彌散圓:

一維的 Box 函數卷積核

對他做傅裏葉變換,得到頻域的結果(看看這個形狀,大概想得到為啥會有 ringing 了吧):

Box 卷積核的傅裏葉變換結果

注意圖中標明的兩個點,這兩個點的頻域響應是 0,我們在頻域做除法的時候(也就是求點擴散函數的卷積逆元的過程),除以 0 是沒有意義的,這意味著如果我們的圖像上(或者計算過程中)有微小的雜訊,做完除法之後就會被極度放大。

此外,一般情況下的點擴散函數,在頻率域的響應隨著頻率增加而迅速降低,在上面的圖中高頻的響應值都比較小,而且是越往高頻走越小。在做除法的時候,除以比較小的值,就會放大高頻分量微小誤差,反映在結果上,就是雜訊增加,而且越是高頻的雜訊放大倍率越大。

有沒有辦法可以避免呢?

這時候就體現出 regularization term 的作用了,對除法的結果做一些約束,使得結果不要變得太大,或者不要變化太劇烈,都是一些合理的思路。

舉例來說,我們還是以普通乘法來做類比,如果 a × 0.001 = 0.2,那麼 a 應該是 200;但由於計算或者測量的誤差,我們拿到的等號右邊的初始值不是 0.2,而是 0.3,那麼算出來 a 的值就變成 300,等號右邊 0.1 的變化,帶來對 a 值計算結果的 100 的變化。由於雜訊的存在,這個 0.2 本身就是不準確的,如果雜訊水平本身的波動就有 0.1,那麼左邊 a 的值就會在 100~300 之間波動,這樣算出來的 a 值是沒有太大意義的。

而如果我們對計算結果加以限制,一方面希望計算結果代入之後要盡量符合原始等式,另一方面也希望結果不要過分大,比如變成這麼一個優化問題:

[公式]

調整合適的 lambda 值,就可以使得 a 值變得不那麼大,計算的結果會更穩定可靠。

鴨哥答案裏用的圖像梯度作為 regularization term,就是一種比較自然的想法。但圖像梯度通常是對自然圖像而言的 prior,我們本題要求的其實本身就是一個【非自然】圖像,所以加梯度作為 regularization 並不算非常合理。

著名的維納濾波器其實就是這個思路。


對於普通的鏡頭,焦外彌散斑是一個圓盤狀,這種形狀作為卷積核的話,求取卷積逆元的時候就會遇到上面提到的問題,會極大放大高頻雜訊,使得結果幾乎不可用。只能加入 regularization term 加以限制。這也限制了效果的進一步提高。

有沒有提高的辦法呢?

從上面的分析我們可以看到,關鍵在於卷積核的頻域響應,要盡量避免出現「過零點」。常見的一些核函數,比如圓盤函數、高斯函數等,他們對應的頻域響應,都會出現過零點,或者出現響應值很小的點。這其實也是很顯然的,根據傅裏葉變換的對偶性,我們無法在時域/空域和頻域同時做到響應函數的緊支撐(compact support),在頻率域避免小值,意味著空間域響應範圍非常小,極限情況就變成單位衝擊響應——於是卷積就退化為什麼都不做。

雖然如此,我們還是可以盡量設計合適的卷積核,來減少頻域的過零點。一個很顯然的思路就是白雜訊。白雜訊的頻率響應是彌散的,可以避免過零點出現。

但是作為成像系統的光圈,不好做成滿足白雜訊值,最好是做成 0-1 值,1 的地方透光,0 的地方不透光。那麼退而求其次,可以用一些近似隨機的 0-1 序列來作為通光孔徑的形狀。

下面以一維函數進行展示說明。對不同類型的輸入核函數進行頻域響應分析,從上到下依次是,隨機白雜訊、方框函數、隨機 0-1 序列:

白雜訊

方框函數

隨機 0-1 序列

上面三種函數對應的頻域響應如下(注意縱坐標是對數尺度):

不同函數的頻域響應對照

可以很明顯看到,方框函數(黃色線)在高頻區域(圖像右側)的頻率響應很小,基本上比其他兩個的要小 10~100 倍(注意縱坐標是對數尺度),而其他兩種類型的頻率響應很類似,在各個頻段都保持較大的值,所以可以有效減輕「求卷積逆元」過程的不穩定性。

隨機 0-1 序列(就是上面綠色的曲線),如果 1 用白色表示,0 用黑色表示,畫出來就是一系列寬度不一的黑白條。如果用在二維上,就是一系列寬度不一的黑白格子。這也就是為什麼鴨哥答案最後的光孔形狀是那樣的一個黑白格了。


我覺得題主想要的是在半米的屏幕上射出光線,但是成的虛像在500米,這樣人眼對焦在500米就能看清畫面了。現在AR、VR就是這種效果,基本是屏幕加透鏡或者其它光學元件的方法。但是按照題目只有屏幕的話,那麼半米處的屏幕必須模擬來自500米處光源的光場,也就是每個像素在不同方向有對應的光線,這是普通屏幕的2D圖像做不到的。

如果能實現完美的光場顯示,那就不只是模擬某一個焦平面上的二維畫面了,而是可以模擬真實世界中三維物體,也就是同時顯示不同深度。Magic Leap曾經想用光纖掃描投影光場,但是好像一直無法做到實用的程度。

深度技術乾貨 Mars說光場(4)- 光場顯示?

vr.sina.com.cn圖標馬查理:Magic Leap,光纖掃描顯示的曙光??

zhuanlan.zhihu.com圖標

假設你的顯示系統是普通的顯示器,而不是涉及波前調控的那種全息顯示器,那麼很容易從幾何光學的角度論證你期望的功能是不能實現的。首先,假設人眼聚焦到無窮遠處,這時無窮遠處的一個物點會對應著視網膜上的一個像點。物象點之間進行光線追跡,你會發現,若1米遠處有一個屏幕,則光束與屏幕相交處為一個圓,這個圓的直徑大約與人眼瞳孔直徑相當,裡麪包含了多個像素。因為圓裏的多個像素髮出的光相互間是不相干的,因此無論你如何調控這些像素髮光,它們都不可能視網膜上形成一個理想的,接近衍射極限的像點光斑。所以,你設想中那種讓近視的人也能看清的顯示器是做不到的。除非你降低對圖像的要求,讓圖像原來就不包含高頻成分,讓它在一米看起來和在一百米看起來都像近視一樣模糊不清。


其實,說到底是一個「光場」的概念。既然題主說到半米和五百米這兩個距離,那我也順著說半米和五百米吧。半米前有一張紙,上面畫著一個美女,五百米外站著一個真實的美女。

下面咱們把半米外的紙拿掉,換成一個特殊的「門」,你是通過這道門看的五百米外的美女,那麼,原理很顯然,我把這門門關上,而讓這個門自己發出一大批光,讓這些光與五百米外射來的完全一致,你的眼睛根本就不會發現區別。

現在我們來研究門上的任何一點。發現,通過這一個點的光並不是隻有一束,五百米外的美女頭髮上的光、鼻子上的光、肚臍眼上的光、腿上的光……都是向著所有方向任意散射的,而且其中必然有通過這一個點的那一束。所以,就單獨研究門上的一個點,通過這個點的光就包含了來自美女頭髮的交、鼻子上光、肚臍眼的光、腿上的光。

現在把門關了不要緊,門自己製造的光也要達到這個效果。任何一個點都要發出好多不同方向、不同亮度、不同顏色的光。

這叫「光場」。

能完全模擬光場的門還沒有誕生,但是簡易版早就有了,那就是VR眼鏡。VR眼鏡只能戴在頭上用,就是因為它不能模擬這樣龐大的光場,只能模擬出射向你兩眼的光場。這意味著,所有的「光場」只是射向你眼睛的這一小部分,而不管其它方向了。

將來是不是發明題主說的這種顯示屏,我看也很難,現在的顯示器已經做到對不同角度顯示不同內容,但是不可能同時有這麼多不同的角度,或者說角度之間的差不可能這樣小。


一個思路,不一定對:

(我只有修過非物理專業的大學物理的水平)

首先,簡化問題,將物體拆分成若干點光源,然後考慮我們能不能模擬一個點光源

一個顯然的方法是模擬圍繞著這個點光源的一個波陣面上的每個點的光強,如果我沒記錯的話,根據疊加原理應該是能等效的

但這個方法需要一個360度的屏幕

而我們的屏幕是這個覆蓋整個空間的屏幕的一個部分,我們需要只照亮那個虛構的大屏幕的一部分,來取得和照亮整體時相同的效果

這變成了一個複雜的微分方程,從直覺上來看應該是無解的,但我不會算


推薦閱讀:
相關文章