2014-02-28 45 views
1

以我「做夢,」我想的圖像傳遞給方法,像這樣(pseudoC#):是否可以通過程序對圖像着色?

string pathToOriginalImg = @"http://commons.wikimedia.org/wiki/File:Mark_Twain_by_AF_Bradley.jpg"; 
Image colorizedImg = new ColorizeImage(pathToOriginalImg, [array of colors]); 

IOW,傳遞圖像的路徑進行着色的方法,隨着您想要在着色中使用的一組顏色。例如,如果我想將馬克吐溫的這幅圖像「西班牙化」,我可能想要傳遞西班牙和墨西哥國旗的顏色,例如:森林綠色,白色,墨西哥紅;西班牙紅,黃色。

這是可能的,或者我只是一個日誌不滿的客艙甚至希望這樣?

+1

您可以輕鬆更改圖像中每個單個像素的顏色。一個完全不同的故事是,這些變化對你來說「有意義」,那就是:最終的圖像看起來完全如你所願。將圖片視爲一串連續的方塊(數百萬):執行或多或少的複雜/同步修改可能成爲一項非常困難的任務。 – varocarbas

+0

嗯 - 之前/之後的例子? –

+1

嗯,有趣的是,我想你可以使用標準的'posterize'功能將圖像轉換爲多種顏色,然後使用另一種功能將每種顏色替換爲目標圖像。不知道它是否會看起來不錯,雖然... – Starscream1984

回答

2

這是可能的,但相當複雜......

首先您需要在圖像的顏色轉換成另一種顏色空間。如果我可以說,RGB不具備人類對顏色感知的特性。所以如果你想要一個好看的結果,你需要使用另一個(如HSL)。

在這裏看到了不同的色彩空間:http://en.wikipedia.org/wiki/Color_space

隨着HSL你可以「移動」一些顏色到另一個價值,但保持亮度和飽和度參數。

這裏最大的問題是知道何時移動顏色以及何時保持顏色,而且我認爲結果在第一次嘗試時可能會顯得很奇怪。

此外,您可能需要先運行某種顏色分析,然後才能確定圖像中的哪些像素應該修改其色調組件。 例如,您可以使用Canny邊緣檢測算法來檢測顏色相當均勻的圖像部分,並使用內插代替檢測到的邊緣進行顏色替換。這只是一個想法,可能有很多其他方法。

這是如何實現這一點的廣泛解釋。

我覺得這個鏈接可以給你的圖像中對色彩處理一些有用的信息,這可能是一個開始: How to harmonize a color image

而且谷歌搜索關於Color harmonization可以給你一些線索。

前段時間我嘗試過類似的東西,如果我有一些時間,我會把它挖出來,並可以發佈使用的代碼。在我的代碼中有一些有用的色彩空間轉換工具和這些東西,但它並沒有進行優化,但是當您試圖找出如何進行時,這是有幫助的。

1

this後的答案可以幫助你,它創建了圖像的疊加,即覆蓋可能是你的標誌或任何你想

3

你的描述類似pseudocoloring,在那裏你映射的源色彩,基於新的顏色在映射模式上。當然,你將如何完全映射取決於你,並以一種有意義的方式(以某種方式)爲每個圖像自動化,幾乎不可能。但是,您可以定義一些常規規則,例如總是嘗試將綠色映射到其中的一個(如果可用):黃色,然後是藍色,然後是灰度58%。 閱讀here可能會給你額外的想法。 作爲源256色RGB圖像和目標圖像6色的示例模式,您可以將256除以6,並且對於每個「色彩區域」,您都會從目標色彩數組中提供新的顏色。由此產生的圖像將只有6種顏色,細節幾乎肯定會丟失。

1

如果您的圖像使用索引顏色和顏色查找表(LUT),那麼您只需更改LUT以獲取使用該索引的每個像素進行更改。

您的圖像可能不使用LUT,但您可以使用實用程序使其使用一個。像ImageMagick(使用「-colors」命令)可以減少顏色,然後寫入托盤化圖像。首先使用不同圖像中的LUT,並且您已更改顏色(使用ImageMagick「-clut」命令執行此操作)。

相關問題