图像中NaNs的对比色

fla*_*hon 7 matlab

我用NaNs填充矩阵中未使用的元素,并且我想在使用时显示数据时为那些具有NaN值的元素指定对比色imagesc.

下面是一个可能的解决方案的链接,但我不太明白.

http://www.mathworks.com/matlabcentral/newsreader/view_thread/19985

yuk*_*yuk 16

NaN值从轴色彩图获得第一种颜色,默认情况下对应于最小值(NaN除外).您可以使用CAXIS功能更改最小值设置轴颜色限制的颜色.要为NaN值指定对比色,可以为NaN值添加特殊颜色作为第一种颜色(1x3向量).

我举了你的例子并做了一个函数(带一些注释):

function [h hcb] = imagescwithnan(a,cm,nanclr)
% IMAGESC with NaNs assigning a specific color to NaNs

%# find minimum and maximum
amin=min(a(:));
amax=max(a(:));
%# size of colormap
n = size(cm,1);
%# color step
dmap=(amax-amin)/n;

%# standard imagesc
him = imagesc(a);
%# add nan color to colormap
colormap([nanclr; cm]);
%# changing color limits
caxis([amin-dmap amax]);
%# place a colorbar
hcb = colorbar;
%# change Y limit for colorbar to avoid showing NaN color
ylim(hcb,[amin amax])

if nargout > 0
    h = him;
end
Run Code Online (Sandbox Code Playgroud)

这里caxis语句将颜色映射的第一种颜色分配给最小值amin,而不是最小值amin-dmap.所以第一种颜色专门分配给NaNs.


尝试此功能:

a=peaks;
a(a < 0.5) = nan;
imagescwithnan(a,hot,[0 1 1]) %# [0 1 1] is cyan
Run Code Online (Sandbox Code Playgroud)

测试图像 - 隐藏NaN颜色

如果您在函数中注释ylim语句(可以使用其他参数进行控制),则此NaN颜色将位于色彩映射表上.

测试图像 - 颜色条上显示NaN颜色