2016-06-21 3 views
0

3D 매트릭스의 30 조각을 표시하려고합니다. MATLAB 슬라이스 명령을 사용하고 있습니다. 내 데이터는 원형 대칭을 가지며 중요한 부분은 대칭 축 근처에 있습니다. 슬라이스 명령을 사용할 때 제 데이터의 제로 부분은 중요한 데이터를 모릅니다. 첨부 된 코드에 의해 작성된 아래 그림을 참조하십시오. 나는 각 조각 (파란색 영역)의 중요하지 않은 부분을 완전히 투명하게 만들고 싶다. 어떻게해야합니까? Suever의 대답에 따라 수정 후3D 데이터 행렬의 값에 따라 슬라이스 (MATLAB 슬라이스 함수에서)의 일부분을 투명하게 만드는 방법은 무엇입니까?

코드 : (! 아직 작동하지 않습니다)

는 문제가 될 것으로 보인다 무엇 ??? -Answer : 나는 alpha를 사용하여 0.5로 전체 슬라이스에 대해 같은 알파 값을 설정하는 것보다 오히려 '보정시'

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'를'interp'로'FaceAlpha'로 읽었습니다. 내 대답을 업데이트하여'FaceAlpha'를 포함 시켰습니다. – Suever

관련 문제