2016-08-09 2 views
3

Я использую imshow() для визуализации данных, полученных из разницы двух изображений в оттенках серого. Изображения маскируются, то есть каждый пиксель «укладка под» маски имеет значение NaN. Данные представлены цветовой палитрой parula. Проблема в том, что imshow() обрабатывает NaN как ноль, и поэтому маскированные пиксели представлены как синие. Есть ли простой способ опустить замаскированные пиксели или отображать их в цвете, который не является частью цветовой карты (например, белый, серый или черный)?Matlab imshow omit NaN

Я предпочел бы решение основываться на imshow(), так как это было бы проще всего включить в мой код. Однако также будут приняты решения с использованием pcolor, imagesc или тому подобного.

ответ

7

Вы можете установить AlphaData объекта изображения равным ~isnan(data) таким образом, чтобы NaN отображались как прозрачные значения.

R = rand(10); 
R(R < 0.25) = NaN; 

him = imshow(R, 'InitialMagnification', 10000); 
colormap parula 
set(him, 'AlphaData', ~isnan(R)) 

enter image description here

Если вы хотите определенный цвет, вы можете обратиться по осям и установите цвет осей, чтобы быть любой цвет вы хотите NaN значения быть.

axis on; 

% Make a red axis 
set(gca, 'XColor', 'none', 'yColor', 'none', 'xtick', [], 'ytick', [], 'Color', 'r') 

enter image description here

Если вы используете pcolor, то NaN значения уже рассматриваются как прозрачный.

+0

Удивительный! Именно то, что я искал. Большое спасибо, мужик! – Dave

Смежные вопросы