создание 3D изображения png файлов с прозрачным фоном с помощью surf


Проблема: изображение теряет прозрачность при построении графика с использованием surf

Я уже выяснил, как создать файл png с прозрачным фоном, как описано в многочисленных других потоках.здесь

Однако при построении графика используется прибой.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

Код преобразует изображение.png (синий квадрат) для теста.png с прозрачным фоном (избавьтесь от черного фона). тест.png-это тогда используется для создания графика прибоя, который оказывается непрозрачным. Есть идеи, что я делаю не так?

синий квадрат с черным фоном-нужно построить это как 3D-срез без черного фона

1 3

1 ответ:

В MATLAB есть функция под названием alpha, которая задает прозрачность для объектов в текущих осях. Я предлагаю изменить переменную с именем alpha на другое имя, заменив следующую строку

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

To

[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'

Подробнее . Надеюсь, это поможет!