2015-04-23 141 views
1

我有一個具有不同值(0,1,2,3,4,...,255)的8位灰度圖像。我想要做的是用藍色,紅色等顏色給灰度圖像着色。到現在爲止,我一直在做這種着色,但只是在灰度上。我如何用真實的顏色來做到這一點?在MATLAB中着色8位灰度圖像

這是我寫到目前爲止的代碼。這就是我正在尋找在圖像中是白色的所有值和一個黑乎乎的灰色替換它們:

for k = 1:length(tifFiles) 
    baseFileName = tifFiles(k).name; 
    fullFileName = fullfile(myFolder, baseFileName); 
    fprintf(1, 'Now reading %s\n', fullFileName); 
    imageArray = imread(fullFileName); 

    %// Logic to replace white grayscale values with darkish gray here 
    ind_plain = find(imageArray == 255); 
    imageArray(ind_plain) = 50; 

    imwrite(imageArray, fullFileName); 
end 
+1

我不是這方面的專家,但我發現了一個[文件交換](http://www.mathworks.com/matlabcentral/fileexchange/8214-gray-image-to-color-image-conversion) 。 – patrik

回答

6

你所問的是進行圖像的pseudo colouring。在MATLAB中這樣做實際上非常簡單。您可以使用灰度強度作爲色彩圖的索引,並且每個強度都會生成唯一的顏色。首先,您需要做的是創建一個長度爲256個元素的彩色貼圖,然後使用ind2rgb根據圖像的灰度強度/索引創建彩色圖像。

在MATLAB中有許多不同的顏色貼圖。下面是在MATLAB當前可用的彩色地圖,而不最近補充說,在R2014推出Parula彩色地圖:

如何彩色地圖的工作是低指數/灰度值有向左移動顏色光譜的一側和較高的索引/灰度值具有向光譜右側移動的顏色。

如果您想創建一個包含256個元素的彩色地圖,只需將這些彩色地圖中的任何一個作爲函數,並將256指定爲輸入參數,即可爲您生成256個元素的彩色地圖。例如,如果你想使用HSV彩色地圖,你會在MATLAB做到這一點:

cmap = hsv(256); 

現在,在MATLAB的工作空間給你的灰度圖像存儲在imageArray,只需使用ind2rgb這樣:

colourArray = ind2rgb(double(imageArray)+1, cmap); 

第一個參數是想要僞彩色的灰度圖像,第二個輸入是由MATLAB的任何一種顏色映射函數產生的彩色圖。 colourArray將包含您的僞彩色圖像。請注意,我們偏移的灰度圖像減1和轉換爲double。原因是因爲MATLAB是1索引編程語言,所以我們必須從1開始索引到數組/矩陣。因爲你的強度範圍從[0,255],我們想用它來索引色彩圖,我們必須使這從[1,256]去允許索引。另外,您最有可能使用uint8圖片,因此將0123加上uint8將只會使已經達到255至255的值飽和。我們將無法達到256.因此,您需要將圖片暫時調整爲double,這樣我們就可以提高圖像的精度,然後加1以使圖像在適用的情況下達到256。

下面是使用作爲圖像處理工具箱一部分的cameraman.tif圖像的示例。這是什麼樣子:

enter image description here

因此,我們可以說圖像在MATLAB加載像這樣:

imageArray = imread('cameraman.tif'); 

接下來,我們可以用上面的圖像,產生HSV彩色圖則pseudocolour圖像:

cmap = hsv(256); 
colourArray = ind2rgb(imageArray+1, cmap); 

我們得到:

enter image description here


留意,你不使用任何MATLAB提供了彩色地圖的。事實上,你可以創建你自己的色彩地圖。您只需創建一個256 x 3矩陣,其中每列表示每個強度的紅色(第一列),綠色(第二列)和藍色(第三列)值的比例。因此,第一行給出了映射到強度0的顏色,第二行給出了映射到強度1的顏色,依此類推。此外,您需要確保強度爲浮點數,範圍從[0,1]。例如,這些都是上面生成的第10行中的HSV彩色地圖的:

>> cmap(1:10,:) 

ans = 

    1.0000   0   0 
    1.0000 0.0234   0 
    1.0000 0.0469   0 
    1.0000 0.0703   0 
    1.0000 0.0938   0 
    1.0000 0.1172   0 
    1.0000 0.1406   0 
    1.0000 0.1641   0 
    1.0000 0.1875   0 
    1.0000 0.2109   0 

然後,您可以使用此自定義顏色映射到ind2rgb到pseudocolour你的形象。


祝你好運,玩得開心!

+0

謝謝! :)完美工作!順便說一句, – user1578688

+0

。有可能「重新獲得」價值?我的意思是,例如「1」的所有值都是紅色的等等。 – user1578688

+0

什麼是.... Reasing? – rayryeng