如何根据3D数据矩阵的值使切片的一部分(在MATLAB切片函数中)透明?

时间:2016-06-21 18:39:23

标签: matlab

我想显示30片3D矩阵。我正在使用MATLAB slice命令。我的数据具有圆对称性,其重要部分位于对称轴附近。当我使用切片命令时,我的数据的零部分会隐藏重要数据。请参见下图,该图由附加代码创建。我想让每个切片(蓝色区域)的不重要部分完全透明。我怎么能这样做?

根据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

1 个答案:

答案 0 :(得分:0)

不是使用alpha将整个切片的相同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')