2016-06-21 131 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