[英]Matlab colormap - How can I change only ONE specific value, not a range of values?
这是我在StackOverflow上遇到的第一个问题,所以请谅解。
我必须使用MATLAB可视化多个单通道图像(二维矩阵)。 每个像素的值通常在~10^-10
和~10^-6
。 我正在使用翻转的jet
(因此深红色较低,深蓝色较高)。
现在,其中一些矩阵还包含一些0
像素值。 我只想为这些像素设置特定的颜色(例如白色)。 我现在所做的是:
cmap = colormap('jet'); % standard 64 colors jet colormap
cmap = flipud(cmap);
然后,我尝试根据网上找到的不同答案(包括如何在Matlab中更改颜色图中的单一颜色? )来编辑颜色图的第一行,并将其设置为[1 1 1]
(白色):
cmap(1,:) = [1 1 1];
colormap(cmap);
问题在于,对色图的此编辑将图像的第一个范围/ 64值(我想)设置为白色,而不是仅将0
设置为白色。
我想知道:是否可以仅将那些像素设置为白色?
我想我的问题取决于这样一个事实,即使对于具有这几个0
值像素的图像,倒数第二个像素也很多而且非常小 (大约10^-10
)。
提前非常感谢您! 最好的祝愿!
乌金
解决此问题的一种方法是使用所需的颜色映射表对图像进行实际编码,然后使用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;
将给您相同的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.