2016-06-21 91 views
0

我想显示30个3D矩阵的切片。我正在使用MATLAB切片命令。我的数据具有圆形对称性,它的重要部分位于对称轴附近。当我使用切片命令时,我的数据的零部分阻塞了重要数据。请参阅下图,它是由附加的代码创建的。我想让每个切片(蓝色区域)的不重要部分完全透明。我怎样才能做到这一点?如何根据3D数据矩阵的值使切片的一部分(在MATLAB切片函数中)透明?

修改后,根据Suever答案代码:(!还不行)

似乎是什么问题??? -Answer:我发现我不得不也向FaceAlpha属性设置为“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

而不是用于整个切片设置相同的α值使用alpha为0.5,则”我们希望指定AlphaData property,它将为输入图像中的每个像素指定一个透明度值,并且您希望将FaceAlpha设置为'flat''interp'

例如,我们可以使用im作为AlphaData

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

相反,如果你想低于某一阈值的所有像素是完全透明的,你可以创建,而不是逻辑阵列和使用。

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

如果您希望所有大于阈值的值都是部分透明而非不透明,则可以将遮罩乘以0.5。

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

您好Suever,由于某种原因您的解决方案不适合我。我将在编辑问题时显示我的代码。 –

+0

我发现了这个问题。我还需要将FaceAlpha属性设置为'interp'。谢谢您的帮助! –

+0

@ O.T。哦,是的,对此感到抱歉。我最初已经将你设置为'interp'的'FaceColor'读作'FaceAlpha'。我已经更新了我的答案,以包含'FaceAlpha' – Suever