原理分析與系統設計
由於在一般的 RGB 顏色空間的影像中, RGB 彼此會有關連性,例如在大部份的像素中,若藍色值偏大,紅色值和綠色值也會偏大。如果要使用 RGB 顏色空間來修改顏色,必然會影響到其他維度的顏色,如此一來顏色轉換會變得相當複雜。
在 Color Transfer Between Images[6] 這篇論文中, Ruderman 等人發現了一個顏色空間,稱為 L αβ ,可以讓色彩間彼此的關聯性降低。在 L αβ 空間中, L 代表明亮度 (Luminance) , α 是從紅色(正值)到綠色(負值),而 β 代表黃(正值)到藍(負值),見圖 2 。在之後的彩色化方法中,有很多學者都採用此顏色空間來進行轉換,大大地開啟彩色化之路。
為了達成要對整部影片上色的目的,我們需要一些彩色的資訊,就算只有其中一張 frame 是彩色的也可以,但彩色不可能自己憑空生出來,要如何決定這些顏色呢 ? 為了解決這個問題, Levin 等人提出的『最佳法上色』給了我們一個很好的方向。他提出一個簡單的方式,可以讓使用者自己在圖片上描繪出想要的顏色, 如圖 2-2 (a) ,則此演算法將自動著色,如圖 2-2 (b) 。
當系統記錄了使用者的筆跡後,要在多少的畫面圖上這個顏色,就成為需要計算的重點,因此開始進行邊緣偵測,看這個顏色所要上色的範圍是多少,將圖片切割成數個區塊,並對各個區塊上色,在上色過程中則依照灰階圖片中的 luminance 值,給予深淺與陰影的效果。
讀取 L 值 : 一開始需要對灰階圖片進行分析,取得灰階圖片的 luminance ,以便在做邊緣偵測及上色時有一個依據。 為了得到較好的效果與之後進行『類比法上色』一致,我們選擇 L αβ的色彩空間,可以降低各個顏色間的關連性, L 代表的是明亮度, α 是紅色 ( 正值 ) 到綠色 ( 負值 ) 的值,而 β 代表黃 ( 正值 ) 到藍 ( 負值 ) 。這個顏色空間也常被應用在很多彩色化的方法中。
儲存輸入筆跡 : 儲存使用者畫上的顏色筆跡,等待邊緣偵測的結果。
邊緣偵測 : 同樣利用 L 值, 將兩個像素之間的距離定義為灰階差的絕對值,一個像素周圍的其他像素都視為他的鄰近節點,再用 Dijkstra 演算法去找他最小距離,也就是灰階差異最小的節點。如此一來便可以找出我們要找的那一點與哪些點屬於同一個區塊。
依 L 值上色 : 當邊緣偵測完成,系統就依照邊緣偵測的結果、儲存的筆跡顏色開始上色,同時還要參照 L 值,讓同色的區塊能夠更真實的呈現出陰影及漸層。
類比法的作用在於相鄰的兩張 frame 藉由比較找出各 pixel 移動後的位置,然後對第二張灰階 frame 做顏色的替換,把第一張已著好色 frame 的資料寫入灰階 frame ,達成自動的灰階影像彩色化。並再對下一張 frame 做相同的運算,最終做完全部的 frame 之後輸出彩色的影片。
而在 Zhigeng Pan 等人的 “A New Algorithm for Adding Color to Video or Animation Clips”[7] 這篇論文裡面提到,類比法要如何找出連續的 frame 其相同的 pixel 在移動後的位置在哪裡呢?我們可以用「亮度」來做判斷。
取出兩張灰階連續的 frame ,第一張手動用前面所說的最佳法來做上色,上完色之後我們現在有彩色的 frame1 以及灰階的 frame2 ,要對 frame2 上的一點做上色,我們取出這一點的位置以及亮度值 L 對 frame1 的此位置做九宮格搜尋法,找出九格裡各點的亮度,與 L 相減後差異最小的點代表亮度幾乎相同,即視這點和 frame2 此位置顏色相同,最後對 frame2 著上此顏色。
影像擷取 :先將我們想要手動上色的 frame 讀取出來。
RGB 轉 L αβ :要如何找到移動後的 pixel 在哪裡呢?我們採用的方法是比較兩 pixel 的亮度 (luminance) ,如兩 pixel 的兩度相差在一個範圍以內,我們將其視為同一種顏色。所以我們必須先對擷取出的 frame 做 RGB 轉 L αβ 的動作,為的是取出我們需要的 L 也就是亮度。
存取 pixel 值 :接著將各 pixel 的 L αβ 值分別存在三個矩陣裡,也就是一張 frame 有三個矩陣來表示他的顏色,存成三個矩陣是為了容易計算,因為我們主要是比較 L 的值,使用 L 來做比較之後,找出移動過後的位置,再回頭將此點的全部資料 L αβ 提出上色。
九宮格搜尋法 :九宮格搜尋法即是對一 pixel 本身以及周圍 8 個點做搜尋,在灰階 frame 找一點並且獲得其亮度值後,對彩色 frame 上的此點以及周圍各點做亮度的搜尋,計算各點的亮度差值並和灰階 frame 此點的亮度做相減,相差最小的 pixel 表示其亮度相差最小,我們就將他視為相同顏色。
0
(x-1,y-1)
1
(x-1,y)
2
(x-1,y+1)
3
(x,y-1)
4
(x,y)
5
(x,y+1)
6
(x+1,y-1)
7
(x+1,y)
8
(x+1,y+1)
顏色代換 :找出亮度相差最小的點之後最後就是將彩色 frame 此 pixel 的 L αβ 資料存入灰階 frame ,此 pixel 就算是著色完畢,對每一個 pixel 做以上的運算,我們就可以用對照的方式將第二張灰階的影像上色完成。 度做相減,相差最小的 pixel 表示其亮度相差最小,我們就將他視為相同顏色。
「最佳法上色」、「類比法」本來是兩個獨立的原理,有許多的論文都已經針對這兩種內容做了很完整的討論,但是都只是分別的呈現。所以,我們的專題做的是將這兩種方法做了一個完整的結合,最佳法上色著重於單張 frame 的運算,類比法則是將灰階的 frame 和彩色的 frame 做比較來「自動」上色,兩種方法組合起來就是我們做出來的灰階影片上色。
另外,雖然單張最佳法上色的運算時間較長,但是只要著色一張之後就可以自動的用類比法上色,而類比法的運算速度相對起來快了許多,在運算時間上面可增進的部分不多,因此我們著墨於品質上面的要求。
在品質方面,類比法經過測試發現品質近乎完美,只要第一張彩色的 frame 著色效果良好,類比出來的結果也會相同,因此最佳法上色的成果是重點,如果最佳法上色不夠精細那麼類比法過後就會出現品質的問題,反之只要上色上的夠精細則結果會很成功。