今天我想在Matlab中试验半透明多边形(特别是三角形)。我需要做的是绘制几个(半透明的)多边形(可以重叠)到图中,然后得到RGB像素值的矩阵(大小为H x W)。
到目前为止我所做的示例:
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不会给出流畅的过渡和#39;围绕三角形的边缘(因为输出是布尔0/1)。 是否有一些函数类似于poly2mask,但在interval [0,1]中返回值,这应该在边缘上给出一些平滑度?
P.S。:我正在使用Matlab R2015b开发Ubuntu 14.04。
答案 0 :(得分:0)
看来,替换
axis tight;
与
@Autowired
以某种方式解决了这个问题。