2015-04-23 408 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