如何在图中显示两个图像

时间:2014-04-29 09:16:15

标签: matlab

我需要使用一个图显示两个3D图像,我使用alpha(0.5)但我有colormap的问题 这是我的代码:

%%%%%%%%%%%%%%%%%%%%%%%%%%% liver 1 %%%%%%%%%%%%%%%%%%%%%%
liver_surf1=isosurface(nii.img(:,end:-1:1,:),0.05);
V=liver_surf1.vertices;
F=liver_surf1.faces;
t=trisurf(F,V(:,1),V(:,2),V(:,3),'facealpha',0.5,'FaceColor',colormap([1 0 0])); % red color
shading flat;
hold on;
%%%%%%%%%%%%%%%%%%%%%%%%%%% liver 2 %%%%%%%%%%%%%%%%%%%%%%
liver_surf=isosurface(nii.img(:,end:-1:1,end:-1:1),0.05);
V2=liver_surf.vertices;
F2=liver_surf.faces;
t2 = trisurf(F2,V2(:,1),V2(:,2),V2(:,3),'facealpha',0.5,'FaceColor',colormap([0 1 0])); % green color

这是结果: enter image description here

然后问题是两个图像颜色都变为绿色,如果我单独运行是好的但我不能将两个图像组合在一起。所以在我添加"阴影平坦"它变成这样:

enter image description here

我怎么能有红色和绿色在一起? 感谢

这是两种不同的肝脏,它们应该在具有透明度的图像中显示,因为它们具有交叉。

1 个答案:

答案 0 :(得分:1)

我很惊讶代码甚至有效(你有什么版本的MATLAB?),我希望trisurf出错。无论如何,colormap是一个设置图像颜色图的函数,而不是单个曲面的颜色图。您将colormap设置为绿色,所有内容都将为绿色。

您想要的是将colordata C设置为与z相同大小的单个值,然后调整色彩映射以为您提供正确的颜色。这是一个简单的方法:

trisurf(F,V(:,1),V(:,2),V(:,3),zeros(size(V(:,3))));  % Cdata = 0
trisurf(F2,V2(:,1),V2(:,2),V2(:,3),,ones(size(V2(:,3)))); %Cdata = 1
colormap([1 0 0; 0 1 0]);

这基本上产生两个表面,一个具有所有颜色值为零,另一个具有所有颜色值为一。 colormap调用会更改色彩映射,因此它只有两个值红色(零)和绿色(一个)。 (如果添加facealpha等也应该有效。)

enter image description here