gpt4 book ai didi

image - Matlab colormap - 如何只更改一个特定值,而不是一系列值?

转载 作者:太空宇宙 更新时间:2023-11-03 20:06:32 25 4
gpt4 key购买 nike

这是我在 StackOverflow 上的第一个问题,如果我犯了一些错误,请原谅我。

我必须使用 MATLAB 可视化多个单 channel 图像(二维矩阵)。每个像素的值通常介于 ~10^-10~10^-6 之间。我正在使用翻转的 jet 颜色图(因此深红色低,深蓝色高)。

现在,其中一些矩阵还包含一些 0 像素值。我想为这些像素设置特定颜色(比如白色)。我现在所做的是:

cmap = colormap('jet'); % standard 64 colors jet colormap 
cmap = flipud(cmap);

然后我尝试根据我在网上找到的不同答案(包括 How do I change a single color in a colormap in Matlab? )编辑颜色图的第一行并将其设置为 [1 1 1](白色):

cmap(1,:) = [1 1 1];
colormap(cmap);

问题是颜色映射的这个编辑将图像的第一个 range/64 值(我猜)设置为白色,而不是只设置 0变白。

我想知道:是否可以将这些像素设置为白色?

我想我的问题取决于这样一个事实,即即使对于具有这几个 0 值像素的图像,第二低的像素也很多而且确实(按 10^-10 的顺序)。

非常感谢您!最良好的祝愿!

宇进

最佳答案

解决此问题的一种方法是使用所需的颜色图对图像进行实际编码,然后使用 logical 索引将原始图像中的每个位置设置为最终结果中的 0 到白色。

因此,给定您的 2D 图像,实际上创建一个映射到 jet 颜色映射的版本 ind2rgb .之后在原始图像中搜索0值,然后将最终着色结果中的这些位置设置为白色。你问题的最后一点很有意义。如果您的值介于如此小的范围之间,然后值也为 0,则最终颜色图中的颜色将偏向颜色图的最末端。因此,我可以建议的另一件事是将最初为零的原始图像的值设置为非零范围内的值,这样它就不会使颜色映射饱和。一旦您最终使用建议的颜色图转换图像,我们就可以手动将这些像素设置为白色。

假设您的图像存储在 im 中,执行如下操作:

cmap = colormap('jet'); % standard 64 colors jet colormap 
cmap = flipud(cmap);
im2 = im;
ind = im == 0; %// Find locations that are zero in the original image
im2(ind) = max(im(:)); %// Make a copy of the original image where 0 pixels are set to the maximum of the image
rgb = ind2rgb(im2, cmap); %// Create pseudo-coloured image
rgb(repmat(ind, [1 1 3])) = 1; %// Set corresponding locations to white

如果您有图像处理工具箱,您可以使用 imshow,或者您可以使用 image 来可视化结果(即 imshow(rgb)image(rgb))。

小建议

我建议您将 cmap = colormap('jet'); 更改为 cmap = jet; 因为 colormap('jet')如果您还没有打开一个空图形窗口,则会生成一个空图形窗口。 cmap = jet; 会给你同样的结果。

关于image - Matlab colormap - 如何只更改一个特定值,而不是一系列值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28884529/

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