操與避坑指南)
有段時(shí)間我翻家里的舊相冊看到幾張上世紀(jì)的老照片長輩們還很年輕但畫面里全是灰蒙蒙的——衣服灰、天灰、連臉上的笑容都像隔著霧氣。當(dāng)時(shí)就動(dòng)了“給照片上色”的念頭。一查才發(fā)現(xiàn)黑白照片上色這個(gè)事遠(yuǎn)不是拿畫筆涂幾筆那么簡單照片在拍攝那刻就已經(jīng)把顏色信息丟得一干二凈只剩亮度我們要做的是憑借各種線索把顏色“猜”回來。這個(gè)“猜”的過程純手工操作一張照片要幾個(gè)小時(shí)用成熟的上色模型幾分鐘就能出一版能看的草稿。今天這篇就從原理講到實(shí)操把我自己踩過的坑和摸索出來的流程完整寫出來適合手頭攢了一批老照片想復(fù)原的朋友也適合剛接觸圖像處理、想找個(gè)具體項(xiàng)目練手的人。1. 上色前先搞清楚黑白照片上色到底在解決什么問題1.1 灰度圖里沒有顏色上色本質(zhì)是“猜”先想一個(gè)問題一張黑白照片它的每個(gè)像素只記錄了一個(gè)數(shù)值也就是亮度。顏色信息由色調(diào)和飽和度組成這兩個(gè)維度在拍攝瞬間就徹底丟失了靠任何算法都找不回來。所以所有上色方案的本質(zhì)都是“條件概率推斷”——在給定灰度圖案的情況下推斷最可能的顏色分布。我舉個(gè)例子你就明白了豆腐和饅頭在灰度圖里可以一模一樣都是白花花一片天空和石灰墻也可能落在同一個(gè)亮度區(qū)間。算法看到的是一堆深淺不一的灰色塊它要做的是結(jié)合上下文判斷“這個(gè)灰塊大概率是天空天空該是藍(lán)色”“這片區(qū)域有五官輪廓這是皮膚皮膚該是偏暖色調(diào)的”。你意識(shí)到這一點(diǎn)之后就會(huì)理解為什么任何上色工具都可能出錯(cuò)——它不是“恢復(fù)顏色”而是在“猜顏色”只是猜得準(zhǔn)不準(zhǔn)的差別。工程上這個(gè)“猜”的過程一般放在Lab色彩空間里做。L通道是灰度也就是我們手上有的信息a通道和b通道記錄顏色。模型的套路很簡單輸入L通道預(yù)測a和b通道再把三個(gè)通道拼回去得到彩色圖。聽起來不難但同一個(gè)灰度值可以對(duì)應(yīng)無數(shù)種顏色模型必須依賴上下文線索才能鎖定一個(gè)合理答案這就是難點(diǎn)所在。1.2 為什么說上色是“圖像分割 語義理解 參考遷移”早年的上色模型結(jié)構(gòu)很簡單就一個(gè)自編碼器把灰度圖壓縮再還原同時(shí)預(yù)測ab通道。但這樣出來的效果是顏色發(fā)糊邊緣滲色嚴(yán)重天空和建筑物交界處經(jīng)常糊成一團(tuán)。后來業(yè)界逐步把這個(gè)問題拆成了三個(gè)層次來做第一層是圖像分割。先把圖片劃分成“天空、地面、人臉、衣服、頭發(fā)”等區(qū)域讓模型在每個(gè)區(qū)域內(nèi)部單獨(dú)做色彩推斷避免跨區(qū)域的顏色干擾。第二層是語義理解。模型要認(rèn)出“這是一片樹葉”“這是水面反光”“這是人臉”因?yàn)椴煌悇e的物體有不同的顏色先驗(yàn)。樹葉大概率是綠色系水面會(huì)根據(jù)環(huán)境色變化人臉膚色雖然五花八門但也集中在某個(gè)色域范圍。語義理解越準(zhǔn)顏色越靠譜。第三層是參考遷移。如果用戶額外提供一張彩色照片作為參考算法會(huì)把參考圖的色調(diào)風(fēng)格遷移到對(duì)應(yīng)區(qū)域上。比如你把一張暖調(diào)老照片的色彩風(fēng)格遷到另一張圖上整體氛圍就能保持統(tǒng)一。這其實(shí)和人手動(dòng)上色的思路一模一樣先判斷這是什么物體再?zèng)Q定涂什么顏色。先判斷哪一步、后判斷哪一步?jīng)Q定了最終效果的上限。你自己上手試兩次就會(huì)明白越是能準(zhǔn)確說出一張圖里“有什么”最后的顏色就越自然。1.3 全自動(dòng)管線 vs 人工介入兩條路線怎么取舍市面上所有上色方案本質(zhì)都落在“全自動(dòng)”和“人工介入”兩個(gè)極端之間。全自動(dòng)把判斷全交給模型速度快但對(duì)于顏色本身就不確定的老照片容易出現(xiàn)離譜的“幻覺”——比如把深色軍裝染成白色把國旗涂成紫色。人工介入的方案雖然費(fèi)時(shí)但能把“猜”變成“確認(rèn)”你告訴模型“這里是人臉膚色偏深黃”它按你的提示精修。以我個(gè)人的習(xí)慣一直是兩條腿走路先用全自動(dòng)模型跑一版初稿快速看到整體效果再用分區(qū)指定顏色或者手工畫筆做局部修正。純自動(dòng)適合批量瀏覽、篩選哪些照片值得細(xì)修人工介入適合最終輸出、展覽級(jí)修復(fù)。明白自己手上的照片屬于哪種需求再選路線能少走很多彎路。2. 工具選型三套主流上色方案怎么挑2.1 目前社區(qū)用得最多的DeOldify效果自然適合一鍵出圖DeOldify是一套基于生成對(duì)抗網(wǎng)絡(luò)的開源圖像復(fù)原模型社區(qū)使用量非常大。它最突出的特點(diǎn)是色彩過渡柔和膚色、天空、樹葉這些大面積區(qū)域很少出現(xiàn)條紋偽影而且模型自帶老照片修復(fù)能力能順帶處理一部分劃痕和噪點(diǎn)。為什么它的顏色比老模型自然關(guān)鍵在對(duì)抗訓(xùn)練。生成器在嘗試上色的同時(shí)有一個(gè)判別器在挑毛病顏色敷衍、邊界模糊、色塊斑駁都會(huì)被視為“不合格”。生成器為了騙過判別器就必須把顏色落在正確區(qū)域、讓邊界銳利起來。這種對(duì)抗壓力逼出來的結(jié)果觀感自然比單純自編碼器好一個(gè)檔次。實(shí)際使用中DeOldify對(duì)人物肖像的膚色還原相當(dāng)穩(wěn)定建筑、風(fēng)景這類大色塊區(qū)域也沒有明顯翻車。缺點(diǎn)有兩個(gè)一是對(duì)“稀有物體”容易產(chǎn)生顏色幻覺比如特定年代的軍裝、特殊徽章它會(huì)按常見物體的顏色先驗(yàn)去填二是對(duì)顯卡有要求建議6G以上顯存純CPU跑一張照片要幾分鐘甚至十幾分鐘批量處理會(huì)很痛苦。2.2 經(jīng)典開源方案可控性強(qiáng)適合指定配色除了DeOldify還有個(gè)經(jīng)典選擇是某高校實(shí)驗(yàn)室早年發(fā)布的彩色化模型。這個(gè)方案的優(yōu)勢只有兩個(gè)字可控。它支持在圖片上手動(dòng)框選區(qū)域然后指定顏色。比如你選中“天空”區(qū)域告訴它填藍(lán)色選中“草地”告訴它填綠色。這相當(dāng)于把模型從“全圖盲猜”降級(jí)成“分區(qū)確認(rèn)”思路和我們前面講的人工介入邏輯完全一致。我實(shí)際測試下來這個(gè)模型的穩(wěn)定性很好同一張圖跑多次結(jié)果基本一致不會(huì)出現(xiàn)DeOldify那種“這次偏暖、下次偏冷”的波動(dòng)。缺點(diǎn)是色彩飽和度偏低出來的圖有點(diǎn)“灰蒙蒙”的需要導(dǎo)入照片編輯軟件再拉一下飽和度和對(duì)比度。如果你的照片里有明顯的語義區(qū)域大塊天空、大片水面、整面墻壁用這個(gè)方案會(huì)非常順手。2.3 照片編輯軟件手工上色靈活度最高但門檻也高如果你追求完全可控老式的手工上色并沒有過時(shí)。操作流程大概這樣打開照片編輯軟件在灰度圖上新建圖層把混合模式改成“顏色”或“疊加”然后用畫筆按區(qū)域涂抹顏色配合低流量、低不透明度反復(fù)疊加用蒙版控制顏色的作用范圍。這個(gè)方法一張照片動(dòng)輒兩三個(gè)小時(shí)但結(jié)果完全由你掌控而且配合“參考色板”可以做到非常貼近真實(shí)。說實(shí)話我平時(shí)給家里人修復(fù)照片最終版本基本都是手工精修過的——模型初版再自然放大后也總有一種“一眼AI”的塑料感尤其是人臉和手部。手工上色的本質(zhì)是“用時(shí)間換確定性”適合理科基礎(chǔ)薄弱但審美在線、愿意慢慢打磨的同學(xué)。我整理了一張方案對(duì)比表方便你快速對(duì)號(hào)入座方案上手難度單張耗時(shí)色彩自然度可控性適合場景DeOldify低分鐘級(jí)高中批量預(yù)覽、快速出圖經(jīng)典開源方案中分鐘級(jí)中較高需要指定區(qū)域配色手工上色高小時(shí)級(jí)取決于操作者極高精細(xì)修復(fù)、展覽級(jí)輸出3. 實(shí)操過程單張老照片從上色到出圖的完整流程3.1 預(yù)處理先把照片從“臟亂差”里救出來上色不是第一步修復(fù)才是。老照片的常見問題有劃痕、污漬、折痕、褪色導(dǎo)致的對(duì)比度不足、掃描噪聲。我每次的固定順序是這樣的第一步掃描分辨率建議不低于600dpi太低的話后期放大全是馬賽克上色模型也更容易出錯(cuò)。第二步裁剪把白邊和無關(guān)信息去掉避免干擾模型判斷。第三步去噪和修劃痕這里千萬注意順序——先修劃痕再去噪因?yàn)槿ピ胨惴〞?huì)把劃痕邊緣處理得更臟反而不利于后續(xù)修復(fù)。第四步調(diào)整灰度圖對(duì)比度讓主體輪廓清晰起來這一步能直接提升模型的分割準(zhǔn)確率。如果遇到嚴(yán)重折痕用內(nèi)容感知填充或仿制圖章手工補(bǔ)一下。預(yù)處理的意義被很多人低估了。上色模型是拿灰度圖做語義分類的圖越干凈判斷越準(zhǔn)。你喂進(jìn)去一張滿是噪點(diǎn)的圖模型會(huì)把噪點(diǎn)誤判成紋理然后把這些噪聲區(qū)域染得五顏六色最后你還以為是模型出了問題其實(shí)是前一步偷了懶。3.2 基于DeOldify跑全自動(dòng)上色DeOldify的上手方式大體有兩種用官方開源的筆記本環(huán)境在云端跑或者用社區(qū)封裝的桌面工具直接運(yùn)行。云端跑的好處是內(nèi)存分配和依賴安裝都不用操心缺點(diǎn)是要來回傳圖桌面工具雙擊即用但版本可能滯后。兩種方式我實(shí)測下來都很穩(wěn)選哪種看你自己的網(wǎng)絡(luò)條件和習(xí)慣。真正需要?jiǎng)邮终{(diào)的參數(shù)主要是render_factor。這個(gè)值控制渲染時(shí)的采樣尺度數(shù)值越小采樣越精細(xì)色彩過渡越細(xì)膩但耗時(shí)成倍上升。默認(rèn)16就能出不錯(cuò)的效果。如果覺得顏色偏淡可以調(diào)到20或者22反之如果顏色濃到有“油膩感”就降到12到14。跑完初版先別急著導(dǎo)出要放大到100%看細(xì)節(jié)重點(diǎn)盯人臉、眼睛、嘴唇膚色模型經(jīng)常在這幾個(gè)位置翻車。有個(gè)小細(xì)節(jié)值得留意DeOldify默認(rèn)輸出的色彩空間可能不是sRGB直接拿到瀏覽器或手機(jī)上看會(huì)偏色。我習(xí)慣在導(dǎo)出設(shè)置里確認(rèn)色彩空間轉(zhuǎn)成sRGB再保存避免“自己看挺好發(fā)給別人顏色不對(duì)”的尷尬。3.3 局部精修用分割和參考色修膚色模型跑出來的初稿人臉往往是重災(zāi)區(qū)——膚色偏橘、眼睛變色、嘴巴邊緣發(fā)虛。這種情況下用帶交互分割的上色工具做局部精修是最有效的。操作流程大致分四步第一步用分割功能把照片自動(dòng)切成人臉、衣服、背景等區(qū)域。第二步單獨(dú)選中“人臉”區(qū)域給它指定一個(gè)參考膚色。我一般以RGB230, 180, 160這個(gè)偏自然黃種人膚色作為起點(diǎn)再根據(jù)照片拍攝年代做微調(diào)。第三步處理衣服和背景用參考圖或手動(dòng)調(diào)色板指定顏色。第四步觀察區(qū)域邊界如果顏色滲出到相鄰區(qū)域用畫筆在蒙版上修掉。這一步的原理就是把我前面說的“全圖盲猜”變成“分區(qū)確認(rèn)”。模型在每個(gè)區(qū)域內(nèi)只處理色相變化難度大大降低邊界也不容易滲色。你可以把它理解成輔導(dǎo)孩子做作業(yè)直接扔一整張卷子他容易蒙你幫他圈出每道題的類型他答對(duì)的概率就高得多。3.4 質(zhì)量檢測與導(dǎo)出別在最后一步翻車上色完成后不要直接存jpg了事。我的固定流程是先展開圖層檢查有沒有顏色溢出到相鄰區(qū)域再用自然膚色色板對(duì)比一下人臉的色值偏色嚴(yán)重的就拉回來然后檢查有沒有模型幻覺導(dǎo)致的詭異色塊比如紫色的舌頭、藍(lán)色的牙齒這些在黑白老照片里尤其常見因?yàn)槟P蜕僖娏搜例X和舌頭的彩色樣本。最后導(dǎo)出時(shí)如果后期還要繼續(xù)修建議導(dǎo)出PNG或TIFF無損格式如果只是分享到社交平臺(tái)jpg質(zhì)量設(shè)90以上就夠png體積太大反而沒必要。導(dǎo)出前記得把色彩空間轉(zhuǎn)成sRGB這一步很多人忽略結(jié)果在手機(jī)、電腦、朋友圈三個(gè)地方看到三個(gè)顏色。4. 上色實(shí)操經(jīng)驗(yàn)與踩坑記錄這些坑我替你踩過了4.1 人臉膚色最容易翻車的區(qū)域人臉是上色任務(wù)里翻車概率最高的區(qū)域沒有之一。我踩過的坑可以列出一串。最常見的是模型把蒼白膚色染成橘紅色原因是模型在低分辨率下把人臉誤判成了強(qiáng)光下的“柿子色”解決方法是分區(qū)上色重新指定膚色或者把render_factor調(diào)低重新渲染。第二常見的是眼睛被染成藍(lán)色或綠色像西方人的瞳色——但老照片里的亞洲面孔眼睛默認(rèn)應(yīng)該是深棕或黑色遇到染藍(lán)的直接用畫筆在“顏色”模式下覆蓋即可。第三類坑比較隱蔽就是膚色過亮。很多模型默認(rèn)人臉是高光的出來的膚色白得發(fā)飄像一個(gè)瓷娃娃。我遇到這種情況一般把膚色參考調(diào)暗一檔RGB約200, 150, 130看上去反而自然。記住一個(gè)規(guī)律老照片的膠卷對(duì)膚色表達(dá)偏黃偏暖模型輸出往往偏粉偏亮手動(dòng)向“黃暗”方向修正基本不會(huì)錯(cuò)。4.2 天空、水面、植物的“顏色污染”大色塊物體之間的邊界是第二高發(fā)翻車區(qū)。天空和植物之間如果有銳利邊界顏色很容易互相“滲”。水面最麻煩因?yàn)樗瓷涞氖黔h(huán)境色模型經(jīng)常把它染成純藍(lán)色但實(shí)際老照片里的水面可能是灰綠色也可能是偏黃的濁色完全取決于拍攝環(huán)境。我處理水面的固定套路是選中水面區(qū)域、填充中性灰、再疊加一層冷色調(diào)。這樣既保留了水面該有的反射感又不會(huì)像模型那樣一口咬定“水面藍(lán)色”。植物的綠色偏青還是偏黃跟膠卷型號(hào)、保存條件、褪色程度都有關(guān)系我一般參考同一卷膠卷里其他彩色照片的色調(diào)來定而不是上來就涂一片濃綠。4.3 噪點(diǎn)帶來的顏色閃爍老照片掃描后往往有大量顆粒噪點(diǎn)上色模型會(huì)把這種顆粒放大導(dǎo)致上色后整個(gè)畫面像撒了一層彩色雪花。這種情況的處理手段分兩步上色前先做一次適度降噪但別降太狠否則文字、紐扣、頭發(fā)絲等細(xì)節(jié)會(huì)糊掉上色后如果還有噪點(diǎn)用降噪類功能針對(duì)“顏色噪點(diǎn)”通道單獨(dú)處理不動(dòng)亮度通道。這樣一來細(xì)節(jié)還在顏色也干凈了相當(dāng)于把噪點(diǎn)里的顏色信息抽離而不是整個(gè)磨皮。4.4 批量照片的時(shí)間成本控制如果手里不是一張老照片而是一整本相冊每張都精修不現(xiàn)實(shí)。我自己是按三批處理的。第一批預(yù)覽級(jí)全自動(dòng)模型跑一遍快速篩出哪些照片值得細(xì)修第二批精修級(jí)對(duì)值得修復(fù)的照片逐張做預(yù)處理、上色、手工修正第三批歸檔級(jí)統(tǒng)一調(diào)整色調(diào)、導(dǎo)出、備份。時(shí)間成本大概是純自動(dòng)每張3到5分鐘含預(yù)處理精修級(jí)每張20分鐘到1小時(shí)不等取決于照片“病情”嚴(yán)重程度。批量場景下先出預(yù)覽稿再?zèng)Q定投入時(shí)間這個(gè)順序不要反過來。5. 常見問題速查表癥狀可能原因解決方案顏色邊緣虛化、滲色渲染分辨率過低調(diào)低render_factor重新渲染人臉偏橘或偏青模型膚色判斷失誤分區(qū)指定膚色或手動(dòng)畫筆覆蓋天空出現(xiàn)條紋壓縮偽影被放大預(yù)處理階段先修劃痕再上色輸出顏色發(fā)灰色彩空間轉(zhuǎn)換錯(cuò)誤導(dǎo)出時(shí)確認(rèn)sRGB色彩空間衣服被染成怪異顏色罕見物體顏色先驗(yàn)不足手動(dòng)指定區(qū)域顏色或用參考圖噪點(diǎn)變成彩色雪花上色前未降噪先降噪再上色或單獨(dú)去除顏色噪點(diǎn)跑一張圖特別慢顯存不足或CPU渲染降低輸入分辨率或改用云端環(huán)境最后再分享一個(gè)小技巧處理拍攝于上世紀(jì)五六十年代之前的老照片盡量不要拿現(xiàn)代照片作為參考色。那個(gè)年代的膠卷顏色普遍偏暖、飽和度偏低直接把現(xiàn)代標(biāo)準(zhǔn)色板套上去出來的效果會(huì)非?!八芰稀薄N易约撼鋷捉M“年代色板”——不同時(shí)代分別對(duì)應(yīng)偏黃的膚色、偏青的綠色、偏灰的藍(lán)色手動(dòng)精修的時(shí)候用這些色板約束模型的輸出整體氛圍一下就對(duì)了。記住上色這件事技術(shù)決定下限審美決定上限而審美恰恰藏在那些細(xì)節(jié)里。