圖像間的超快速色彩傳遞(P0,前情提要)
顏色轉移算法
我對顏色傳遞的實現(xiàn)(松散地)基于Reinhard等人(2001)的圖像之間的顏色傳遞。
在本文中,Reinhard及其同事證明,通過分別利用L*a*b*顏色空間和每個L*、a*和b*通道的平均值和標準偏差,可以在兩幅圖像之間傳遞顏色。
算法如下:
第1步:輸入源圖像和目標圖像。源圖像包含希望目標圖像模擬的顏色空間。在本頁頂部的圖中,左邊的日落圖像是我的源,中間的圖像是我的目標,右邊的圖像是應用于目標的源的顏色空間。
第2步:將源圖像和目標圖像轉換為L*a*b*顏色空間。L*a*b*顏色空間模擬感知一致性,其中顏色值的微小變化也應產生顏色重要性的相對相等變化。與標準RGB顏色空間相比,L*a*b*顏色空間在模擬人類如何解讀顏色方面做得更好,正如你所看到的,它在顏色傳遞方面非常有效。
步驟3:拆分源和目標的通道。
步驟4:計算源圖像和目標圖像的每個L*a*b*通道的平均值和標準偏差。
步驟5:從目標通道中減去目標圖像的L*a*b*通道的平均值。
第6步:通過目標的標準偏差除以源的標準偏差,再乘以目標通道,來縮放目標通道。
第7步:為源添加L*a*b*通道的方式。
第8步:剪裁[0255]范圍之外的任何值。(注意:這一步不是原著的一部分。我之所以添加這一步,是因為OpenCV處理顏色空間轉換的方式。如果要在不同的語言/庫中實現(xiàn)此算法,您必須自己執(zhí)行顏色空間轉換,或者了解進行轉換的庫是如何工作的)。
第9步:將頻道重新合并在一起。
第10步:從L*a*b*空間轉換回RGB顏色空間。
我知道這似乎需要很多步驟,但事實并非如此,尤其是考慮到在使用Python、NumPy和OpenCV時,該算法的實現(xiàn)有多么簡單。
如果現(xiàn)在看起來有點復雜,別擔心。繼續(xù)閱讀,我會解釋為算法提供動力的代碼。
要求
我假設您的系統(tǒng)上安裝了Python、OpenCV(帶有Python綁定)和NumPy。