Matlab imshow omit NaN
I am using imshow()
to visualize data obtained from the difference of two grayscale images. The images are masked, i.e. each pixel 'laying under' the mask has the value NaN
. The data are represented by the parula
colormap. The problem is that imshow()
treates NaN
as zero and therefore the masked pixels are represented as blue. Is there an easy way to omit the masked pixels or to display them in a color that is not part of the colormap (e.g. white, gray, or black)?
I would prefer the solution to base on imshow()
since it would be easiest to include into my code. However, solutions using pcolor
, imagesc
or the like will also be appreciated.
Solution 1:
You can set the AlphaData
of the image object to be equal to ~isnan(data)
such that NaN's will be shown as transparent values.
R = rand(10);
R(R < 0.25) = NaN;
him = imshow(R, 'InitialMagnification', 10000);
colormap parula
set(him, 'AlphaData', ~isnan(R))
If you want a specific color, you could turn on the axes and set the color of the axes to be whatever color you want the NaN
values to be.
axis on;
% Make a red axis
set(gca, 'XColor', 'none', 'yColor', 'none', 'xtick', [], 'ytick', [], 'Color', 'r')
If you use pcolor
, then NaN
values are already treated as transparent.