3

問題 : surf を使用してプロットすると、画像の透明度が失われます

他の多くのスレッドで説明されているように、背景が透明なpngファイルを作成する方法をすでに理解しています。ここ

ただし、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 を使用してサーフ プロットを生成しますが、透明ではないことがわかります。私が間違っていることは何ですか?

黒い背景の青い正方形 - これを黒い背景なしで 3D スライスとしてプロットする必要があります

4

1 に答える 1

3

alpha現在の座標軸のオブジェクトの透明度を設定する MATLAB で呼び出される関数があります。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);

結果

上記の例から取得した画像

alphaおよびsurf関数の詳細。


マトリックスの透明度の設定

しかし、上記の関数はプロット全体の透明度を設定します。透明度の元のマトリックスを設定する場合は、'FaceAlpha','texture'パラメーターをに渡す必要がありsurfます。

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

結果

「FaceAlpha」を設定して取得した画像

詳細. それが役に立てば幸い!

于 2012-08-16T02:16:34.707 に答える