【问题标题】:Matlab colormap - How can I change only ONE specific value, not a range of values?Matlab colormap - 我怎样才能只改变一个特定的值,而不是一个值范围?
【发布时间】:2015-05-07 05:11:46
【问题描述】:

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

我必须使用 MATLAB 可视化多个单通道图像(2D 矩阵)。每个像素的值通常在~10^-10~10^-6 之间。我正在使用翻转的jet 颜色图(所以深红色低,深蓝色高)。

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

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 值像素的图像,第二低的像素是 ma​​ny 并且真的 small (顺序为10^-10)。

提前非常感谢您!祝你好运!

宇进

【问题讨论】:

    标签: image matlab image-processing colormap


    【解决方案1】:

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

    因此,给定您的 2D 图像,实际创建它的一个版本,该版本使用 ind2rgb 映射到 jet 颜色映射。之后,在原始图像中搜索 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; 会给你同样的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 2020-10-29
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多