灰度圖像彩色化這個課題,一直以來都有不少相關人員在研究,也算是個熱門話題,能否把一張灰度圖按照我們的意愿,準確的彩色化,成為成敗的關鍵。最近一直在研究這個灰度圖像彩色化算法,看了不少論文,做了不少實驗,于是,在這里做個總結跟大家分享一下,希望能跟對于這個算法有興趣高手們能共同討論一下,也算是拋磚引玉吧!
目前灰度圖像彩色化的算法主要有以下幾種:
1,基于優化擴展的彩色化算法
2,基于最短距離和色度混合的彩色化算法
3,基于顏色轉移的彩色化算法
相關參考文獻舉例如下:
1,Colorization using Optimization ?這篇是最經典的論文
2,Fast Digital Image Colorization Technique
? ? ? ?Fast Colorization Using Edge and Gradient Constrains
? ? ? ?Natural Image Colorization
3,Transferring Color to Grayscale Image
? ? ? ?Example-based Multiple Local Color Transfer by Strokes
? ? ? ?Affective Image ?Colorization
? ? ? ?Color Transfer Based on Normalized Cumulative Hue Histograms
? ? ? ?Color Transfer in Correlated Color Space
? ? ? ?Colorization by Example
? ? ? ?Color Transfer between Images
以上文獻均為舉例,有興趣的可以自行搜索。
現在說一下以上三種方法的優缺點:
? ? 對于基于優化擴展的彩色化算法,這種算法主要是基于一種圖像分割算法,設立優化條件,尋求最優的圖像分割,然后進行著色;這個算法是半自動的算法,所謂半自動算法就是說需要我們人為的在一副灰度圖像上畫出自己想要添加的顏色線條,根據我們確定的這個顏色線條,結合分割算法,進行著色。這個算法相對于最短距離彩色化算法要準確,但是時間復雜度太高,過于耗時,不適合大規模彩色化。
? ? 效果圖舉例:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Fig.1
? ? 對于基于距離和色度混合的彩色化算法,這種算法最大的優點是速度快,屬于快速算法,缺點是單純考慮了距離的影響,忽略了顏色聚類的影響,也屬于半自動算法,其主要思想是:用戶設定顏色線條,然后根據某種距離公式計算每一個像素到顏色線條的距離,則距離最近的線條顏色即為該像素的顏色。
? ? 效果圖舉例:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Fig.2
? ? 對于基于顏色轉移的彩色化算法,這種算法最大的優點是:自動化,不需要人為干涉,只需要你提供一張與目標灰度圖像內容相近的彩色圖像,主要思想是:研究某種顏色匹配算法,將彩色圖像中的顏色信息匹配到目標灰度圖像中,從而完成灰度圖的彩色化。這種算法的缺點是:1,在彩色圖像中不一定可以找到灰度圖中完美匹配的點,因此,對于這些點,效果較差;2,不能按照我們需要的顏色進行彩色化;
? ? 效果圖舉例:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Fig.3
本文結合以上三種算法的優缺點,介紹本人認為的最簡單的最適用的第二種算法:基于最短距離和顏色混合的灰度圖像彩色化距離
這個算法過程如下:
1,尋找最短距離算法,圖像中的距離算法有很多,比如:歐式距離,Dijkstra距離等,這里我們使用歐式距離,公式如下:

2,對于灰度圖A,人為的設定顏色區域S[i],其中i表示顏色線條的個數,每一個顏色線條,我們使用集合S[i]表示,如圖Fig.1中左邊灰度圖所示,有人為添加的許多顏色線條;
3,對于圖像A,包含兩個集合,一個是沒有著色的像素點集合M,一個是被顏色線條覆蓋的像素點集合N,對于N中的每個像素,實際上對應的顏色就是顏色線條的顏色,對于M中的每一個像素點,由于是灰度圖像,因此,它只有灰度信息,也就是亮度信息Y(這里我們使用YCbCr顏色空間),我們需要做的就是確定這個像素對應的Cb,Cr色度值。
? ? 首先,我們計算M中的每一個像素P(x,y)到每一個顏色線條S[i]的距離,記為D[i],那么,我們尋找D[i]的最小值,也就是到P距離最短的顏色線條,那么P的顏色就是具有最短距離D[i]的顏色i,這樣就可以求出對應的Cb,Cr值了。
? ? 其次,這樣的算法有可能得到的圖像邊緣過度不自然,因此,采取了一種顏色混合的算法,我們把P點的顏色看作是不同顏色線條i距離D[i]的加權,公式如下:

其中d表示歐式距離,c表示色度Cb,Cr,chrominance表示相應的結果色度,W表示一種加權公式
對于W,公式如下:

其中,
b一般取4,范圍為(0,6]
這樣整個彩色化過程就完成了,放上我自己的效果圖:




我的效果圖是針對以上算法進行了改進之后得到的,有興趣的圖像處理愛好者們可以研究一下,期待跟大俠們交流!我的QQ1358009172,博客http://dongtingyueh.blog.163.com/
??最后,分享一個專業的圖像處理網站(微像素),里面有很多源代碼下載:
[http://www.zealpixel.com/portal.php](http://http//www.zealpixel.com/portal.php)