2016-06-21 8 views
0

3Dマトリックスの30枚のスライスを表示します。私はMATLABスライスコマンドを使用しています。私のデータは円対称であり、重要な部分は対称軸の近くにあります。私がスライスコマンドを使用するとき、私のデータのゼロ部分は重要なデータを覚えていません。添付のコードで作成された下の図を参照してください。私は、各スライスの重要でない部分(青い領域)を完全に透明にしたいと考えています。どうやってやるの? Sueverに応じて変更後の3Dデータ行列の値に応じてスライスの一部を(MATLABスライス関数で)透明にするにはどうすればいいですか?

コードは答える:(まだ動作しません!)

問題のようです何? -Answer:私はalphaを使用して0.5であることをスライス全体に同じアルファ値を設定するよりも、むしろ「interpの」

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

答えて

0

にFaceAlphaプロパティを設定することもなかったことが判明、あなたの」 AlphaData propertyを指定して、入力画像の各ピクセルの透過値を指定します。FaceAlpha'flat'または'interp'のいずれかに設定します。例えば

、我々は代わりに、あなたが特定のしきい値以下のすべてのピクセルを完全に透明になりたい場合は、論理配列を作成し、代わりにそれを使用することができますAlphaData

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

としてimを使用することができます。あなたが閾値よりも大きいすべての値が部分的に透明ではなく不透明になりたい場合は

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

は、あなたが0.5でマスクを掛けることができます。

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

こんにちは、何らかの理由であなたの解決策は私のためには機能しません。質問の編集に自分のコードを表示します。 –

+0

問題が見つかりました。また、FaceAlphaプロパティを 'interp'に設定する必要がありました。助けてくれてありがとう! –

+0

@ O.T。ああ、申し訳ありません。私は最初、あなたの 'FaceColor'を' FaceAlpha'として 'interp'にセットしました。私は 'FaceAlpha'を含むように私の答えを更新しました – Suever

関連する問題