2016-06-21 5 views
0

Ich möchte 30 Schichten einer 3D-Matrix anzeigen. Ich verwende den MATLAB-Slice-Befehl. Meine Daten haben eine Kreissymmetrie und ihr wichtiger Teil befindet sich in der Nähe der Symmetrieachse. Wenn ich den Slice-Befehl verwende, werden die wichtigen Daten durch den Null-Teil meiner Daten verdeckt. Siehe Die Abbildung unten, die mit dem angehängten Code erstellt wurde. Ich möchte den unwichtigen Teil jeder Scheibe (die blauen Regionen) völlig transparent machen. Wie kann ich das machen?Wie wird ein Teil eines Slices (in der MATLAB-Slice-Funktion) gemäß den Werten der 3D-Datenmatrix transparent gemacht?

Der Code nach der Änderung nach Suever Antwort: (! Immer noch nicht funktioniert)

Was scheint das Problem zu sein ??? Annehmen-: Ich fand heraus, dass ich auch die FaceAlpha Eigenschaft auf ‚interp‘ gesetzt hatte

function presentFig4_ver3 
close all; clc; 
load('img3D_shrinked.mat' , 'im3' , 'y_n_mm' , 'xticksVec_mm') 

[X,Y,Z]=meshgrid(y_n_mm,y_n_mm,xticksVec_mm);   
slices=xticksVec_mm; %= 0.23:0.1:(0.23+((30-1)*0.1)); %This is the same as xticksVec_mm 

len_slices=length(slices); 
h=zeros(1,len_slices); 

for ind=1:len_slices   
    h(ind)=slice(X,Y,Z, im3, [],[],[slices(ind)]); 
    set(h(ind),'EdgeColor','none','FaceColor','interp','AlphaData',(im3>0.001)*0.1);  
    set(gca,'ZDir','reverse') 
    hold on 
end 
end % of function 

Result after code modification

Antwort

0

Anstatt den gleichen Alpha-Wert für eine gesamte Scheibe Einstellung 0,5 mit alpha zu sein, Sie‘ Ich möchte die AlphaData property angeben, die einen Transparenzwert für jedes Pixel in Ihrem Eingabebild angibt, und Sie müssen FaceAlpha auf 'flat' oder 'interp' setzen.

Zum Beispiel haben wir im als AlphaData

set(h(ind), 'AlphaData', im, 'FaceAlpha', 'flat') 

verwenden könnte Wenn stattdessen Sie alle Pixel unter einem bestimmten Schwellenwert wollen vollständig transparent sein, können Sie eine logische Anordnung und Verwendung erstellen, statt.

Wenn Sie möchten, dass alle Werte, die größer als der Schwellenwert sind, teilweise transparent statt undurchsichtig sind, können Sie die Maske mit 0,5 multiplizieren.

set(h(ind), 'AlphaData', (im > threshold) * 0.5, 'FaceAlpha', 'flat') 
+0

Hallo Süßer, aus irgendeinem Grund funktioniert Ihre Lösung nicht für mich. Ich zeige meinen Code in einer Bearbeitung der Frage. –

+0

Ich habe das Problem gefunden. Ich musste auch die FaceAlpha-Eigenschaft auf 'interp' setzen. Danke für die Hilfe! –

+0

@ O.T. Oh ja, tut mir leid. Ich hatte anfangs gelesen, dass Ihre 'FaceColor' auf' interp' gesetzt wurde als 'FaceAlpha'. Ich habe meine Antwort aktualisiert, um 'FaceAlpha' einzuschließen – Suever

Verwandte Themen