幽星隨想

AI 莫內

這是在腦中醞釀了有好一段時間的想法,現在才寫下來。最初的靈感來自 Youtube 上的知名數學動畫頻道 3Blue1Brown 發布的一部關於傅立葉轉換的影片,將傅立葉轉換的公式大略理解成纏繞在圓周上的線性物質的質量中心。

那麼,如果不要使用質量,而是用顏色呢?最簡單的顏色概念就是用色相環:把色相環上面的角度對應到顏色,我們就可以用複數平面上角度 θ, 長度 1 的複數來表示顏色。3Blue1Brown 的影片中提到,這樣的複數可以看成旋轉 θ 角,因此也可以寫成 eiθ


想像一下一位印象派畫家在繪製一幅風景畫的過程。印象派的一個作畫特徵是,他們會模仿真實的光影色調變化來上色,也因此經常會採用寫生的方式作畫。在一位印象派畫家進行寫生的過程當中,他的上色方式可能有點類似這樣:

  1. 在某個時刻 t0 他會把畫布的一部分塗上一些特定的顏色。
  2. 下個時刻 t1>t0,他把畫布的另一部分塗上另外一些特定的顏色。這裡著色的範圍可能和步驟 1. 重疊。
  3. 又下一個時刻 t2>t1,他把畫布的另一部分塗上另外一些特定的顏色。這裡著色的範圍可能和步驟 1. 或 2. 重疊。
  4. 以此類推,每次塗色的範圍都可能和前面所有步驟中塗過的部份重疊,直到有限步驟後完成作品。

作品完成之時,畫布上每處都應該被塗色至少一次。以下分成時間空間兩邊討論:

顏色的時間週期

如果我們考慮畫布上的某一個極小的區塊,在這個作畫過程中的每一步驟,這個區塊要嘛沒有被塗上任何顏色,要嘛整個區塊都被塗上同一個顏色。另一方面,在不同的時間,自然光的色調可能有所不同,但是物體原本的顏色不變。所以自然光的變化應該會讓畫面各處的顏色都變化約略相同的量,就像是把每一處的顏色換成色相環上轉動某個相同角度的對應色。

自然環境的光有週期性,不妨假設週期是 T。由於傅立葉轉換關注的是頻率,我們取他的倒數 ξ=1T。於是在時間 t 光造成的顏色變化就相當於色相環上轉了 ξt 圈,此處取成順時針旋轉來符合傅立葉轉換的慣例。也就是說,如果物體在這個區塊本身的顏色是 f(t)=c=eiθ,此時 f 不隨時間而變,畫家看到的顏色就是 f(t)e2πiξt

畫家在看到某時刻區塊的顏色和實際在畫布的對應位置上色必然有時間差,這個時間差包括反應時間誤差與作畫順序造成的延遲上色。然而,假設畫家的辨色能力和記憶力都是完美的,他塗上的顏色一定是前面某一個時刻 t 該區塊的顏色 f(t)e2πiξt。如果畫家是人類,他的辨色能力和記憶力可能都會有一定誤差。此時我們可以當作是他看錯或記錯了物體的本色 f(t),並以 g(t)=f(t)δ(t) 表示他記得的本色,δ(t) 表示誤差因子。因為每次他觀察同樣的微小區塊,誤差可能都會不大一樣,所以 g(t) 就不再是時間的常數函數,而會隨著時間不同有所不同。

在畫作完成時,這個微小區塊的顏色就會是每一步驟中塗的顏色 g(ti)e2πiξti 的總和。假設畫布上色彩的疊加是直接相加,那麼這個區塊的顏色就會是

j=0N1g(ti)e2πiξti

上面的式子正好就是色覺序列 {gi=g(ti)}0N1非均勻離散傅立葉轉換ξ 的取值。用維基百科的符號就是 fk=ξ,pi=ti,xi=g(ti)

亮度

自然光在不同時間除了顏色不同,強度也會有變化。這造成同樣的位置,物體的亮度會有變化。我們可以把色相環往內填滿,變成一個彩色的圓盤。這個色相盤以圓心為最暗的黑色 (亮度 0),用跟圓心的距離來表示亮度,越外圈亮度越亮。

這時一個顏色加上亮度就可以用一個複數 z 表示。利用極座標表示法,可以把原本的顏色 eiθ 當作角度,把亮度當作 z 的長度 |z|。以色相盤中心為複數平面原點的話,|z| 就是跟圓心的距離,它是一個正實數。另外我們可以設定色相盤的半徑為 1,這樣 z 就能寫成 reiθ,其中 |z|=r1

把亮度當成一個時間的函數 b(t) 的話,時刻 t 時物體在這個區塊原本的顏色加上亮度就可以寫成 f(t)=b(t)eiθ

假設對亮度的感知誤差用 ε(t) 表示, 畫家在時間 t 看到的顏色加亮度就是

g(t)=b(t)ε(t)eiθδ(t)

最後畫布上對應區塊的顏色與亮度仍然是 j=0N1g(ti)e2πiξti

AI 圖像生成

在 2026 年的現在,我們可以拿 AI 生圖來模擬這個過程。AI 生圖吃的是資料,所以我們可以直接先錄好一段真實影片餵給 AI。當然,如果你想要想像成用具備模擬人類視覺的 AI 機器人「寫生」也不影響以下的敘述。

我們假定 AI 生圖的過程跟前面的印象派畫家基本類似,只是會有以下差異:

考慮一個像素,仿照畫家的例子可以得到,在時間 ti, AI 把第 i 個圖層的這個像素填上了顏色 g(tj)e2πiξtj=g(jN)e2πiξj/N。如此,這個像素在生成結束時的顏色就是

j=0N1g(jN)e2πiξj/N

也就是 {hi=g(iN)}0N1 的離散傅立葉轉換 g^kk=1 時的值。

所以說,如果要跟繪師解釋什麼是(離散)傅立葉轉換,好像可以把它說成某種 AI 莫內 (???


其實我原本是先考慮連續也就是傳統的那種傅立葉轉換的,但是後來發現好像沒有很好說明,所以這裡都是離散的版本。當然,純數學理論上或許可以把取樣 ti 放得無限密,讓總和變成定積分,就會是連續版本的傅立葉轉換。但是我感覺這太牽強了,這樣就算有 AI 做的出來,任何景象畫出來都會變全黑。如果每個時刻 t 都要畫一層,任何非零的時間間距中都會畫到不可數無限層。基本上要不是幾乎每次都沒畫到的區域,否則疊色夠多層之後就會變得烏黑一片。但是真實景象也不可能有一個區塊從早到晚一年四季都是純白色啊,那也太詭異了。