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

use*_*688 1 rgb matlab image colors image-processing

我有一个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
Run Code Online (Sandbox Code Playgroud)

ray*_*ica 6

你要问的是对图像进行伪着色.在MATLAB中执行此操作实际上非常简单.您可以使用灰度强度作为颜色图的索引,每个强度都会生成一种独特的颜色.首先,您需要做的是创建一个长256个元素的颜色贴图,然后根据ind2rgb图像的灰度强度/索引创建彩色图像.

MATLAB中有许多不同的颜色映射.以下是MATLAB中当前可用的色彩映射,没有最近添加的R2014中引入的Parula色彩映射:

色彩图的工作原理是较低的索引/灰度值具有向光谱左侧移动的颜色,而较高的索引/灰度值具有向光谱右侧移动的颜色.

如果要创建包含256个元素的颜色映射,只需将这些颜色映射中的任何一个用作函数,并指定256作为输入参数即可为您生成256个元素颜色映射.例如,如果您想使用HSV颜色贴图,您可以在MATLAB中执行此操作:

cmap = hsv(256);
Run Code Online (Sandbox Code Playgroud)

现在,如果您的MATLAB工作区中存储了灰度图像imageArray,只需使用ind2rgb以下方法:

colourArray = ind2rgb(double(imageArray)+1, cmap);
Run Code Online (Sandbox Code Playgroud)

第一个参数是您想要伪彩色的灰度图像,第二个参数是由MATLAB的任何一个颜色映射函数生成的颜色图. colourArray将包含您的伪彩色图像.请注意,我们将灰度图像偏移 1并同时转换double.原因是因为MATLAB是1索引编程语言,所以我们必须从1开始索引到数组/矩阵.因为你的强度范围很广[0,255],我们想用它来索引颜色图,我们必须让这个去[1,256]允许索引.此外,您最有可能使用uint8图像,因此将1添加到a uint8将简单地使已经处于255到255的任何值饱和.我们将无法转到256.因此,您需要暂时将图像转换为double这样我们就可以提高图像的精度,然后添加1以允许图像在需要时变为256.

这是使用cameraman.tif图像处理工具箱的一部分的示例.这就是它的样子:

在此输入图像描述

所以我们可以在MATLAB中加载那个图像,如下所示:

imageArray = imread('cameraman.tif');
Run Code Online (Sandbox Code Playgroud)

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

cmap = hsv(256);
colourArray = ind2rgb(imageArray+1, cmap);
Run Code Online (Sandbox Code Playgroud)

我们得到:

在此输入图像描述


注意不要使用任何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
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用此自定义颜色映射ind2rgb来伪彩色图像.


祝好运并玩得开心点!