gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:30:23 25 4
gpt4 key购买 nike

我有一个具有不同值(0、1、2、3、4、...、255)的 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

最佳答案

您要执行的是 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],而我们要使用this 索引到颜色映射中,我们必须使它从 [1,256] 开始以允许索引。此外,您很可能使用 uint8 图像,因此将 1 添加到 uint8 只会使任何已经在 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 的颜色,依此类推。此外,您需要确保强度为 float ,范围为 [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 中为您的图像伪彩色。


祝你好运,玩得开心!

关于image - 在 MATLAB 中为 8 位灰度图像着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29816835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com