gpt4 book ai didi

matlab - 使用 surf 创建具有透明背景的 png 文件的 3D 图像

转载 作者:太空宇宙 更新时间:2023-11-03 20:31:12 25 4
gpt4 key购买 nike

问题:使用 surf 绘图时图像失去透明度

我已经想出如何创建一个透明背景的 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(蓝色方 block )转换为具有透明背景(去除黑色背景)的 test.png。然后使用 test.png 生成冲浪图,结果证明它是不透明的。知道我做错了什么吗?

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

最佳答案

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

关于 alpha 的更多信息和 surf功能。


设置矩阵透明度

但是上面的那些函数设置了整个图的透明度。如果你想设置你原来的透明度矩阵,你需要将 '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 .希望对您有所帮助!

关于matlab - 使用 surf 创建具有透明背景的 png 文件的 3D 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11979076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com