在MATLAB中为8位灰度图像着色

时间:2015-04-23 07:42:11

标签: image matlab image-processing colors rgb

我有一个8位灰度图像,其值不同(0,1,2,3,4,...,255)。我想要做的是用灰色,红色等颜色为灰度图像着色。到目前为止,我一直在进行这种着色,但仅限于灰度。我怎么能用实际的颜色来做呢?

这是我到目前为止编写的代码。这是我在搜索图像中所有白色值并用深灰色替换它们的地方:

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 个答案:

答案 0 :(得分: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图片,因此向uint8添加1只会使任何已经达到255到255的值饱和。我们无法前往256.因此,您需要暂时将图像转换为double,以便我们可以提高图像的精度,然后加1以允许图像在需要时变为256。

以下是使用图像处理工具箱中cameraman.tif图片的示例。这就是它的样子:

enter image description here

因此我们可以在MATLAB中加载该图像,如下所示:

imageArray = imread('cameraman.tif');

接下来,我们可以使用上面的图像,生成HSV色彩图,然后伪彩色图像:

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

我们得到:

enter image description here

请注意,您没有 使用MATLAB提供的任何颜色贴图。实际上,您可以创建自己的颜色映射。您所要做的就是创建一个256 x 3矩阵,其中每列表示每个强度的红色(第一列),绿色(第二列)和蓝色(第三列)值的比例。因此,第一行为您提供映射到强度0的颜色,第二行为您提供映射到强度1的颜色,依此类推。此外,您需要确保强度浮点且范围为[0,1]。例如,这些是上面生成的HSV颜色映射的前10行:

>> 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以伪彩您的图像。

祝你好运,玩得开心!