你所問的是進行圖像的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
圖像的示例。這是什麼樣子:
因此,我們可以說圖像在MATLAB加載像這樣:
imageArray = imread('cameraman.tif');
接下來,我們可以用上面的圖像,產生HSV彩色圖則pseudocolour圖像:
cmap = hsv(256);
colourArray = ind2rgb(imageArray+1, cmap);
我們得到:
留意,你不有使用任何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你的形象。
祝你好運,玩得開心!
我不是這方面的專家,但我發現了一個[文件交換](http://www.mathworks.com/matlabcentral/fileexchange/8214-gray-image-to-color-image-conversion) 。 – patrik