【问题标题】:creating 3D image of png files with transparent background using surf使用 surf 创建具有透明背景的 png 文件的 3D 图像
【发布时间】:2012-08-12 07:48:15
【问题描述】:

问题:使用 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(蓝色方块)转换为带有透明背景的 test.png(去掉黑色背景)。然后使用 test.png 生成一个不透明的冲浪图。知道我做错了什么吗?

【问题讨论】:

  • 请将代码行缩进四个空格,以便格式化

标签: matlab 3d background png transparent


【解决方案1】:

在 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);

结果

有关alphasurf 函数的更多信息。


设置矩阵透明度

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

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

结果

More details。希望对您有所帮助!

【讨论】:

  • 感谢维克多雨果的回复。但是,我想要的结果是透明度在黑色边框中设置为 0,在其他任何地方设置为 1(蓝色框)。 Alpha 和/或 Facealpha 将整个矩阵的透明度设置为相同的值。我想以某种方式告诉 surf 使用 alpha 矩阵,而不仅仅是一个标量值。希望这是有道理的。
  • 所以我尝试使用这种技术将图像放置在具有类似于此的高程数据的实际曲面图上:stackoverflow.com/questions/3719502/… 如何防止高程数据受到影响?
  • @user1854628 你发给我的例子中的“海拔数据”是什么?是图像周围的球体吗?
猜你喜欢
  • 2023-04-01
  • 2012-12-19
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
相关资源
最近更新 更多