使用冲浪创建透明背景的png文件的3D图像

时间:2012-08-16 00:19:50

标签: matlab 3d background png transparent

问题:使用冲浪图时,图像会失去透明度

我已经想出如何创建一个透明背景的png文件,如许多其他线程所述。here

但是,使用surf.m绘图时,图像不透明

这是我到目前为止的代码:

img = imread('image.png');

A1 = ones(size(img));A2 = ones(size(img));A3 = ones(size(img));
A1(img(:,:,1)==0)=0;A2(img(:,:,2)==0)=0;A3(img(:,:,3)==0)=0;

A = A1+A2+A3;
A= A(:,:,1);

imwrite(img,'test.png','alpha',A);
[img,map,alpha] = imread('test.png');

ximage = [-.5,.5;-.5,.5];
yimage = [0,0;0,0];
zimage = [.5,.5;-.5,-.5];

surf(ximage,yimage,zimage,'Cdata',img,'Facecolor','texturemap','Edgecolor','none','alphadata',alpha);
axis vis3d

代码将image.png(蓝色方块)转换为具有透明背景的test.png(摆脱黑色背景)。然后使用test.png生成一个冲浪图,结果证明不是透明的。知道我做错了吗?

blue square with black background - need to plot this as a 3D slice without the black background

1 个答案:

答案 0 :(得分:3)

MATLAB中有一个名为alpha的函数,用于设置当前轴中对象的透明度。我建议通过替换以下行来将名为alpha的变量更改为其他名称

[img,map,alpha] = imread('test.png');

[img,map,alphaChannel] = imread('test.png');

现在,在运行surf之后,您可以通过alpha功能设置绘图的透明度。

使用alpha功能

surf(ximage,yimage,zimage,'Cdata',img,'Facecolor','texturemap','Edgecolor', ...
                          'none','alphadata',alpha);
alpha(0.5); %# line added
axis vis3d

使用surf功能

如果您想通过surf功能设置透明度,则需要添加'FaceAlpha'参数:

surf(ximage,yimage,zimage,'Cdata',img,'Facecolor','texturemap','Edgecolor', ... 
                          'none','AlphaData',alphaChannel,'FaceAlpha',0.5);

<强>结果

Image obtained through through any example above

有关alphasurf函数的详细信息。


设置矩阵透明度

但是上面的那些功能设定了整个情节的透明度。如果您要设置原始透明度矩阵,则需要将'FaceAlpha','texture'参数传递给surf

handler = surf( ximage , yimage , zimage , 'Cdata', img , ...
    'FaceColor','texturemap',                             ...
    'EdgeColor','none',                                   ... 
    'FaceAlpha','texture',                                ...
    'AlphaData', alphaChannel);
axis vis3d

<强>结果

Image obtained by setting 'FaceAlpha'

More details。希望它有所帮助!