создание 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-это тогда используется для создания графика прибоя, который оказывается непрозрачным. Есть идеи, что я делаю не так?
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
Результат
Подробнее . Надеюсь, это поможет!