Сегодня я хотел поэкспериментировать с полупрозрачными полигонами (в частности, треугольниками) в Matlab. Что мне нужно сделать, так это нарисовать несколько (полупрозрачных) многоугольников (которые могут перекрываться) в фигуру, а затем получить матрицу (размером H x W ) значений пикселей RGB.
Пример того, что я уже сделал:
H = 100; % Desired height (in pixels)
W = 150; % Desired width (in pixels)
f = figure('Position',[0,0,W,H],'Resize', 'off', 'DockControls', 'off','PaperUnits','inches','PaperPosition',[0,0,W,H]);
axis off;
hold on;
% Background
fill([0,W,W,0,0], [0,0,H,H,0], 'black', 'FaceAlpha',1, 'EdgeColor', 'none');
% Other polygons
fill([20,60,95], [40,80,10], 'r', 'FaceAlpha',0.5, 'EdgeColor', 'none');
fill([10,45,80], [10,90,25], 'g', 'FaceAlpha',0.5, 'EdgeColor', 'none');
% ... there will be more of them
set(gca,'Position',[0,0,1,1]) % This seems to be a problem
pixels = print('-RGBImage','-r1'); % Get RGB matrix
% Try to show the result
figure
imshow(pixels)
Когда фигура f
видна, я вижу:
который является желаемым результатом. Но как только я вызываю print(...) и отображаю пиксели, я вижу:
который имеет белую область справа, что нежелательно.
Я полагаю, что проблема в вызове:
set(gca,'Position',[0,0,1,1])
но поскольку я не очень разбираюсь в Matlab, я не знаю, как это исправить. Есть идеи?
Примечание. Другой подход может заключаться в прямом использовании матриц. Я нашел функцию poly2mask, которая могла бы заполнить треугольники за меня, но с ее помощью мне нужно было бы вычислить все значения RGB(A) наложенных треугольников самостоятельно. Кроме того, poly2mask не будет давать «плавных переходов» по краям треугольников (поскольку вывод — логическое значение 0/1). Есть ли какая-нибудь функция, похожая на poly2mask, но возвращающая значения в интервале [0,1], которая должна дать некоторую гладкость на краях?
P.S.: Я работаю над Ubuntu 14.04, используя Matlab R2015b.