原理分析與系統設計

原理分析

(一)轉換色彩空間

由於在一般的 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 著色效果良好,類比出來的結果也會相同,因此最佳法上色的成果是重點,如果最佳法上色不夠精細那麼類比法過後就會出現品質的問題,反之只要上色上的夠精細則結果會很成功。