2016-08-09 15 views
3

Ich verwende imshow(), um Daten anzuzeigen, die aus der Differenz zweier Graustufenbilder erhalten wurden. Die Bilder werden maskiert, d. H. Jedes Pixel, das unter der Maske liegt, hat den Wert NaN. Die Daten werden durch die Farbkarte parula dargestellt. Das Problem ist, dass imshow()NaN als Null behandelt und daher die maskierten Pixel als blau dargestellt werden. Gibt es eine einfache Möglichkeit, die maskierten Pixel wegzulassen oder sie in einer Farbe anzuzeigen, die nicht Teil der Colormap ist (z. B. weiß, grau oder schwarz)?Matlab imshow weglassen NaN

Ich würde die Lösung basierend auf imshow() bevorzugen, da es am einfachsten wäre, in meinen Code aufzunehmen. Jedoch werden auch Lösungen unter Verwendung von pcolor, imagesc oder dergleichen geschätzt.

Antwort

7

Sie können das AlphaData des Bildobjekts auf ~isnan(data) setzen, sodass NaNs als transparente Werte angezeigt werden.

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

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

enter image description here

Wenn Sie eine bestimmte Farbe wünschen, können Sie auf den Achsen drehen und die Farbe der Achsen festgelegt, was Farbe Sie die NaN Werte sein wollen sein.

axis on; 

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

enter image description here

Wenn Sie pcolor verwenden, dann werden NaN Werte bereits als transparent behandelt.

+0

Super! Genau das, was ich gesucht habe. Vielen Dank Alter! – Dave

Verwandte Themen