Matlab: как нарисовать многоугольники для фигуры и получить матрицу изображения заданного размера?

Сегодня я хотел поэкспериментировать с полупрозрачными полигонами (в частности, треугольниками) в 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.


person Andrew    schedule 10.10.2016    source источник


Ответы (1)


Кажется, что замена

axis off; 

с участием

axis tight;

как-то решил проблему.

person Andrew    schedule 10.10.2016